【发布时间】:2011-11-26 18:51:40
【问题描述】:
我一直在尝试创建一个包含我的 WebGL 应用程序的所有灯光的结构,但我在从 JS 设置它的值时遇到了麻烦。结构如下:
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];
在测试了很多东西后,我让它工作了,但我对我写的代码不满意:
program.uniform.lights = [];
program.uniform.lights.push({
position: "",
diffuse: "",
specular: "",
ambient: "",
spotDirection: "",
spotCutOff: "",
constantAttenuation: "",
linearAttenuation: "",
quadraticAttenuation: "",
spotExponent: "",
spotLightCosCutOff: ""
});
program.uniform.lights[0].position = gl.getUniformLocation(program, "lights[0].position");
program.uniform.lights[0].diffuse = gl.getUniformLocation(program, "lights[0].diffuse");
program.uniform.lights[0].specular = gl.getUniformLocation(program, "lights[0].specular");
program.uniform.lights[0].ambient = gl.getUniformLocation(program, "lights[0].ambient");
... and so on
很抱歉让您查看此代码,我知道这很糟糕,但我找不到更好的方法。
是否有正确执行此操作的标准或推荐方法?任何人都可以启发我吗?
【问题讨论】:
标签: javascript glsl webgl