我想在着色器中应用多个灯光。为此,我选择将灯数据放在多个数组而不是一个灯=一个结构中以避免做#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];
度过美好的一天!
答案 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);
下面的选项(统一布局)可能更好,它可能有更好的位置。