好的,尝试调试我遇到的另一个问题,我决定确保我的纹理在我的片段着色器中正确呈现。但是,事实并非如此。我得到的只是整个圆筒上的灰色。如果我注释掉“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);
}
答案 0 :(得分:1)
把
gl_TexCoord[0] = gl_MultiTexCoord0;
在顶点着色器中修复。
男人我有很多东西要学习glsl ....