gpt4 book ai didi

java - JOGL 屏幕坐标关闭

转载 作者:行者123 更新时间:2023-12-02 07:55:39 30 4
gpt4 key购买 nike

鉴于我从 JOGAMP wiki 获得的这个简单示例,为什么鼠标坐标在 y 方向上偏离 40,在 x 方向上偏离 20?单击屏幕右下角会显示坐标 (620, 440),而不是像我期望的那样 (640, 480)。

感谢您的帮助!

这是程序:

import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.JFrame;

import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
* A minimal program that draws with JOGL in a Swing JFrame using the AWT GLCanvas.
*
* @author Wade Walker
*/
public class OneTriangleSwingGLCanvas implements MouseListener{

static {
// setting this true causes window events not to get sent on Linux if you run from inside Eclipse
GLProfile.initSingleton( false );
}

public static void main( String [] args ) {
GLProfile glprofile = GLProfile.getDefault();
GLCapabilities glcapabilities = new GLCapabilities( glprofile );
final GLCanvas glcanvas = new GLCanvas( glcapabilities );

OneTriangleSwingGLCanvas mouse = new OneTriangleSwingGLCanvas();
glcanvas.addMouseListener(mouse);

glcanvas.addGLEventListener( new GLEventListener() {

@Override
public void reshape( GLAutoDrawable glautodrawable, int x, int y, int width, int height ) {
OneTriangle.setup( glautodrawable.getGL().getGL2(), width, height );
}

@Override
public void init( GLAutoDrawable glautodrawable ) {
}

@Override
public void dispose( GLAutoDrawable glautodrawable ) {
}

@Override
public void display( GLAutoDrawable glautodrawable ) {
OneTriangle.render( glautodrawable.getGL().getGL2(), glautodrawable.getWidth(), glautodrawable.getHeight() );
}
});

final JFrame jframe = new JFrame( "One Triangle Swing GLCanvas" );
jframe.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent windowevent ) {
jframe.dispose();
System.exit( 0 );
}
});

jframe.getContentPane().add( glcanvas, BorderLayout.CENTER );
jframe.setSize( 640, 480 );
jframe.setVisible( true );
}

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("Mouse pressed at : (" + e.getX() + ", " + e.getY() + ")");
}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}
}

//OneTriangle.java

import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.glu.GLU;

public class OneTriangle {
protected static void setup( GL2 gl2, int width, int height ) {
gl2.glMatrixMode( GL2.GL_PROJECTION );
gl2.glLoadIdentity();

// coordinate system origin at lower left with width and height same as the window
GLU glu = new GLU();
glu.gluOrtho2D( 0.0f, width, 0.0f, height );

gl2.glMatrixMode( GL2.GL_MODELVIEW );
gl2.glLoadIdentity();

gl2.glViewport( 0, 0, width, height );
}

protected static void render( GL2 gl2, int width, int height ) {
gl2.glClear( GL.GL_COLOR_BUFFER_BIT );

// draw a triangle filling the window
gl2.glLoadIdentity();
gl2.glBegin( GL.GL_TRIANGLES );
gl2.glColor3f( 1, 0, 0 );
gl2.glVertex2f( 0, 0 );
gl2.glColor3f( 0, 1, 0 );
gl2.glVertex2f( width, 0 );
gl2.glColor3f( 0, 0, 1 );
gl2.glVertex2f( width / 2, height );
gl2.glEnd();
}
}

最佳答案

语句jframe.setSize(640, 480)指定整个框架的大小,包括任何装饰,例如拖动条和边框。您可以检查框架的 getInsets() .

此外,GLCanvas 是一个重量级组件。考虑将其添加到 AWT Frame,而不是混合。

关于java - JOGL 屏幕坐标关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9687800/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com