【发布时间】:2019-01-27 20:24:55
【问题描述】:
我正在尝试设置数组中结构的各个字段的值。问题在于,在着色器中,结构的每个字段都分配了值 0。
着色器:
struct Light
{
vec3 position;
vec3 color;
float ambient;
float diffuse;
float specular;
float exponent;
};
uniform Light lights[8];
C++:
struct Light
{
vec3 position;
vec3 color;
float ambient;
float diffuse;
float specular;
float exponent;
};
...
std::vector<Light> activeLights;
Light l;
l.position = vec3(-50.0f, 50.0f, 50.0f);
l.color = vec3(1.0f, 1.0f, 1.0f);
l.ambient = 0.15f;
l.diffuse = 0.6f;
l.specular = 0.25f;
l.exponent = 8.0f;
activeLights.push_back(l);
...
for (int i = 0; i < activeLights.size(); i++)
{
glUniform3f(glGetUniformLocation(program, "lights[i].position"),
activeLights[i].position.x,
activeLights[i].position.y,
activeLights[i].position.z
);
glUniform3f(glGetUniformLocation(program, "lights[i].color"),
activeLights[i].color.r,
activeLights[i].color.g,
activeLights[i].color.b
);
glUniform1f(glGetUniformLocation(program, "lights[i].ambient"), activeLights[i].ambient);
glUniform1f(glGetUniformLocation(program, "lights[i].diffuse"), activeLights[i].diffuse);
glUniform1f(glGetUniformLocation(program, "lights[i].specular"), activeLights[i].specular);
glUniform1f(glGetUniformLocation(program, "lights[i].exponent"), activeLights[i].exponent);
}
我在调试器中多次检查了 c++ 端的值,那里一切正常。
有什么想法吗?
【问题讨论】:
-
"lights[i].position": 那是一个字符串,其中包含的内容正是写在那里的内容。 i 不会被数字神奇地取代。如果要将 i 替换为相应的数字,则必须使用 std::stringstream 或 snprintf 或类似的东西。