最初/最後の頂点を繰り返すことにより、三角形ストリップをバッチ処理するために (固定関数パイプラインで) 頂点バッファーを使用しています。レンダリング コードは次のとおりです。
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
広場の照明が間違っているのはなぜですか?