纹理坐标在不同大小的矩形上

时间:2013-04-27 13:43:46

标签: c++ opengl textures

我映射了纹理坐标,如:

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_HtexCoord_V,绘制的图像仍会反转?

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

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

3 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

大多数OpenGL新手都被这样的事实搞糊涂了:通过常规投影集,变换和视口映射参数,OpenGL认为图像原点位于左下方,坐标向右和向上递增。这与大多数计算机图形系统形成对比,后者假设原点位于左上方,垂直方向尺寸向下增加。

可能这是你的问题。

答案 2 :(得分:0)

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

glTexCoordPointer(2, GL_FLOAT, 2, texCoord);

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