如何在OpenGL中有效地显示数千个具有动态颜色的相同网格?

时间:2015-08-11 16:05:49

标签: c++ opengl 3d

我有一个简单的网格。一个立方体。它透明度为50%。

我需要显示数千个,但每一帧的颜色和透明度都会发生变化。整个立方体改变颜色,而不仅仅是一组面。网格保持不变,立方体位置的转换很少(但有些)。

到目前为止我所看到的是"实例化"但我只看到过静态物品。

如何在OpenGL中显示数千个变色立方体?

2 个答案:

答案 0 :(得分:3)

实例化是一种潜在的解决方案。

您所做的不是仅将位置设为实例变量,而是将颜色设为一个。

一个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));

AttributeDivisorcubePosLoc设置cubeColorLoc

在顶点着色器中,您可以将它们视为普通属性。 (将Cubeposition添加到顶点的位置并将颜色传递给片段着色器)

在每个帧之间,您使用新的位置和颜色更新instanceBuffer

答案 1 :(得分:0)

将颜色(或表示颜色的其他因子)设置为均匀,然后根据需要合并顶点或片段着色器的均匀。