c++ - OpenGL 的纹理坐标

标签 c++ opengl

我有一个作为纹理加载的 Tilesheet,我正在尝试从该纹理渲染单个图 block

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 上呈现的图 block 0.0625 是我的 Tilesheet 的宽度和高度/每行有多少 block (512/16)

所以在 tilesheet 中它是 16 个 tiles 宽,所以如果 Tile 是 16,它将是左边的 tile 和 tilesheet 顶部的一个 tile。但这就是我得到的enter image description here

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

谢谢。

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

最佳答案

在调用 glVertex3f 之前,您调用了两次 glTexCoord2f。这看起来不对。

看起来像这样一行:

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

应该是:

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

关于c++ - OpenGL 的纹理坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10290413/

相关文章:

c++ - 将 Freetype 字形渲染到 OpenGL (3.3+) 纹理会导致重复纹理和伪影

c++ - 将虚拟成员方法传递给 thread()

c++ - 使用 clang 内置函数与标准函数的好处

c++ - 如何对存储为 "Compressed Sparse Row"的矩阵进行稀疏矩阵索引?

java - 调整 JComponent 中的重绘以提高性能

c++ - OpenGL 矩阵相机控件,局部旋转功能不正常

c# - 如何在托管代码中正确翻译 WH_MOUSE lparam

c++ - Lambda 构造性能和静态 lambda?

opengl - 为什么我的 GLSL 着色器会呈现乳沟?

java - 在LWJGL 3中渲染透视投影矩阵