2016-10-02 62 views
1

考慮以下頂點着色器:翻譯並不適用於所有點

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

也許這只是爲了舉例說明,但如果不是這樣,那麼緩衝區創建和drawArrays調用一起出現的事實至少是可疑的。你正在改變第一個和第二個對象之間的程序嗎? – Marco13

回答

1

當您撥打gl.vertexAttribPointer時,緩衝區將被綁定到頂點屬性。無論緩衝區綁定到gl.ARRAY_BUFFER那時您撥打gl.vertexAttribPointer現在都綁定到該屬性。在上面創建一個新的緩衝區,但由於沒有調用gl.vertexAttribPointer,您的屬性仍然指向您之前附加的任何緩衝區。

是否要替換先前已存在的緩衝區的內容或創建新的緩衝區取決於您。

+0

謝謝。那麼,如果我想對另一個對象執行不同的轉換呢? – foobar5512

+0

對您有幫助嗎? http://stackoverflow.com/a/20850791/128511 – gman

相關問題