0

我映射纹理坐标,如:

static float texCoord[] = {
0, 1,
1, 1,
1, 0,
0, 0
};

通过绘制它:

void Rectangle::Draw()
{
const float vertices[] = {
    x, y,
    x + width, y,
    x, y - height,
    x + width, y - height
};

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glColor3ub(255, 255, 255);

glVertexPointer(2, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 2, texCoord);

if      (IsTypeHorizontal()) glBindTexture(GL_TEXTURE_2D, texture_H);
else /* (IsTypeVertical())*/ glBindTexture(GL_TEXTURE_2D, texture_V);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

}

垂直(高度>宽度)绘制的纹理很好,但在水平(高度<宽度)中,纹理似乎是倒置的。即使我用texCoord_Hand分隔纹理坐标texCoord_V,绘制的图像仍然是反转的?

我还需要知道什么?我的代码中有什么问题?

PS。我使用 SOIL 在 OpenGL 中上传纹理

4

3 回答 3

0

尝试:

static float texCoord[] = {
0, 1,
1, 1,
0, 0,
1, 0
};
于 2013-04-27T13:55:17.337 回答
0

大多数 OpenGL 新手对以下事实感到困惑,即使用通常的一组投影、变换和视口映射参数,OpenGL 认为图像原点位于左下方,而坐标向右上方增加。这与假设原点位于左上角且垂直维度向下增加的大多数计算机图形系统形成对比。

可能那是你的问题。

于 2013-04-27T15:04:45.603 回答
0

在多次更改和交换纹理坐标之后,我意识到我浪费了我的时间。真正的问题在这里

glTexCoordPointer(2, GL_FLOAT, 2, texCoord);

第三个参数(w/c 是stride)'导致错误,它应该是 0。

于 2013-04-30T08:56:22.027 回答