c – glMultMatrix / glLoadMatrix比glRotatef或glTranslatef更
发布时间:2020-12-16 10:30:36 所属栏目:百科 来源:网络整理
导读:假设我有以下代码: glRotatef(angle,1.0f,0.0f);glRotatef(angle,0.0f,1.0f);glTranslatef(0.0f,0.0f -5.0f); 这是否比通过glLoadMatrix函数使用自己的自定义矩阵效率更低,它可以实现相同的功能? 此外,我知道当将矩阵相乘以形成自定义线性变换时,最后一个
假设我有以下代码:
glRotatef(angle,1.0f,0.0f); glRotatef(angle,0.0f,1.0f); glTranslatef(0.0f,0.0f -5.0f); 这是否比通过glLoadMatrix函数使用自己的自定义矩阵效率更低,它可以实现相同的功能? 此外,我知道当将矩阵相乘以形成自定义线性变换时,最后一个矩阵乘以是第一个发生的变换.同样,如果我使用上面的代码就是这种情况?它是否会平移,然后围绕Z轴旋转,然后绕y轴和x轴旋转? 解决方法
一般情况下,如果您自己组装矩阵并通过glLoadMatrix或glMultMatrix加载它,您的程序将运行得更快.除非你在你自己的矩阵程序中犯了愚蠢的错误,否则会破坏当然的表现.
这是因为glRotate glTranslate等功能比纯数学运算要多得多.他们必须检查矩阵模式. glRotate必须处理轴未作为单位向量等传递的情况. 但除非你每帧执行10万次,否则我不会担心丢失的性能.它加起来,但并没有那么多. 我个人处理openGL转换的方法是在我的代码中构建矩阵,并通过glLoadMatrix将它们上传到OpenGL.这允许我做很多快捷方式,比如颠倒乘法的顺序(计算速度比OpenGL的方式快).此外,它还允许我即时访问矩阵,如果您想在渲染之前进行边界框检查,则需要该矩阵. 不用说用这种方法编写的代码也更容易移植到不同的图形API上(想想OpenGL | ES2,DirectX,Game-Consoles ……) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |