我正在尝试使用OpenGL可编程管道对球体进行纹理处理,并且不知道这里出了什么问题。
初始化:
earth = createSphere(1, 64, 32);
glEnable(GL_TEXTURE_2D);
earthTex = createTexture("textures/earth.jpg");
createTexture:
GLuint createTexture(const char* fileName)
{
GLuint texID;
int width, height, imgFormat, internalFormat;
float* imgData = getImage(fileName, &height, &width, &imgFormat);
switch (imgFormat)
{
case GL_RED: internalFormat = GL_R8; break;
case GL_RG: internalFormat = GL_RG8; break;
case GL_RGB: internalFormat = GL_RGB8; break;
case GL_RGBA: internalFormat = GL_RGBA8; break;
default: fprintf(stderr, "\n Cannot get ImgType \n"); break;
}
glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_2D, texID);
glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height, 0, imgFormat, GL_FLOAT, (void*) imgData);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);
return texID;
}
RenderLoop:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, earthTex);
glUniform1i(glGetUniformLocation(programID, "colorTex"), 0);
earth->draw();
glBindTexture(GL_TEXTURE_2D, 0);
在vertexShader中我将texCoords传递给FragmentShader,在那里我只调用fs_out_color = texture(colorTex, fs_in_texCoords);
之类的东西
其中colorTex是均匀采样器2D。
一旦我发表评论,一切正常(显然除了顶点着色)。
有人知道吗?
谢谢!
编辑: 多数民众赞成我的FragmentShader。如你所见,没有什么特别的。
#version 150 core
uniform sampler2D colorTex;
in vec3 fs_in_color;
in vec2 fs_in_texCoods;
out vec4 fs_out_color;
void main(void) {
fs_out_color = texture(colorTex, fs_in_texCoords);
}
Edit2:如果我将fs_out_color更改为fs_in_color(目前正常),一切正常。否则,在调用drawElements后,OpenGL会声明INVALID_OPERATION。