C++ OpenGL:高效计算变换矩阵
所以,我渲染了一堆立方体;比如,屏幕上会同时出现数千个立方体。问题是,为每个立方体计算每一帧的变换矩阵并不是很有效:1000个立方体以54 fps的速度渲染,10000个立方体以6 fps的速度渲染。我需要能够改变这些变换矩阵,因为玩家将能够遍历它们 以下是我的渲染代码:C++ OpenGL:高效计算变换矩阵,c++,opengl,matrix,C++,Opengl,Matrix,所以,我渲染了一堆立方体;比如,屏幕上会同时出现数千个立方体。问题是,为每个立方体计算每一帧的变换矩阵并不是很有效:1000个立方体以54 fps的速度渲染,10000个立方体以6 fps的速度渲染。我需要能够改变这些变换矩阵,因为玩家将能够遍历它们 以下是我的渲染代码: void Tester::render() { for (int i = 0; i < numInstances; i++) transforms[i] = Commons::PERSPECTIV
void Tester::render()
{
for (int i = 0; i < numInstances; i++)
transforms[i] = Commons::PERSPECTIVE_MATRIX * translations[i];
glBindBuffer(GL_ARRAY_BUFFER, m_transformationMatrixBuffer);
glBufferData(GL_ARRAY_BUFFER, numInstances * sizeof(glm::mat4), &transforms[0], GL_DYNAMIC_DRAW);
for (int i = 0; i < 4; i++)
{
glVertexAttribPointer(MVP_LOC + i, 4, GL_FLOAT, GL_FALSE, sizeof(glm::mat4), (const void*)(sizeof(float) * i * 4));
glEnableVertexAttribArray(MVP_LOC + i);
glVertexAttribDivisor(MVP_LOC + i, 1);
}
glDrawElementsInstanced(GL_TRIANGLES, m_numIndexDataElements, GL_UNSIGNED_SHORT, 0, numInstances);
}
基本上,我的问题是:如何有效地计算每个多维数据集实例的转换矩阵?有一个操作会很慢:第一个for循环。相反,只需将Commons::PERSPECTIVE_矩阵作为一个统一的传递,并且只传递属性中的转换部分 然后在顶点着色器中,将它们相乘,然后应用于顶点
如果您还需要进行逐实例旋转,我建议为此传递一个四元数。为什么您认为需要调整矩阵计算?你做过分析吗?如果你愿意,你可能会感到惊讶。另一件事:您真的需要每一帧更改所有10k对象的变换吗?另外,请使用VAOs。请解释一下调整矩阵计算的含义好吗?关于不需要每帧更改10k变换,您可能是对的,但我需要至少更改1k变换。我将实现VAOs。通过调整矩阵,我的意思是你们所问的问题:有效地计算变换矩阵。在进行任何优化之前,请先进行分析。如果不进行分析,这是徒劳的。