考虑以下顶点着色器:
attribute vec4 a_Position;
uniform mat4 u_ModelMatrix;
void main() {
gl_Position = u_ModelMatrix * a_Position;
gl_PointSize = 3.0;
}
在我的Javascript程序中,我操纵u_ModelMatrix
进行旋转和翻译。这适用于我绘制的三角形。但是我注意到如果我用自己的顶点缓冲区对象绘制第二个对象:
var vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, point, gl.STATIC_DRAW);
gl.uniform4f(u_FragColor, 1,1,0,1);
gl.drawArrays(gl.POINTS, 0, 1);
然后翻译和轮换不适用于此对象。我认为,因为GLSL程序中的gl_Position
是点乘以矩阵。这就是我想要发生的事情,但我只是好奇为什么会这样呢?
答案 0 :(得分:1)
当您调用gl.vertexAttribPointer
时,缓冲区会绑定到顶点属性。在您调用gl.ARRAY_BUFFER
时绑定到gl.vertexAttribPointer
的缓冲区现在绑定到该属性。您正在创建一个新的缓冲区,但由于没有调用gl.vertexAttribPointer
,您的属性仍然指向您之前附加的缓冲区。
是否要替换先前现有缓冲区的内容或创建新缓冲区取决于您。