Three.js如何在着色器中使用您的结构?

时间:2017-05-23 09:15:51

标签: three.js shader

我正在写一个着色器,我需要以某种方式将参数传递给它。 在代码中我找到了一些结构,但我不明白它是如何工作的。

struct Light {
    vec4 position;
    vec4 ambient;
    vec4 diffuse;
    vec4 specular;
    vec3 spotDirection;
    float spotCutOff;
    float constantAttenuation;
    float linearAttenuation;
    float quadraticAttenuation;
    float spotExponent;
    float spotLightCosCutOff;
};
uniform Light lights[numLights];

如何在着色器中设置我的结构?

1 个答案:

答案 0 :(得分:2)

Light数组的每个项目的每个字段都是一个单独的制服:

gl.uniform4f(gl.getUniformLocation(program, 'lights[0].position'), 1, 1, 1, 1);
gl.uniform1f(gl.getUniformLocation(program, 'lights[3].spotCutOff'), 3);

@TheJim01指出你的问题是具体的Three.js(谢谢:)。原则相同:

yourShaderMaterial.uniforms['lights[0].spotCutOff'].value = 3;