2010-11-05 6 views
1

Ok, essayant de déboguer un autre problème que j'ai, j'ai décidé de m'assurer que ma texture était correctement rendue dans mon fragment de shader. Mais ce n'est pas le cas. Tout ce que je reçois est une couleur grise sur tout mon cylindre. Si je commente "setShaders()" la texture est appliquée correctement dans le pipeline de fonction fixe. Tout ce que je fais dans mon fragment shader est d'assigner la valeur de la texture à la couleur du fragment. Cela devrait fonctionner, n'est-ce pas? Je jure que j'ai toutes les pièces en place. grrGLSL Fragment Shader texturant un cylindre, devenant gris?

Voici le code avant que je tire mon cylindre:

vertexShader = "fish.vert"; 
fragmentShader = "fish.frag"; 

glBindTexture(GL_TEXTURE_2D, checkerTexture); 
glEnable(GL_TEXTURE_2D); 
glEnable(GL_TEXTURE_GEN_S); 
glEnable(GL_TEXTURE_GEN_T); 
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 

setShaders(); 

GLint loc1; 
loc1 = glGetUniformLocation(shaderProgram,"fish_y_offset"); 
glUniform1i(loc1,0);  

glLightfv(GL_LIGHT0, GL_DIFFUSE, white); 
glLightfv(GL_LIGHT0, GL_AMBIENT, white); 
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 
glLightfv(GL_LIGHT0, GL_SPECULAR, white); 
glMaterialfv(GL_FRONT, GL_SHININESS, highShine); 

drawCylinder(); 

Et voici mon shader fragment de poisson:

uniform float spec_factor; 
uniform sampler2D fish_y_offset; 

varying vec3 lightDir,normal; 
varying vec4 mycolor; 
void main() 
{ 
    float angle, shiny; 
    angle = max(0.0, dot(normal, lightDir)); 


    shiny = pow(angle, gl_FrontMaterial.shininess); 

    gl_FragColor = texture2D(fish_y_offset, gl_TexCoord[0].st); 


    //gl_Color;//(gl_LightSource[0].ambient * gl_FrontMaterial.ambient + 
        //gl_LightSource[0].diffuse * gl_FrontMaterial.diffuse * angle + 
        //gl_LightSource[0].specular * gl_FrontMaterial.specular * shiny * spec_factor); 

} 

Répondre

1

mis

gl_TexCoord[0] = gl_MultiTexCoord0; 

dans le vertex shader pour fixer .

homme j'ai beaucoup à apprendre sur glsl ....

+0

Est-ce que cela a résolu le problème? – LarsH

+0

ouais. Je ne pense pas comprendre pourquoi, mais ça l'a fait. – jakev

+1

gl_MultiTexCoordN est un attribut de vertex shader intégré, c'est-à-dire l'entrée du vertex shader avec les coordonnées de texture. En revanche, gl_TexCoord [] est une variable variable intégrée qui est utilisée pour transporter des données du vertex shader vers le fragment shader, la valeur de gl_TexCoord [], comme vous l'avez découvert, doit être définie manuellement. (De GLSL 1.3 et forward ces deux built-ins sont obsolètes.) – Daniel

Questions connexes