Opengl es 带纹理的三角形条带-第一行之外的行提供混乱的输出

Opengl es 带纹理的三角形条带-第一行之外的行提供混乱的输出,opengl-es,textures,gl-triangle-strip,Opengl Es,Textures,Gl Triangle Strip,我正在使用OpenGL ES、GLDrawArray和GL_TRIANGLE_STRIP绘制一些“简单”的2D图形 我正在编写一个函数,其目的是获取一个13x13点(或其他任意大小)纹理,并以指定数量的列和行输出它。因此,对于2行3列,这意味着一个区域覆盖了6块瓷砖,超过26x39点。第一行与下面的代码配合得很好,但只要我指定两行或更多行,就会出现乱码输出 for (int row = 0; row < heightInTiles; row++) { for (int col =

我正在使用OpenGL ES、GLDrawArray和GL_TRIANGLE_STRIP绘制一些“简单”的2D图形

我正在编写一个函数,其目的是获取一个13x13点(或其他任意大小)纹理,并以指定数量的列和行输出它。因此,对于2行3列,这意味着一个区域覆盖了6块瓷砖,超过26x39点。第一行与下面的代码配合得很好,但只要我指定两行或更多行,就会出现乱码输出

for (int row = 0; row < heightInTiles; row++) {
    for (int col = 0; col < widthInTiles; col++) {
        vertexIndexOffset += 8;
        startX = (GLshort)(col * TEXTUREWIDTH);
        startY = (GLshort)(row * TEXTUREHEIGHT);

        // Vertices
        vertices[vertexIndexOffset] = startX; // 1
        vertices[vertexIndexOffset + 1] = startY; //0.0;

        vertices[vertexIndexOffset + 2] = startX; // 2
        vertices[vertexIndexOffset + 3] = startY + (GLshort)TEXTUREHEIGHT;

        vertices[vertexIndexOffset + 4] = (GLshort)(startX + TEXTUREWIDTH); // 3
        vertices[vertexIndexOffset + 5] = startY;

        vertices[vertexIndexOffset + 6] = (GLshort)(startX + TEXTUREWIDTH); // 4
        vertices[vertexIndexOffset + 7] = startY + (GLshort)TEXTUREHEIGHT;

        // Texture coords
        uvs[vertexIndexOffset] = WRESULT; // 1
        uvs[vertexIndexOffset + 1] = 0;
        uvs[vertexIndexOffset + 2] = WRESULT; // 2
        uvs[vertexIndexOffset + 3] = HRESULTNEXT;
        uvs[vertexIndexOffset + 4] = WRESULTNEXT; // 3
        uvs[vertexIndexOffset + 5] = 0;
        uvs[vertexIndexOffset + 6] = WRESULTNEXT; // 4
        uvs[vertexIndexOffset + 7] = HRESULTNEXT;
    }
}
for(int row=0;row
假设
高度intiles=1
宽度intiles=2
,代码首先生成两个“剥离”三角形1234;对于下一个单元,将生成顶点5678,其中3=5,4=6。所以有两个退化三角形(面积
0
)。但是,这是可行的(在将
vertexIndexOffset+=8;
移动到内部循环的末尾之后)


假设
heightInTiles=2
widthtintiles=1
,图片看起来有些不同:

 6-----------8
 |           |
 |           |
 |           |
 |           |
 2/5--------4/7
 |           |
 |           |
 |           |
 |           |
 1-----------3
现在,如果绘制了条带12345678,会发生什么?123,234还可以,但是345呢?这会重叠,请注意这些顶点的纹理坐标——顶点2和5具有不同的UV!如上所述,有两个不需要的三角形,但这一次,它们不再具有面积
0


当新行开始时,您需要插入两个虚拟顶点,实际上是在其他位置重新启动条带。如果三角形条包含1234
45
5678怎么办?现在,123和234画得很好,然后344、445、455和556的面积
0
,接下来画的三角形是567和678。

谢谢。回答得很好。vertexIndexOffset+=8的位置是一个错误:-P
 6-----------8
 |           |
 |           |
 |           |
 |           |
 2/5--------4/7
 |           |
 |           |
 |           |
 |           |
 1-----------3