10

本 OpenGL ES 2.0 Programming Guide の照明の例を試してみたいと思います。シェーダーでは、2 つの構造を作成しました。

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;
};

彼らはまた、これらの構造に基づいて 2 つのユニフォームを作成しました。

uniform  material_properties u_material_properties;   
uniform directional_light u_directional_light;

問題は、独自の構造を実際のシェーダーに渡す方法がわからないことです。

メイン コードで同じ構造を作成し、オブジェクトをシェーダーに渡したいと考えています。これはどのように可能ですか?

よろしくニクラス

4

1 に答える 1

11

できません。OpenGL ES にはその機能がありません。アップロードするには、ネストされた変数のそれぞれの場所を取得し、それぞれで glUniform* を呼び出す必要があります。

例えば:

GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);
于 2010-11-07T22:12:05.950 に答える