我正在尝试在OpenGL中了解纹理映射,但我无法使一个简单的示例正常工作。
虽然多边形被绘制出来了,但它只是一个纯色而没有纹理。同时,位图正确地加载到sprite1[]中,因为我一直成功使用glDrawPixels到现在为止。
我使用glGenTextures来获取我的纹理名称,但我注意到它不会改变texName1;即使在调用glGenTextures之后,这个GLuint仍然是我初始化它时的值...
我已启用GL_TEXTURE_2D。
以下是代码:
GLuint texName1 = 0;
glGenTextures(1, &texName1);
glBindTexture(GL_TEXTURE_2D, texName1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, sprite1[18], sprite1[22], 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, &sprite1[54]);
glColor3f(1, 1, 0);
glBindTexture(GL_TEXTURE_2D, texName1);
glBegin(GL_QUADS);
glTexCoord2f (0.0, 0.0);
glVertex3f (0.0, 0.0, -5.0f);
glTexCoord2f (1.0, 0.0);
glVertex3f (.5, 0.0, -5.0f);
glTexCoord2f (1.0, 1.0);
glVertex3f (.5, .5, -5.0f);
glTexCoord2f (0.0, 1.0);
glVertex3f (0.0, .5, -5.0f);
glEnd();
更新: 我很困惑。这是我尝试过的所有方法:
结果发现在OGL初始化之前就初始化了纹理。纹理是在类构造函数中初始化(glGenTextures->glTexImage2D),并且在每帧调用的成员函数中绘制(glBegin->glEnd)。genTextures现在似乎正常工作,我得到了名称为1的纹理。
尝试了所有可能的GL_RGBA8、GL_BGRA_EXT(GL_BGRA在我的系统上不起作用;我需要使用_EXT)、甚至从位图中删除了alpha通道,并尝试了所有GL_RGB、GL_BGR_EXT等等的组合。没有成功。
尝试了程序创建位图并使用它
确保GL_COLOR_MATERIAL未启用。
将位图大小更改为32x32。
尝试使用glTexEnvi而不是glTexEnvf。