试图做的,就像这里: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