2010-04-13 134 views
0

设置ModelView矩阵时,您通常会经历来自单位矩阵的多次转换。例如:使用旋转,平移等设置ModelView矩阵。vs设置手动矩阵

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glRotatef(270.0f, 0.0f, 0.0f, 1.0f); 
glTranslatef(-rect.size.height/2, -rect.size.width/2, 0.0f); 

代替其他后做这些操作中的一个的(假设有多于两个),它不会是更有效的方法简单地预先计算所得的矩阵和模型视图矩阵设置为此手动矩阵?

回答

1

当然,只要转型不会改变。例如,如果用户可以用鼠标移动和旋转物体,那么您将不得不重新计算矩阵。在这种情况下,你可以让OpenGL为你做。另外,除非你遇到性能问题,否则我会倾向于不用担心效率,只是坚持用任何一种方法来保持你的代码更简单,这可能会指定单独的转换。

0

虽然我不完全确定,Jeff Lamarche出色的“从头开始的OpenGL”教程似乎表明矩阵乘法会在CPU上出现。见tutorial number 7

如果你仍然试图让事情尽可能快,他的文章有一些使用iPhone矢量处理器的代码(想一下桌面上的SSE1/2/3/4),以加快代码速度7倍(从运行时的0.7%到Shark的0.1%)。

但是,性能增加可能不值得,尤其是在代码可读性方面。如果你希望你的代码尽可能快地运行,那就去做吧,但是如果没有的话,考虑保持库转换,以便其他人可以找出你的代码中发生了什么。每个在iPhone上使用OpenGL的人都会识别glTranslatef(x,y,z),但也许不是mTranslate(worldview, makeMat(...))