尝试按照这里:Pass array to shader 和这里:Passing an array of vectors to a uniform的方法来操作。
但是还是没有成功。我认为我按照那里的方法做了,但不起作用:
这是我的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.
顶点着色器代码:
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.
摘要:我向着着色器发送一个具有非零浮点数的数组。
结果:完全是黑的!也就是说,lights [0] 包含 0.0,但期望为 3.0。如果我尝试 lights [1]、lights [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。
结果:有效!lights[0] 包含 3.0(但我只发送了一个浮点数,而不是一个数组)。
我做错了什么?我如何将一组 uniform 传递给着色器?