2011-01-30 78 views
2

我有一个八角形,我需要旋转并翻译到10,000个不同的位置/角度。角度和坐标动态变化。快速旋转和平移不使用glRotate/glTranslate

  1. 如果我在即时模式下使用glRotate和glTranslate,这将是由于所有的来回客户端之间/服务器速度太慢。

  2. 如果我在显示列表上使用glRotate和glTranslate,它会很快,但我避免显示列表,因为它已被弃用。

  3. 如果我使用VBO,我必须预先旋转并预先转换CPU上的八角形,然后才能将其上传到服务器内存。这工作,但需要大量的CPU时间。

所以我想知道...有无论如何翻译/旋转存储在VBO中的顶点,而不诉诸于基于CPU的计算。是否有执行存储在服务器内存中的旋转/转换值的VBO等效项?我真的很喜欢GPU做所有的计算,并从我所有的trig函数中释放CPU。

+0

哦,男人,我打算提出一个聪明的答案,但我完全忘了带一个八角形! – 2011-01-30 17:54:43

+0

是的,我的问题是,每个翻译/旋转命令将在8 vertice对象(而不是每个调用5000顶点VBO)上工作。这不是有效的做事方式。命令滞后将超出渲染时间。 – Gary 2011-01-31 01:55:33

回答

3

我会使用VBO和常规glRotateglTranslate(或使用glUniformMatrix为顶点着色器提供矩阵)。我不认为这会降低渲染速度!

3

您可以使用GLSL编写处理转换的着色器。但是,您需要以某种方式使着色器可以使用转换矩阵。

如果你用2D做这件事,游戏开发堆栈交换中存在类似的问题(对于四边形,但理论相同):Basics of drawing in 2D with OpenGL 3 shaders

请注意,该问题的第二个答案,它提供了更多的细节,有一个链接到OpenGL.org有一个坏锚。我相信它应该链接到Instanced arrays

快速谷歌搜索后发现的实例化示例:Shader instancing。在本教程中,您可能希望查看顶点着色器,以查看使用纹理缓冲区应用的用于存储矩阵的变换矩阵的示例。示例代码是Delphi,但它应该是可读的。该网站使用德语,但您始终可以使用Google翻译。