¿Cómo puedo pasar múltiples texturas a un solo sombreador?
Estoy usando freeglut, GLEWy DevIL arenderizar una tetera con textura usando un sombreador de vértices y fragmentos. Todo esto funciona bien en OpenGL 2.0 y GLSL 1.2 en Ubuntu 14.04.
Ahora, quiero aplicar un mapa de relieve a la tetera. Mi profesor evidentemente no prepara su propio té, por lo que no sabe que se supone que sonsuave. De todos modos, encontréun tutorial atractivo sobre el mapeo de golpes de la vieja escuela eso incluye un sombreador de fragmentos que comienza:
uniform sampler2D DecalTex; //The texture
uniform sampler2D BumpTex; //The bump-map
Lo que no mencionan escómo para pasar dos texturas al sombreador en primer lugar.
Anteriormente yo
//OpenGL cpp file
glBindTexture(GL_TEXTURE_2D, textureHandle);
//Vertex shader
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
//Fragment shader
gl_FragColor = color * texture2D(DecalTex,gl_TexCoord[0].xy);
así que ahora yo
//OpenGL cpp file
glBindTexture(GL_TEXTURE_2D, textureHandle);
glBindTexture(GL_TEXTURE_2D, bumpHandle);
//Vertex shader
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord1;
//Fragment shader
gl_FragColor = color * texture2D(BumpTex,gl_TexCoord[0].xy);
//no bump logic yet, just testing I can use texture 1 instead of texture 0
Pero esto no funciona. La textura desaparece por completo (efectivamente la tetera es blanca). He probado GL_TEXTURE_2D_ARRAY, glActiveTexture y algunas otras opciones que parecen ser infructuosas.
Después de examinar la habitual mezcla de referencias a OpenGL y GLSL nuevas y antiguas, he llegado a la conclusión de que probablemente necesitoglGetUniformLocation
. ¿Cómo uso exactamente esto?en el archivo OpenGL cpp pasar los controles de textura ya poblados al sombreador de fragmentos?
(Esta es la tarea, así que responda con fragmentos de código mínimos (si es que lo hace). ¡Gracias!)
De lo contrario, ¿alguien tiene una malla acogedora para el té?