OpenGL的纹理坐标

时间:2012-04-24 00:59:56

标签: c++ opengl

我有一个Tilesheet作为纹理加载,我试图从纹理

渲染一个图块
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glBindTexture(GL_TEXTURE_2D, TileSheet);
float TY = (Tile / 16) * 0.0625;
float TX = (Tile % 16) * 0.0625;

glBegin(GL_QUADS);
    glTexCoord2f(TX, TY); glTexCoord2f(0, 0); glVertex3f(X, Y, 0);
    glTexCoord2f(TX + 0.0625, TY); glVertex3f(X + TILE_SIZE, Y, 0);
    glTexCoord2f(TX + 0.0625, TY + 0.0625); glVertex3f(X + TILE_SIZE, Y + TILE_SIZE, 0);
    glTexCoord2f(TX, TY + 0.0625); glVertex3f(X, Y + TILE_SIZE, 0);
glEnd();

Tileint,表示要在tileheet上呈现的图块 0.0625是我的Tilesheet的宽度和高度/每行有多少个图块(512 / 16)

因此在瓷砖表中它是16个瓷砖宽,所以如果Tile是16,那么它将是左边的瓷砖和瓷砖表顶部的一个瓷砖。但这就是我得到的enter image description here

所以左上角是[0][0],右下角是[1][0]所以我看不出我做错了什么。任何帮助将不胜感激。

感谢。

我还应该提一下,如果Tile == 0呈现正确的图块,但只要Tile > 0图块最终如上所述。

1 个答案:

答案 0 :(得分:1)

在致电glTexCoord2f之前,您致电glVertex3f两次。这看起来不对。

看起来像这一行:

glTexCoord2f(TX, TY); glTexCoord2f(0, 0); glVertex3f(X, Y, 0);

应该是:

glTexCoord2f(TX, TY); glVertex3f(X, Y, 0);