Opengl在窗口*绘制
问题描述:
我开始处理OpenGL。我的应用程序是使用SWT作为窗口系统以Java编写的。Opengl在窗口*绘制
使用http://lwjgl.org/和SWT,我可以在我的SWT画布中使用OpenGL。我写了下面简单的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();
我想知道,为了增加我的画布大小调整听者总是有我在窗口的中心矩形。我应该怎么做?
答
每次画布大小发生变化时,都需要通过调用glViewport()
来手动设置视口大小。之后,您的屏幕将具有由glOrtho()
指定的尺寸。
此外,你的矩阵是一团糟。投影矩阵仅用于投影,模型视图用于其他转换(旋转,缩放,移动等)。
// 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);