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 = 8x8 ではなく 7x7 ?

2) サイズ 512x512 解像度 128x128 なので、4 x 4 クワッドで作成する必要がありますが、3x3 しか得られません

ここに画像の説明を入力

3) サイズ 128x128 解像度 8x8 なので、16 x 16 クワッドで作成する必要がありますが、15x15 しか得られません

ここに画像の説明を入力

ご覧のとおり、最後の行と最後の列がどこかにありません。どこが間違っていますか?

4

1 に答える 1

0

簡単な答え:頂点とインデックスを生成するときは、for ループ テスト<=を just と比較して にします。<

問題は、変数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 に答える