我有两组用作线带的顶点:
- 顶点1
- 顶点2
重要的是要知道这些顶点具有以前未知的值,因为它们是动态的。
我想在这两者之间进行动画过渡(变形)。我想出了两种不同的方法:
选项1:
在顶点着色器中设置时间统一,从0 - 1开始,我可以在其中执行以下操作:
// Inside main() in the vertex shader
float originX = Position.x;
float destinationX = DestinationVertexPosition.x;
float interpolatedX = originX + (destinationX - originX) * Time;
gl_Position.x = interpolatedX;
正如您可能看到的,这有一个问题:如何在其中获得“DestinationVertexPosition”?
选项 2:
在顶点着色器之外进行插值计算,在这里我循环遍历每个顶点并为插值创建第三个顶点集,并使用它来渲染:
// Pre render
// Use this vertex set to render
InterpolatedVertexes
for (unsigned int i = 0; i < vertexCount; i++) {
float originX = Vertexes1[i].x;
float destinationX = Vertexes2[i].x;
float interpolatedX = originX + (destinationX - originX) * Time;
InterpolatedVertexes[i].x = interpolatedX;
}
我已经高度简化了这两个代码片段,只是为了让这个想法更清楚。
现在,从这两个选项中,我觉得第一个在性能方面肯定更好,因为事情发生在着色器级别,而且我不必在每次“时间”更新时创建一组新的顶点.
因此,既然已经介绍了问题的介绍,我将不胜感激以下三件事:
- 讨论在 OpenGL ES 2 (iOS) 中实现预期结果的更好方法。
- 讨论如何通过提供“DestinationVertexPosition”或以某种方式修改想法来正确实现选项 1,以更好地实现相同的结果。
- 关于如何实施选项 2的讨论。