翻译不适用于所有积分

时间:2016-10-02 02:12:26

标签: glsl webgl

考虑以下顶点着色器:

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是点乘以矩阵。这就是我想要发生的事情,但我只是好奇为什么会这样呢?

1 个答案:

答案 0 :(得分:1)

当您调用gl.vertexAttribPointer时,缓冲区会绑定到顶点属性。在您调用gl.ARRAY_BUFFER时绑定到gl.vertexAttribPointer的缓冲区现在绑定到该属性。您正在创建一个新的缓冲区,但由于没有调用gl.vertexAttribPointer,您的属性仍然指向您之前附加的缓冲区。

是否要替换先前现有缓冲区的内容或创建新缓冲区取决于您。