【发布时间】:2014-04-02 18:59:12
【问题描述】:
我有一个使用着色器和顶点缓冲区对象的 OpenGL 应用程序,以及用于矩阵和向量的 GLM。因为每帧都会发生矩阵变换,所以我每帧都调用 glUniformMatrix4fv() 。以下是我的代码的 sn-p:
ViewMatrix = glm::rotate(glm::mat4(1.0f), glm::radians(YRotation), glm::vec3(0.0f, 1.0f, 0.0f)) * ViewMatrix;
ViewMatrix = glm::rotate(glm::mat4(1.0f), glm::radians(XRotation), glm::vec3(1.0f, 0.0f, 0.0f)) * ViewMatrix;
ViewMatrix = glm::translate(glm::mat4(1.0f), Translate) * ViewMatrix;
...
glUniformMatrix4fv(ShaderProgram->GetUniformLocation("View"), 1, GL_FALSE, glm::value_ptr(ViewMatrix));
如图所示,我调用 GetUniformLocation() 来获取我在着色器中声明为统一的 View 矩阵的位置。它是CProgram 类的成员函数,它简单地调用glGetUniformLocation()。因为每帧都会调用它,所以我想知道在程序开始时只调用一次 glGetUniformLocation() 并重复使用从该返回的值是否会更好。帧率实际上会有任何明显的差异吗?
【问题讨论】:
标签: c++ opengl matrix 3d glm-math