代码之家  ›  专栏  ›  技术社区  ›  jakeva

GLSL碎片着色器纹理圆柱体,只是得到灰色?

  •  1
  • jakeva  · 技术社区  · 14 年前

    好吧,尝试调试我遇到的另一个问题,我决定确保我的纹理在片段着色器中正确渲染。但是,不是的。我得到的只是整个圆柱体的灰色。如果我注释掉“setShaders()”,则纹理将正确应用于固定函数管道。

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

    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 回复  |  直到 5 年前
        1
  •  1
  •   jakeva    14 年前

    gl_TexCoord[0] = gl_MultiTexCoord0;
    

    在要修复的顶点着色器中。