Mik*_*yne 3 javascript glsl webgl
我一直在尝试制作一个包含我的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];
Run Code Online (Sandbox Code Playgroud)
在测试了大量的东西之后我才开始工作,但是我对我写的代码不满意:
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
Run Code Online (Sandbox Code Playgroud)
我很抱歉让你看看这段代码,我知道这很糟糕,但我找不到更好的方法.
是否有正确的标准或推荐方法?任何人都可以开导我吗?
你说得对.你可以试着把它收紧一点
lightLocations = [
"position",
"diffuse",
"specular",
"ambient",
"spotDirection",
"spotCutOff",
"constantAttenuation",
"linearAttenuation",
"quadraticAttenuation",
"spotExponent",
"spotLightCosCutOff",
];
var program = {
uniform: {
lights: [];
}
};
for (var ll = 0; ll < numLights; ++ll) {
var locations = { };
for (var jj = 0; jj < lightLocations.length; ++jj) {
var name = lightLocaitons[jj];
locations = gl.getUniformLocation(program, "lights[" + ll + "]." + name);
}
program.uniform.lights[ll] = locations;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2866 次 |
| 最近记录: |