Я пытался создать структуру, которая будет содержать все источники света моего приложения 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
Извините, что заставил вас взглянуть на этот код, я знаю, что это ужасно, но я не могу найти лучшего способа.
Существует ли стандартный или рекомендуемый способ сделать это правильно? Кто-нибудь может просветить меня?