【问题标题】:Texture coordinates on different size of rectangles不同大小矩形上的纹理坐标
【发布时间】:2013-04-21 14:17:46
【问题描述】:

我映射的纹理坐标如下:

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_H和texCoord_V分隔纹理坐标,绘制的图像仍然是反转的?

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

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

【问题讨论】:

    标签: c++ opengl textures


    【解决方案1】:

    试试:

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

    【讨论】:

    • 我用GL_TRIANGLE_STRIP而不是GL_QUADS画了一个四边形
    • 好的,我只注意到texcoords和positions不匹配,在这种情况下交换最后两个s coords。
    • 什么s coords?我认为这不是问题所在。 texcoordsvertices 使用相同的顶点绘图(即像'Z')
    • 不,他们不是,位置是'Z',texcoords不是。
    • 嗯,是的。我弄错了。但是即使我交换了最后两个甚至制作新的映射,仍然没有运气。
    【解决方案2】:

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

    这可能是你的问题。

    【讨论】:

      【解决方案3】:

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

      glTexCoordPointer(2, GL_FLOAT, 2, texCoord);
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-26
        • 2012-02-21
        • 1970-01-01
        相关资源
        最近更新 更多