試圖做的,就像這裏:Pass array to shader 而像這裏:Passing an array of vectors to a uniformWebGL的:通過統一的陣列着色器
但仍沒有運氣。我覺得我做的一樣存在,但它不工作:
這裏是我的JavaScript代碼:
shaderProgram.lightsUniform = gl.getUniformLocation(shaderProgram, "lights"); // Getting location
gl.uniform1f(shaderProgram.lightsUniform, new Float32Array([3,1,2,3,4,5])); // Let's try to send some light (currently each light is one float) as array.
的Vertex Shader代碼:
uniform float lights[6]; // Declaration
...
vLight *= lights[0]; // Let's try to mutliply our light by the first array item. There should be 3.0.
摘要:我送數組使用非零浮點着色器。
結果:全黑!即燈[0]包含0.0但預計3.0。如果我嘗試燈光[1],燈光[2]等,他們都會給出相同的結果!
讓我們現在嘗試只傳遞一個浮點數。我改變
gl.uniform1f(shaderProgram.lightsUniform, new Float32Array([3,1,2,3,4,5]));
到
gl.uniform1f(shaderProgram.lightsUniform, 3); // I want to send just float 3.0
摘要:而不是發送陣列我送靜靜地飄浮3.0。
結果:作品!燈[0]包含3.0(但我發送只是浮動,而不是一個數組)。
我該怎麼做?我如何傳遞給着色器陣列的制服?
感謝這有助於。 – Dmitry
我遇到過類似的問題。但是,當我更改爲uniform1fv時,出現以下控制檯錯誤:未能在'WebGLRenderingContext'上執行'uniform1fv':找不到與提供的簽名匹配的函數。 – InfiniteStack