我有一个简单的网格。一个立方体。它的透明度为 50%。
我需要显示数千个,但每一个的颜色和透明度在每一帧都会改变。整个立方体都会改变颜色,而不仅仅是一组面。网格保持不变,立方体位置的变化非常小(但有一些)。
到目前为止,我所看到的是“实例化”,但我只在静态项目中看到过。
如何在 OpenGL 中显示数千个变色立方体?
最佳答案
实例化是一种潜在的解决方案。
您所做的不是仅将位置设为实例变量,而是将颜色设为实例变量。
一个 VBO 拥有完整的立方体网格。
另一个有一个序列InstanceData {vec3 position, vec3 color}
您将属性指定为:
glBindBuffer(GL_ARRAY_BUFFER, instanceBuffer);
glVertexAttribPointer(cubePosLoc, 3, GL_FLOAT, GL_FALSE, sizeof(InstanceData), (void*)offsetof(position, InstanceData));
glVertexAttribPointer(cubeColorLoc, 3, GL_FLOAT, GL_FALSE, sizeof(InstanceData), (void*)offsetof(color, InstanceData));
并为 cubePosLoc
和 cubeColorLoc
设置 AttributeDivisor
。
然后在顶点着色器中将这些视为普通属性。 (将 Cubeposition 添加到顶点的位置并将颜色传递给片段着色器)
在每一帧之间,您使用新的位置和颜色更新 instanceBuffer
。
关于c++ - 如何在 OpenGL 中高效地显示数千个具有动态颜色的相同网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31946727/