更新 VBO 还是使用制服?
Update VBO or use uniforms?
假设我的场景中有数百个矩形。他们每个人都在改变每一帧:
- 它们在场景上移动、旋转、缩放 up/down
- 顶点的颜色发生变化,应与纹理的颜色相结合
- 纹理坐标发生变化,因为它们是 2D 动画
我应该怎么做才能获得最佳性能?有我的想法。请帮助我选择其中最好的或提出其他建议:
- 每帧更新 VBO
- 制作比需要更多的顶点(例如:将所有动画的帧存储在 VBO 中)并选择要渲染的顶点(多次调用 glDrawElements)
- 通过制服发送变化的数据并在顶点着色器中重新计算它而不是 CPU
主要问题实际上是:哪些函数我可以调用任意多次,哪些函数我应该避免在每个主循环中调用多次?
通常模型在本地保持不变 space 所以你只需要将它上传到 VBO 一次。平移、旋转、缩放等变化是通过将相应的变换矩阵加载到制服中并在着色器中使用它们来执行的。
假设我的场景中有数百个矩形。他们每个人都在改变每一帧:
- 它们在场景上移动、旋转、缩放 up/down
- 顶点的颜色发生变化,应与纹理的颜色相结合
- 纹理坐标发生变化,因为它们是 2D 动画
我应该怎么做才能获得最佳性能?有我的想法。请帮助我选择其中最好的或提出其他建议:
- 每帧更新 VBO
- 制作比需要更多的顶点(例如:将所有动画的帧存储在 VBO 中)并选择要渲染的顶点(多次调用 glDrawElements)
- 通过制服发送变化的数据并在顶点着色器中重新计算它而不是 CPU
主要问题实际上是:哪些函数我可以调用任意多次,哪些函数我应该避免在每个主循环中调用多次?
通常模型在本地保持不变 space 所以你只需要将它上传到 VBO 一次。平移、旋转、缩放等变化是通过将相应的变换矩阵加载到制服中并在着色器中使用它们来执行的。