我正在编写一个使用OpenGL绘制大量移动/旋转多边形的程序。每个多边形在世界坐标中具有位置,而其顶点以局部坐标(相对于多边形位置)表示。每个多边形也有一个旋转。
我能想到这样做的唯一方法是通过每帧中的平移/旋转计算顶点位置并将它们推到GPU上绘制,但我想知道是否可以在顶点着色器中执行此操作。
我想我可能会在局部坐标中表示顶点位置,然后将位置和旋转属性添加到每个顶点,但是我发现这不会比在每个帧上推动新的顶点位置更好。
我应该在CPU上进行这种计算,还是有办法在顶点着色器中有效地进行计算?
答案 0 :(得分:3)
顶点着色器确实负责转换几何体。但是,顶点着色器将针对场景的每个顶点运行。如果在顶点着色器中进行变换,则会反复进行相同的计算,每次都会产生相同的结果(而不是简单地将模型视图投影矩阵与顶点坐标相乘)。所以在效率方面,你最好在CPU方面做到这一点。
如果模型很小,就像你的情况一样,我不认为会有太大的差异,因为你仍然必须设置多边形应该以某种方式绘制的坐标。在这种情况下,在CPU端执行一次计算仍然是最好的,因为它一次独立于多边形的顶点计数进行计算,并且它可能会产生更清晰的代码,因为它更容易看到你的内容正在做。
答案 1 :(得分:0)
这些计算通常仅在CPU上完成。在CPU上执行它们通常是有效的。你最好的镜头是将这些旋转矩阵发送到一致并在GPU上进行乘法运算。一般来说,发送制服并不是非常昂贵,所以你应该担心这一点。