设置ModelView矩阵时,通常会从单位矩阵进行多次转换。例如:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(270.0f, 0.0f, 0.0f, 1.0f);
glTranslatef(-rect.size.height / 2, -rect.size.width / 2, 0.0f);
不是一个接一个地进行这些操作(假设有两个以上),简单地预先计算结果矩阵并将ModelView矩阵设置为这个手动矩阵不是更有效吗?
答案 0 :(得分:1)
当然,只要转型不会改变。例如,如果用户可以使用鼠标移动和旋转对象,那么您将不得不重新计算矩阵。在这种情况下,您也可以让OpenGL为您完成。
此外,除非遇到性能问题,否则我不会担心效率,只需坚持使用哪种方法来保持代码更简单,这可能是指定单个转换。
答案 1 :(得分:0)
虽然我并不完全确定,但Jeff Lamarche出色的“OpenGL from the Ground Up”教程似乎表明矩阵乘法无论如何都会出现在CPU上。请参阅tutorial number 7。
如果你仍然试图让事情尽可能快地进行,他的文章中有一些代码使用iPhone的矢量处理器(在台式机上认为SSE1 / 2/3/4)来加速代码7倍(从运行时的0.7%到Shark的0.1%)。
但是,性能提升可能不值得,特别是在代码可读性方面。如果您希望代码尽可能快地执行,那么请执行此操作,但如果不希望,请考虑保留库转换,以便其他人可以弄清楚代码中发生了什么。在iPhone上执行OpenGL的每个人都会识别glTranslatef(x,y,z)
,但可能不会mTranslate(worldview, makeMat(...))