假设我有以下代码:
glRotatef(angle, 1.0f, 1.0f, 0.0f);
glRotatef(angle, 0.0f, 1.0f, 0.0f);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
glTranslatef(0.0f, 0.0f -5.0f);
Run Code Online (Sandbox Code Playgroud)
这是否比通过glLoadMatrix函数使用自己的自定义矩阵效率更低,它可以实现相同的功能?
此外,我知道当将矩阵相乘以形成自定义线性变换时,最后一个矩阵乘以是第一个发生的变换.同样,如果我使用上面的代码就是这种情况?它是否会平移,然后围绕Z轴旋转,然后绕y轴和x轴旋转?
一般情况下,如果您自己组装矩阵并通过glLoadMatrix或glMultMatrix加载它,您的程序将运行得更快.除非你在你自己的矩阵程序中犯了愚蠢的错误,否则会破坏当然的表现.
这是因为glRotate glTranslate等功能比纯数学运算要多得多.他们必须检查矩阵模式.glRotate必须处理轴未作为单位向量等传递的情况.
但除非你每帧执行10万次,否则我不会担心丢失的性能.它加起来,但并没有那么多.
我个人处理openGL转换的方法是在我的代码中构建矩阵,并通过glLoadMatrix将它们上传到OpenGL.这允许我做很多快捷方式,比如颠倒乘法的顺序(计算速度比OpenGL的方式快).此外,它还允许我即时访问矩阵,如果您想在渲染之前进行边界框检查,则需要该矩阵.
不用说用这种方法编写的代码也更容易移植到不同的图形API上(想想OpenGL | ES2,DirectX,Game-Consoles ......)