问题描述
在TWGL中,为什么必须先将缓冲区信息传递给setBuffersAndAttributes,然后再将其传递给drawBufferInfo?我是WebGL的新手,只是尝试了解管道,为什么要进行这两个单独的调用,在这种情况下,我将首先设置缓冲区信息,然后在绘制之前进行其他操作,或者根本不绘制它,或者绘制另一个缓冲信息?
解决方法
为什么要用这两个单独的调用,在这种情况下,我会先设置缓冲区信息,然后再做其他操作,然后再绘制或根本不绘制它或绘制不同的缓冲区信息?
最常见的原因是要绘制许多相同的东西。
twgl.setBuffersAndAttributes(gl,someProgramInfo,someBufferInfo);
// uniforms shared by all instances like projection or view
twgl.setUniforms(...);
for each instance
// uniforms unique this instance like material,texture or world matrix
twgl.setUniforms(...);
twgl.drawBufferInfo(...);
twgl.drawBufferInfo唯一要做的就是调用gl.drawArrays
或gl.drawElements
,而要做的唯一信息就是
- 绘制数量以及要处理的顶点数量
- 是否对数据建立索引(换句话说,应该调用gl.drawArrays还是gl.drawElements
- 如果是索引,则
UNSIGNED_BYTE
,UNSIGNED_SHORT
或UNSIGNED_INT
是什么类型的索引
这是唯一的目的,因此,如果您将数据从非索引更改为索引,则不必将代码从gl.drawArrays
更改为gl.drawElements
或反之亦然