繁体   English   中英

OpenGL纹理三角形

[英]OpenGL texturing Triangles

我有一个充满三角形的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

截图

编辑

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

三角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)

对于后代,完整的代码在这里

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM