【发布时间】:2014-12-05 05:18:11
【问题描述】:
所以,我正在渲染一堆立方体;就像,屏幕上会同时出现数千个立方体。问题在于为每个立方体计算每帧的变换矩阵,事实证明,效率不是很高:1,000 个立方体以 54 fps 渲染,10,000 个立方体以 6 fps 渲染。我需要能够更改这些转换矩阵,因为玩家将能够遍历它们。
这是我的渲染代码:
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。
-
您能解释一下您所说的调整矩阵计算是什么意思吗?关于不需要每帧更改 10k 变换,您可能是对的,但我需要更改至少 1k 变换。我将实施 VAO。
-
通过调整矩阵我的意思是你问的问题:“有效地计算转换矩阵”。请在进行任何优化之前profile。
-
不进行分析是徒劳的。