Pregunta

Quiero probar un ejemplo de iluminación del libro de OpenGL ES 2.0 Guía de Programación. En el shader que han realizado dos estructuras.

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

También han hecho dos uniformes, sobre la base de estas estructuras.

uniform  material_properties u_material_properties;   
uniform directional_light u_directional_light;

El problema es que no sé cómo pasar estructuras propias en el shader real.

Quiero crear las mismas estructuras en mi código principal y pasar los objetos en el sombreado. ¿Cómo es esto posible?

Saludos Niclas

¿Fue útil?

Solución

No se puede, OpenGL ES no tienen esa funcionalidad, para cargar usted tiene que conseguir la ubicación de cada una de las variables anidadas y glUniform llamada * en cada uno de ellos.

Por ejemplo:

GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top