index表达式必​​须是使用数组的常量

时间:2015-08-05 15:53:51

标签: glsl webgl opengl-es-2.0 shader

我想在着色器中应用多个灯光。为此,我选择将灯数据放在多个数组而不是一个灯=一个结构中以避免做#set; 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代码:&#34;索引表达式必须是常量[]&#34;。如何使此代码工作?我可以给函数提供位置,漫反射,环境,镜面反射,但它会变脏。

表演怎么样?最好是拥有像我所做的那样的东西,或者喜欢下面的代码?

struct Light 
{
   vec3 ambient;
   vec3 diffuse;
   vec3 position;
   vec3 specular;
};
uniform Light lights[4];

度过美好的一天!

1 个答案:

答案 0 :(得分:1)

展开你的循环:

  Sub tester()

    Dim SolverPath As String
    SolverPath = Application.LibraryPath & "\SOLVER\SOLVER.XLA"

    Dim wb As Workbook
    Set wb = ThisWorkbook

    Dim project As VBAProject
    project = wb.VBProject

    wb.project.References.AddFromFile SolverPath

End Sub

(不确定这个确切的代码是否有效,但你明白了)

color += applyLight(0, camera.position);
color += applyLight(1, camera.position);
color += applyLight(2, camera.position);
color += applyLight(3, camera.position);

下面的选项(统一布局)可能更好,它可能有更好的位置。