Opengl 使用旋转、平移等设置ModelView矩阵。。vs设置手动矩阵

Opengl 使用旋转、平移等设置ModelView矩阵。。vs设置手动矩阵,opengl,matrix,Opengl,Matrix,在设置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矩阵设置为此手动矩阵,这样不

在设置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矩阵设置为此手动矩阵,这样不是更有效吗?

当然,只要转换不会改变。例如,如果用户可以用鼠标移动和旋转对象,则必须继续重新计算矩阵。在这种情况下,您也可以让OpenGL为您做这件事


另外,除非您有性能问题,否则我不会担心效率,只会坚持使用任何能使代码更简单的方法,也就是指定单个转换。

尽管我不能完全确定,Jeff Lamarche的优秀“OpenGL从头开始”教程似乎表明矩阵乘法无论如何都发生在CPU上。看

如果你仍在努力让事情尽快进行,他的文章中有一些代码使用iPhone的矢量处理器(想想桌面上的SSE1/2/3/4)将代码速度提高7倍(从运行时的0.7%提高到Shark上的0.1%)

但是,性能的提高可能不值得,特别是在代码可读性方面。如果您希望代码尽可能快地运行,则执行它,但如果没有,请考虑保持库转换,以便其他人可以了解代码中的内容。在iPhone上使用OpenGL的每个人都会识别
glTranslatef(x,y,z)
,但可能不会识别
mTranslate(worldview,makeMat(…)