【发布时间】:2015-08-05 15:53:50
【问题描述】:
我想在我的着色器中应用多个灯光。为此,我选择将灯光数据放在多个数组中,而不是一个灯光 = 一个结构,以避免大量时间执行“setUniforms”。
我有类似的东西:
// Light's data.
struct LightData
{
vec3 ambient[4];
vec3 diffuse[4];
vec3 position[4];
vec3 specular[4];
};
uniform LightData lights;
vec3 applyLight( int index, vec3 cameraPos )
{
vec3 position = lights.position[index]; //<<< Error here.
…
return result;
}
int main()
{
vec3 color;
for( int i = 0; i < 4; i++)
color += applyLight(i, camera.position);
}
问题出在 GLSL 代码中:“索引表达式必须是常量 []”。我该怎么做才能使此代码正常工作?我可以为函数提供位置、漫反射、环境、镜面反射,但它会变脏。
表演呢?最好有类似我所做的或喜欢下面的代码的东西?
struct Light
{
vec3 ambient;
vec3 diffuse;
vec3 position;
vec3 specular;
};
uniform Light lights[4];
祝你有美好的一天!
【问题讨论】:
标签: glsl webgl opengl-es-2.0 shader