GLSL Fragment Shader纹理化一个圆柱体,只是变灰了?

时间:2010-11-05 05:26:39

标签: opengl glsl shader fragment

好的,尝试调试我遇到的另一个问题,我决定确保我的纹理在我的片段着色器中正确呈现。但是,事实并非如此。我得到的只是整个圆筒上的灰色。如果我注释掉“setShaders()”,纹理将在固定功能管道中正确应用。

我在片段着色器中所做的就是将纹理值分配给片段颜色。它应该工作,对吗?我发誓我已经准备好了所有的东西。 GRR

这是我画圆柱之前的代码:

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();

这是我的鱼片片着色器:

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

}

1 个答案:

答案 0 :(得分:1)

gl_TexCoord[0] = gl_MultiTexCoord0;

在顶点着色器中修复。

男人我有很多东西要学习glsl ....