我有一个八角形,我需要旋转并转换到10,000个不同的位置/角度。角度和坐标动态变化。
如果我在立即模式下使用glRotate和glTranslate,由于所有在客户端/服务器之间来回传输,它会太慢。
如果我在显示列表中使用glRotate和glTranslate,它会很快,但我会避免显示列表,因为它已被弃用。
如果我使用VBO,我必须预先旋转并预转换CPU上的八边形,然后再将其上传到服务器内存。这有效,但需要大量的CPU时间。
所以我想知道......无论如何要转换/旋转存储在VBO中的顶点,而不依赖于基于CPU的计算。是否有VBO等效执行存储在服务器内存中的旋转/转换值?我真的很喜欢GPU来完成所有计算并从所有三角函数中释放CPU。
答案 0 :(得分:3)
我会使用VBO和常规glRotate
和glTranslate
,(或使用glUniformMatrix向顶点着色器提供矩阵)。我认为它不会减慢渲染速度!
答案 1 :(得分:3)
您可以使用GLSL编写一个为您处理转换的着色器。但是,您需要以某种方式使着色器可以使用变换矩阵。
如果你在2D中这样做,在游戏开发堆栈交换中有一个类似的问题(对于四边形,但理论是相同的):Basics of drawing in 2D with OpenGL 3 shaders。
请注意,该问题的第二个答案提供了更多详细信息,其中包含指向OpenGL.org的链接,该链接具有损坏的锚点。我认为它应该链接到Instanced arrays。
我在快速谷歌搜索后找到的实例化示例:Shader instancing。在本教程中,您可能希望查看顶点着色器,以获取使用纹理缓冲区存储矩阵的变换矩阵的示例。示例代码是Delphi,但它应该是可读的。该网站使用德语,但您始终可以使用Google翻译。