- OpenGL顶点规范和绘图命令 Vertex Specification and Drawing Commands
- 图元类型 Primitive Types
- 当前顶点属性值 Current Vertex Attribute Values
- 顶点数组 Vertex Arrays
- 通用顶点属性的数组 Specifying Arrays for Generic Vertex Attributes
- 顶点属性除数 Vertex Attribute Divisors
- 使用顶点数组绘制命令 Drawing Commands Using Vertex Arrays
- 条件渲染 Conditional Rendering
在OpenGL中,“顶点属性除数”是一种用于控制属性在渲染期间前进速率的概念,特别是在一次绘制调用中处理多个图元实例的情况下。这对于希望使某些属性的变化频率低于每个顶点的情况特别有用,尤其是在渲染多个图元实例时。
具体工作原理如下:
- 如果将除数设置为零,则相应的属性每个顶点前进一次。
- 如果除数为非零,则属性每个除数实例的图元集合前进一次。
如果相应的除数值为非零,则泛型属性被称为“实例化”。
要为从顶点数组对象中获取的属性设置除数值,可以使用以下命令:
-
VertexBindingDivisor:
void VertexBindingDivisor(uint bindingindex, uint divisor);
对于此命令,顶点数组对象是当前绑定的顶点数组对象。它将为绑定到顶点数组对象的指定
bindingindex
的缓冲区设置除数值为指定的divisor
。 -
VertexArrayBindingDivisor:
void VertexArrayBindingDivisor(uint vaobj, uint bindingindex, uint divisor);
对于此命令,
vaobj
是顶点数组对象的名称。它将为绑定到顶点数组对象的指定bindingindex
的缓冲区设置除数值为指定的divisor
。
以下命令是一个简便方法,等效于VertexAttribBinding
和VertexBindingDivisor
的组合:
-
VertexAttribDivisor:
void VertexAttribDivisor(uint index, uint divisor);
此命令等效于(假设没有生成错误):
VertexAttribBinding(index, index); VertexBindingDivisor(index, divisor);
总之,这些命令提供了一种控制渲染期间某些属性变化速率的方法,特别是在涉及多个图元实例的场景中。