2013-02-12 38 views
0

我被要求绘制一个三维四面体,并使其围绕x,y或z轴旋转,具体取决于输入给定。现在我有2个问题。围绕其中心旋转opengl四面体?

1)我用GL_TRIANGLES(4个三角形)绘制了我的四面体。这是绘制将被转换的基元的更好方式吗?我相信(从我见过的其他问题),轴旋转是关于转换为特定的轴,类似于(0,-y,-z),然后围绕该轴旋转并最终转回。现在好了,翻译的价值应该是什么? y,z?我有很多代表每个顶点的值,我是否将它们全部翻译?

回答

0

我认为这将是更快地只写完整的答案多问了很多问题:

  1. 为了缓解和速度了一点东西,使用GL_TRIANGLE_FANGL_TRIANGLE_STRIP代替。

  2. 取决于你所使用的管道:

    2.1老的Op​​enGL(< 2.0,shaderless)

    你不应该翻译,用手旋转它们。使用适当的glRotateglTranslate函数。您需要传递给这些函数的值显然与您的对象的期望位置和旋转有关;你会在文档中找到更多关于它们的信息。

    2.2可编程管线

    创建的变换矩阵(通过自己或通过使用库如GLM),并将其传递作为均匀到顶点着色器。

噢,你不转化为一个轴线。将当前视图矩阵乘以适当的旋转矩阵。

在挖掘更复杂的主题之前,您应该尝试阅读更多内容。 This tutorial包含了很好的现代OpenGL;如果您不得不使用旧的OpenGL,请参阅NeHe tutorials

+0

关于1.)现代GPU针对索引三角形渲染进行了优化,因此在GL_TRIANGLES和其他GL_TRIANGLE_原语之间没有明显的性能差异(如果使用VBO,需要一些严重的角落情况才能获得一些可测量的差异)。如果使用客户端顶点阵列,可测量的差异主要来自系统总线的带宽限制效应。 – datenwolf 2013-02-12 15:54:08

+0

@datenwolf“**缓和**和速度”。想想5? 6?顶点而不是12.它肯定不会*变慢*。 – 2013-02-12 15:55:20

+0

如果要用照明绘制四面体,那么您可以回到12个顶点,就像每个面有不同的顶点一样(顶点是位置,法线和其他属性的整个元组)。 – datenwolf 2013-02-12 16:19:05