1

最初/最後の頂点を繰り返すことにより、三角形ストリップをバッチ処理するために (固定関数パイプラインで) 頂点バッファーを使用しています。レンダリング コードは次のとおりです。

    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);

    // 頂点配列を有効にする
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 3*sizeof(GLfloat), 0);

    // カラー VBO を準備する
    glBindBuffer(GL_ARRAY_BUFFER, _colorBuffer);

    // 色配列を有効にする
    glEnableClientState(GL_COLOR_ARRAY);
    glColorPointer(3, GL_FLOAT, 3*sizeof(GLfloat), 0);

    // 法線 VBO を準備します
    glBindBuffer(GL_ARRAY_BUFFER, _normalBuffer);

    // 通常の配列を有効にする
    glEnableClientState(GL_NORMAL_ARRAY);
    glNormalPointer(GL_FLOAT, 0, 0);

    glDrawArrays(モード、0、_nVertices);      

    // 無効化/アンバインド
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_NORMAL_ARRAY);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

ただし、三角形のストリップは正しく分離されていますが、照明は最初の三角形のストリップに対してのみ正しいです。

以下の例では、五角形と四角形をレンダリングしていますが、五角形のみライティングが正しいことがわかります。

ここに画像の説明を入力

これは、3 つの (頂点、法線、カラー) 頂点バッファー内のデータです。五角形の最後の頂点と正方形の最初の頂点が繰り返され、法線が一致していることがわかります。

頂点:

-2.000000 1.000000 0.000000
-1.000000 0.000000 0.000000
-1.000000 2.000000 0.000000
0.000000 0.000000 0.000000
0.000000 2.000000 0.000000
0.000000 2.000000 0.000000
1.000000 -1.000000 0.000000
1.000000 -1.000000 0.000000
1.000000 -2.000000 0.000000
2.000000 -1.000000 0.000000
2.000000 -2.000000 0.000000

法線:

-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 -0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 0.000000 1.000000
-0.000000 -0.000000 1.000000

色:

0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.317647 0.011765 0.458824
0.678431 0.003922 0.003922
0.678431 0.003922 0.003922
0.678431 0.003922 0.003922
0.678431 0.003922 0.003922
0.678431 0.003922 0.003922

広場の照明が間違っているのはなぜですか?

4

1 に答える 1

0

どうやら問題は、2 つの三角形ストリップを組み合わせるときに追加される縮退三角形の数に関係しています。これにより、頂点の順序が変更され、法線の方向が一貫しなくなる可能性があります。

三角形ストリップの現在の実行長が奇数である場合に余分な冗長頂点を追加することで、上記の問題を解決しました。

以下のリンクには、三角形ストリップの作成と結合に関する多くの役立つ情報があります。

http://www.codercorner.com/Strips.htm

于 2012-09-07T03:46:28.727 に答える