1

我需要为 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 网格 / 64x64 = 7x7 而不是 8x8 ?

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

在此处输入图像描述

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

在此处输入图像描述

如您所见,我在某处缺少最后一行和最后一列。我哪里错了?

4

1 回答 1

0

简短的回答:<=与 just 相比<,在生成顶点和索引时进行 for-loop test 。

问题是您的iRowsiCols变量的计算是计算一系列像素的特定分辨率的图元数量;称之为n对于n个基元的三角形条带,您需要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 );
    }
}
于 2013-01-25T15:01:41.447 回答