openGL纹理映射

时间:2011-04-12 13:08:43

标签: c++ opengl textures

嘿  我正在用c ++中的openGL创建一个游戏 当我尝试将纹理映射到对象时,它会改变我绘制的所有其他颜色 例如,一切都是透明的红色或绿色..

glEnable (GL_TEXTURE_2D);
    Bitmap image;
    image.loadBMP ("Texture.bmp");

    glGenTextures(1, &m_TextureID);
    glBindTexture ( GL_TEXTURE_2D, m_TextureID);

    glTexEnvf ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE , GL_MODULATE);
    glTexParameterf ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

    glTexParameterf ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameterf ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    gluBuild2DMipmaps ( GL_TEXTURE_2D, 3, image.width, image.height, GL_RGB,    GL_UNSIGNED_BYTE, image.data);
    glEnd(); 

这是我的纹理代码,这是我如何映射纹理

glBegin(GL_QUADS);
glEnable (GL_TEXTURE_2D);
//glColor3d(1, 0, 0); 
glTexCoord2f (0.0f,0.0f);
glVertex3f(0, 0, 0); // bottom left
glTexCoord2f (1.0f,0.0f);
glVertex3f(10, 0, 0); // bottom right
glTexCoord2f (1.0f,1.0f);
glVertex3f(10, 0.6, 0);// top right
glTexCoord2f (0.0f,1.0f);
glVertex3f(0, 0.6, 0); // top left
glEnd();

等...

我的所有非纹理对象都是这样绘制的

glBegin(GL_QUADS);//BACK
glColor3d(1,0,0);
glVertex3f(10, 0, 0);
glVertex3f(10, 0, -5.6);
glVertex3f(10, 0.6, -5.6);
glVertex3f(10, 0.6, 0);
glEnd();

...等 我错过了一些非常明显的事吗? 感谢

2 个答案:

答案 0 :(得分:4)

如果您不想对其他对象进行纹理处理,则需要为其他对象禁用纹理贴图。

glDisable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
...

答案 1 :(得分:1)

你切换了这两个:

glBegin(GL_QUADS);
glEnable (GL_TEXTURE_2D);

不应在glBegin()和glEnd()

之间调用glEnable

除此之外,使用glGetError并查看哪个确实调用失败。