Хорошо, пытаясь отладить еще одну проблему, я решил убедиться, что моя текстура правильно рендерилась в моем фрагментном шейдере.Но это не так.Все, что я получаю, это серый цвет на всем моем цилиндре.Если я закомментирую "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);
}