java - Opengl 在窗口中央绘图

标签 java opengl swt

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

使用http://lwjgl.org/和 SWT,我可以在 SWT Canvas 中使用 OpenGL。我在 Canvas 绘画监听器中编写了以下简单的 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();

我想知道在我的 Canvas 上添加一个调整大小监听器,以便始终让我的矩形位于窗口的中心。我该怎么做呢?

最佳答案

您需要通过调用 glViewport() 手动设置视口(viewport)大小每次 Canvas 大小改变时。之后您的屏幕将具有 glOrtho() 指定的尺寸.

此外,你的矩阵一团糟。投影矩阵仅用于投影,模型 View 用于其他变换(旋转、缩放、移动等)。

// 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);

关于java - Opengl 在窗口中央绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373252/

相关文章:

java - 返回 404 的 Rest Web 服务

opengl - gluLookAt 和 glFrustum 一起扭曲了渲染吗?

opengl gbuffer使用GL_TEXTURE_2D_MULTISAMPLE纹理问题

java - SWT (JFace) 中的 FontRegistry 和 Dispose

java - java中的并行矩阵乘法

java - 在 Java 中查找共享可变数据错误的工具

java - 自定义操作栏停止我的应用程序

c++ - 处理 8 位位图中 alpha channel 的好方法? - OpenGL - C++

java - 如何在 SWT 中监听粘贴键盘快捷键

java - 当之前的一些行在我自己的 Eclipse 编辑器中折叠时获取当前行中的文本