我需要为GL_TRIANGLE_STRIP渲染创建一个网格。
我的网格只是一个:
以下是用于创建顶点/索引并返回它们的方法:
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
2)尺寸512x512分辨率128x128,所以它应该由4 x 4四边形组成,但我只得到3x3
3)尺寸128x128分辨率8x8所以它应该由16 x 16四边形组成,但我只得到15x15
所以你可以看到,我错过了Last Row和Last Column。我哪里错了?
答案 0 :(得分:0)
简短回答:当您生成顶点和索引时,与仅<=
相比,进行for循环测试<
。
问题在于,iRows
和iCols
变量的计算是计算一系列像素的特定分辨率的基元数量;称之为 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 );
}
}