如何在以后的迭代opengl中有效地转换和使用结果坐标?

时间:2016-02-28 02:58:37

标签: opengl shader glfw vertex glm-math

我有一个可以旋转并沿x轴前进的轮子。轮子由一个简单的圆圈和4条直径线组成。现在,在每次迭代中,线条平移并旋转一小部分,圆和中心应仅沿x轴平移。

在opengl中实现这一目标的最佳方法是什么?我有两种方法

1)创建一个顶点和线坐标的初始数组,然后为圆和线创建两个着色器。然后在每次迭代中计算旋转和平移矩阵,并在每次迭代时将此矩阵和初始顶点通过均匀传递给顶点着色器。

2)计算一次变换矩阵,然后在每次迭代中用新坐标更新顶点数组(我不知道如何从.vertex着色器返回数据)。

那么哪个是最有效的方式来做这个动画,如果它是2,请解释我是如何实现这一点的,因为我不知道如何在下一次迭代中使用一次迭代的顶点着色器输出。

1 个答案:

答案 0 :(得分:2)

在OpenGL中执行任何操作的最佳方法通常是使代码尽可能简单明了。这也是大约97%的时间(效率方式)(Knuth),因为有效的程序比没有的程序要好。现代CPU / GPU速度非常快,甚至可以降低速度。代码通常足够好。

比较这两种方法,第一种方法保留原始数据并每次转换它。第二种方法将用新的变换值替换原始数据。由于计算机数学具有有限的精度,因此小误差会随着时间的推移而累积并扭曲几何形状。所以我会推荐第一个。

如果您想尝试第二种方法,可以通过启用变换反馈进行渲染来获得顶点着色器输出,其中结果不会被绘制,而是存储在您指定的一个或多个VBO中。第6版SuperBible第7章解释了如何做到这一点。

希望这有帮助。