3
我一直在試圖製作一個結構,它將包含我的WebGL應用程序的所有燈光,並且有麻煩設置它是來自JS的值。結構如下:將結構數組的值設置爲從JS到GLSL
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
我讓你們看看對不起這段代碼,我知道這很可怕,但我找不到更好的方法。
有沒有一個標準或推薦的方法來正確地做到這一點?任何人都可以啓發我嗎?
現在我使用「eval」函數來實現它,但我會嘗試兩個實現,並檢查出最快的一個。我必須說你的看起來非常乾淨!謝謝! –