【发布时间】:2012-08-13 17:29:05
【问题描述】:
我只是在看我的动画精灵代码,并得到一些想法。
动画是通过改变 tex 坐标制作的。它有缓冲区对象,它保存当前帧的纹理坐标,当新的帧请求时,新的纹理坐标通过 glBufferData() 进入缓冲区。
如果我们预先计算所有动画帧的纹理坐标,将它们放在 BO 中并创建仅包含我们需要绘制的帧数的索引缓冲区对象
GLbyte cur_frames = 0; //1,2,3 etc
现在我们需要更新动画,我们只需要更新 1 个字节(而不是 4 /quad vertex count/ * 2 /s, t/ * sizeof(GLfloat) 字节用于我们的 IBO 的带有 glBufferData 的 TRIANGLE_STRIP) 帧的四边形绘制,我们不需要在我们的 BO 初始化后保存任何纹理坐标。
我错过了什么?什么是对比?
编辑:当然,例如,您的顶点数据可能不是 gl_float。
【问题讨论】:
-
预计算 = 更多的内存使用和更大的缓冲区。没有好坏之分,只是不同。分析您的应用程序,看看是否值得您花时间在此处投资提高性能。只有您知道速度/内存折衷是否适合您。
-
为什么你甚至需要用这种技术更新任何东西?您只需为
glDrawElements提供不同的起始索引或使用BaseVertex变体。 -
是的,你说得对,只是忘了。