6

我正在用 OpenGL(更具体地说是 lwjgl)制作一个 GUI。我一直在努力研究不同的方法来做到这一点,但我很难找到我想要的东西。我不想使用任何外部库(只有在 OpenGL 中构建的库,甚至试图远离使用 GLUT),我想让它在任何支持 OpenGL 的东西上工作(例如,帧缓冲区对象不适用于旧的显卡)。

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

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

4

2 回答 2

7

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

在 lwjgl 中,您可以在org.lwjgl.opengl.GL11.

于 2012-06-19T05:00:46.517 回答
1

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

请记住,“滚动”透视图并没有一种正确的做事方式 - 这取决于您想要实现的效果类型,以及您想要在整个视口边缘附近出现什么样的特定扭曲。

于 2012-06-19T05:16:32.663 回答