OpenGL:高效计算变换矩阵
OpenGL: efficiently calculating transformation matrices
所以,我渲染了一堆立方体;就像,屏幕上会同时有数千个立方体。问题在于,事实证明,计算每个立方体的每一帧的转换矩阵并不是很有效: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);
}
基本上,我的问题是:如何有效地计算每个多维数据集实例的转换矩阵?
有一个操作会很慢:第一个 for 循环。 相反,只需将Commons::PERSPECTIVE_MATRIX
作为统一传递,并且仅传递属性中的翻译部分。
然后在顶点着色器中,将它们相乘,然后应用于顶点。
如果您还需要每个实例的旋转,我建议您为此传递一个四元数。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 快速计算变换/旋转马里克斯4x4
- 如何在 CPU 上计算向量变换?
- 变换从三焦点张量计算的投影矩阵以估计3D点
- 计算图像对之间的几何变换
- OpenGL:高效计算变换矩阵
- 从三个三维点计算变换矩阵
- 在试图计算2幅图像的FFT(快速傅里叶变换)时发生访问冲突