【发布时间】:2013-07-26 02:21:54
【问题描述】:
试着像这里一样做: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.
总结:我将一个数组发送到非零浮点数的着色器。
结果:全黑! IE。灯[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。
结果:有效! light[0] 包含 3.0(但我发送的只是浮点数,而不是数组)。
我做错了什么?如何传递给制服的着色器数组?
【问题讨论】:
标签: arrays glsl webgl shader uniform