Java 窗口中心的Opengl图形

Java 窗口中心的Opengl图形,java,opengl,swt,Java,Opengl,Swt,我开始处理OpenGL。我的应用程序是用Java编写的,使用SWT作为窗口系统 使用和SWT,我能够在SWT画布中使用OpenGL。我在canvas paint listener中编写了以下简单的OpenGL代码: // clear to background color GL11.glClearColor(.3f, .5f, .8f, 1.0f); GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); // draw rectangle GL11.glOrtho(0

我开始处理OpenGL。我的应用程序是用Java编写的,使用SWT作为窗口系统

使用和SWT,我能够在SWT画布中使用OpenGL。我在canvas paint listener中编写了以下简单的OpenGL代码:

// clear to background color
GL11.glClearColor(.3f, .5f, .8f, 1.0f);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);

// draw rectangle
GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glBegin(GL11.GL_POLYGON);
GL11.glVertex3f(0.1f, 0.1f, 0.0f);
GL11.glVertex3f(0.1f, 0.9f, 0.0f);
GL11.glVertex3f(0.9f, 0.9f, 0.0f);
GL11.glVertex3f(0.9f, 0.1f, 0.0f);
GL11.glEnd();
GL11.glFlush();

我想知道如何在画布上添加一个调整大小的侦听器,以使矩形始终位于窗口的中心。我该怎么做

您需要通过每次更改画布大小时调用手动设置视口大小。之后,屏幕的尺寸将由指定

而且,你的矩阵很乱。投影矩阵仅用于投影,modelview用于其他变换(旋转、缩放、移动等)

// Viewport (needs to be done on canvas resize only)
GL11.glViewport(0.0, 0.0,                   // Set viewport size
                canvas.getBounds().width,
                canvas.getBounds().height);

// Projection (only needs to be set once in most cases)
GL11.glMatrixMode(GL11.GL_PROJECTION);        // Select projection matrix
GL11.glLoadIdentity();                        // Clear it
GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);  // Set your projection

// model/view transforms
GL11.glMatrixMode(GL11.GL_MODELVIEW);  // Select modelview matrix
GL11.glLoadIdentity();                 // Clear it

// Draw (shortcut)
GL11.glRectf(0.1f, 0.1f, 0.9f, 0.9f);