我有一个充满三角形的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)
对于后代,完整代码为here
两个三角形组成一个正方形,从左上角到右下角切割对角线。
答案 0 :(得分:4)
不要使用glIndexPointer,不是你认为的那样,用于颜色索引模式,做索引网格只需使用glDrawElements。
答案 1 :(得分:0)
看起来您正在将UV数据与索引相关联,而不是与顶点相关联。 UV数据是顶点数据的一部分,因此您应该将其打包在VertexData对象中,而不是将其分开。您可以将它保持独立,但每个顶点需要一个,而不是每个索引一个。