我想尝试《 OpenGL ES 2.0编程指南》一书中的照明示例。在着色器中,它们已制成两个结构。

struct directional_light
{

    vec3 direction; // normalized light direction in eye space
    vec3 halfplane; // normalized half-plane vector

    vec4 ambient_color;
    vec4 diffuse_color;
    vec4 specular_color;
};

struct material_properties
{
    vec4 ambient_color;
    vec4 diffuse_color;
    vec4 specular_color;
    float specular_exponent;
};

他们还根据这些结构制作了两套制服。
uniform  material_properties u_material_properties;
uniform directional_light u_directional_light;

问题是,我不知道如何将自己的结构传递到实际的着色器中。

我想在主代码中创建相同的结构,然后将对象传递到着色器中。这怎么可能?

问候
尼克拉斯

最佳答案

您不能,OpenGL ES没有该功能,要上传您必须获取每个嵌套变量的位置并在每个变量上调用glUniform *。

例如:

GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);

10-08 19:26