0
所以,我渲染了一堆立方体;就像,屏幕上会立刻有成千上万的立方体。问题是,计算每个立方体的每个帧的转换矩阵,结果并不十分有效:1,000个立方体以54 fps呈现,10,000立方以6 fps呈现。我需要能够改变这些转换矩阵,因为玩家将能够遍历它们。OpenGL:高效地计算变换矩阵
这里是我的渲染代码:
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);
}
基本上,我的问题是:我怎么能有效地计算变换矩阵的每个多维数据集实例?
为什么你认为你需要调整矩阵计算?你有没有分析?如果你愿意,你可能会感到惊讶。另一件事:你是否真的需要改变每一帧所有10k对象的变换?另外,使用VAO。 – Drop 2014-12-05 05:35:57
你能否通过调整矩阵计算来解释你的意思?你可能没有必要改变每帧10k的变换,但我需要改变至少1k的变换。我会实施VAO。 – hacksoi 2014-12-05 06:05:35
通过调整矩阵我的意思是你问的问题:“高效地计算变换矩阵”。在进行任何优化之前请[profile](http://en.wikipedia.org/wiki/Profiling_%28computer_programming%29)。 – Drop 2014-12-05 06:21:40