【问题标题】:Texture Coordinates for OpenGLOpenGL 的纹理坐标
【发布时间】:2012-04-24 09:05:41
【问题描述】:

我有一个作为纹理加载的 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,它将是左侧的瓦片和距瓦片顶部的 1 个瓦片。但这就是我得到的

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

谢谢。

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

【问题讨论】:

  • 具体问题不清楚。是结果左上角的那个小边框吗?
  • 不,那是糟糕的截图编辑。它是草瓦和砖瓦的融合

标签: c++ opengl


【解决方案1】:

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

看起来像这样一行:

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

应该是:

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

【讨论】:

  • 我不敢相信!现在我觉得问这个问题很愚蠢:(在过去的 20 分钟里我一直在修补这个......
  • 我们都会时不时打错字!尤其是在到处试验/修补/复制粘贴东西的时候。有时只需要第二双眼睛。
  • @Elgoog 我想知道,为什么你发现它是正确的解决方案,但对它进行投票却没有那么好/有帮助?
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 2015-04-23
  • 2015-02-03
  • 2012-03-06
  • 2012-04-08
  • 1970-01-01
  • 2012-05-16
  • 2020-08-17
相关资源
最近更新 更多