OpenGL纹理三角形

时间:2011-04-25 19:14:03

标签: c++ opengl

我有一个充满三角形的varray,形成一个大方块。我正在尝试对这个大方块进行纹理处理,所有我得到的(似乎)是一个像素列,然后在原始图像上拉伸。

我用UV坐标(0,1),(0,0),(1,0)和(0,1),(1,1),(1,0)取决于每个直角三角形的纹理在三角形的哪个方向上。

渲染代码。

    glBindTexture(GL_TEXTURE_2D, m_texture.id());

    //glEnableClientState(GL_INDEX_ARRAY);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_NORMAL_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    //glIndexPointer(GL_INT, 0, &m_indices[0]);
    glVertexPointer(3, GL_FLOAT, sizeof(VertexData), &m_vertexData[0].x);
    glNormalPointer(GL_FLOAT, sizeof(VertexData), &m_vertexData[0].nx);
    glTexCoordPointer(2, GL_FLOAT, sizeof(UVData), &m_uvData[0].u);

    glDrawElements(GL_TRIANGLES, m_indices.size(), GL_UNSIGNED_INT, &m_indices[0]);
    glBindTexture(GL_TEXTURE_2D, 0);

纹理包裹模式为GL_CLAMP_TO_EDGE

Screenshot

修改

输出前两个三角形我得到值......

三角1:

指数(0,1,31)

Vertex0(-15,0,-15),Vertex1(-15,0,-14),Vertex31(-14,0,-14)

UV(0,1),(0,0),(1,0)

三角2:

指数(0,30,31)

Vertex0(-15,0,-15),Vertex30(-14,0,-15)Vertex31(-14,0,-14)

UV(0,1),(1,1),(1,0)

对于后代,完整代码为here

两个三角形组成一个正方形,从左上角到右下角切割对角线。

2 个答案:

答案 0 :(得分:4)

不要使用glIndexPointer,不是你认为的那样,用于颜色索引模式,做索引网格只需使用glDrawElements。

答案 1 :(得分:0)

看起来您正在将UV数据与索引相关联,而不是与顶点相关联。 UV数据是顶点数据的一部分,因此您应该将其打包在VertexData对象中,而不是将其分开。您可以将它保持独立,但每个顶点需要一个,而不是每个索引一个。