JOGAMP wikiから得たこの簡単な例を考えてみると、マウス座標がy方向に40、x方向に20ずれているのはなぜですか?画面の右下隅をクリックすると、私が期待する座標(620,440)でなく、(640,480)の座標が表示されます。JOGL画面座標がオフ
ありがとうございました!
は、ここでプログラムです:
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();
}
}
左隅の座標は何ですか? – korifey
座標は(0、0) – Cuthbert