OpenGL在可滚动面板中绘制部分对象

时间:2012-06-19 04:41:55

标签: user-interface opengl scroll viewport lwjgl

我在OpenGL中制作GUI(更具体地说是lwjgl)。我努力研究不同的方法,但我很难找到我想要的东西。我不想使用任何外部库(只有内置OpenGL,甚至试图远离使用GLUT),我想让它适用于任何支持OpenGL的东西(例如,帧缓冲对象不适用于旧版本)图形卡)。

我正在制作一个带有可滚动面板作为组件的3D GUI。问题是我不知道如何绘制部分GUI组件而不进行大量计算以仅渲染其中的一部分。我用OpenGL原语制作组件,而不是纹理。我希望有一种简单的方法可以像使用多个视口一样。我甚至不了解什么是视口。

简而言之:我需要一个可滚动的面板作为一个与其他GUI组件重叠的组件(因为它将是一个下拉菜单),并且不要让我面板中的任何组件在我的面板之外绘制。

2 个答案:

答案 0 :(得分:6)

如果您只想阻止绘制矩形区域之外的像素(我认为这就是您所要求的),那么glScissor正是您正在寻找的。

在lwjgl中,您可以在org.lwjgl.opengl.GL11中找到该功能。

答案 1 :(得分:1)

如果要在屏幕上的固定区域内滚动较大的场景,最简单的方法是只修改滚动位置的投影矩阵并重新绘制场景。如果您使用gluPerspective设置投影矩阵,则必须将其转换为直接调用glFrustum;如果你使用glOrtho它会更直接。

请记住,“滚动”透视视图没有正确的方法 - 它取决于您想要实现的效果类型,以及您想要在整个视口边缘附近的特定类型的扭曲。