有没有办法在使用vbo而不是统一的Opengl中使用单个输入值?

时间:2015-09-19 10:29:55

标签: opengl 3d glsl vbo voxel

我不确定我的问题是否足够明确,所以解释如下: 我正在使用opengl处理体素引擎,它工作正常,但我希望通过一些优化来改进它。我开始使用VBO作为立方体的顶点,我获得了一些fps,因此非常棒。但现在我想用立方体的颜色做同样的事情,我没有找到一个让我满意的答案,因为我有需要的具体内容:

  • 我只使用3个浮点颜色,所以即使它工作,glVertexAttribPointer()似乎也不是一个好方法,因为如果我使用它我将需要使用108每立方体浮动3次。

  • 我想绘制多个立方体,所以使用glUniform3f并不好,因为每个立方体发送3个浮点数会非常慢,需要绘制很多立方体。

所以对于上下文我的问题是,有没有办法将值存储在GPU的内存中(如VBO),当我绘制立方体时,我只会告诉着色器这些值在哪里?

感谢阅读,可能会回答:)

1 个答案:

答案 0 :(得分:0)

glVertexAttribDivisor(attribute, 1)

告诉OpenGL #attribute每个基元有一个值,而不是每个顶点。如果将数字从1增加到N,则每个N基元可以有1个值。用于指定颜色(或其他任何)一次而不是重复。

glDrawArraysInstanced / glDrawElementsInstanced也许有用。这两个都绘制​​了一组点/线/三角形N次,并且在着色器中你可以使用gl_InstanceID作为一个整数来计算立方体/无论#0,#1,......

希望这有帮助