我有一个简单的网格。一个立方体。它透明度为50%。
我需要显示数千个,但每一帧的颜色和透明度都会发生变化。整个立方体改变颜色,而不仅仅是一组面。网格保持不变,立方体位置的转换很少(但有些)。
到目前为止我所看到的是"实例化"但我只看到过静态物品。
如何在OpenGL中显示数千个变色立方体?
答案 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));
为AttributeDivisor
和cubePosLoc
设置cubeColorLoc
。
在顶点着色器中,您可以将它们视为普通属性。 (将Cubeposition添加到顶点的位置并将颜色传递给片段着色器)
在每个帧之间,您使用新的位置和颜色更新instanceBuffer
。
答案 1 :(得分:0)
将颜色(或表示颜色的其他因子)设置为均匀,然后根据需要合并顶点或片段着色器的均匀。