我正在写一个着色器,我需要以某种方式将参数传递给它。 在代码中我找到了一些结构,但我不明白它是如何工作的。
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];
如何在着色器中设置我的结构?
答案 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;