1

我将 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();

Tile是一个int并且表示要在 tilesheet 上呈现的 tile 0.0625是我的 Tilesheet 的宽度和高度 / 每行有多少个瓦片(512 / 16)

所以在 tilesheet 中它是 16 块宽,所以如果Tile是 16 块,它将是左边的块和从块表顶部开始的块。但这就是我得到的在此处输入图像描述

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

谢谢。

我还应该提到,如果Tile == 0它呈现正确的瓷砖,但只要Tile > 0瓷砖像上面那样结束。

4

1 回答 1

1

在你打电话glTexCoord2f之前你打了两次电话glVertex3f。那看起来不对。

它看起来像这一行:

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

应该:

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

于 2012-04-24T01:05:35.410 回答