GL_TRIANGLE_STRIP - 为单个绘图调用生成网格(退化三角形)

时间:2013-01-25 14:52:54

标签: opengl-es indexing vertex

我需要为GL_TRIANGLE_STRIP渲染创建一个网格。

我的网格只是一个:

  • 职位(自解释)
  • 尺寸(x,y尺寸)
  • 分辨率(x,y中每个顶点之间的间距)

以下是用于创建顶点/索引并返回它们的方法:

int iCols = vSize.x / vResolution.x;
int iRows = vSize.y / vResolution.y;


// Create Vertices
for(int y = 0; y < iRows; y ++)
{
    for(int x = 0; x < iCols; x ++)
    {
        float startu  = (float)x / (float)vSize.x;
        float startv  = (float)y / (float)vSize.y; 


        tControlVertex.Color    = vColor;
        tControlVertex.Position = CVector3(x * vResolution.x,y * vResolution.y,0);
        tControlVertex.TexCoord = CVector2(startu, startv - 1.0 );

        vMeshVertices.push_back(tControlVertex);   
    }
}


// Create Indices
rIndices.clear();

for (int r = 0; r < iRows - 1; r++)
{
    rIndices.push_back(r*iCols);

    for (int c = 0; c < iCols; c++)
    {
        rIndices.push_back(r*iCols+c);
        rIndices.push_back((r+1)*iCols+c);
    }
    rIndices.push_back((r + 1) * iCols + (iCols - 1));
} 

首先想象一下这几个例子。

1)尺寸512x512分辨率为64x64,因此它应该由8 x 8四边形组成,但我只得到7x7

512x512 Grid / 64x64 = 7x7 instead of 8x8 ?

2)尺寸512x512分辨率128x128,所以它应该由4 x 4四边形组成,但我只得到3x3

enter image description here

3)尺寸128x128分辨率8x8所以它应该由16 x 16四边形组成,但我只得到15x15

enter image description here

所以你可以看到,我错过了Last Row和Last Column。我哪里错了?

1 个答案:

答案 0 :(得分:0)

简短回答:当您生成顶点和索引时,与仅<=相比,进行for循环测试<

问题在于,iRowsiCols变量的计算是计算一系列像素的特定分辨率的基元数量;称之为 n 。对于 n primtives的三角形条带,你需要 n + 2 基元,所以你只是缺少顶点的最后一行“和”列。

索引生成循环必须是:

for ( int r = 0; r <= iRows; ++r ) {
    for ( int c = 0; c <= iCols; ++c ) {
        rIndices.push_back( c + r + r*iCols );
        rIndices.push_back( c + r + (r+1)*iCols + 1 );
    }
}