3D モデルを含むウェーブフロント .Obj ファイルからデータをレンダリングするために、頂点配列オブジェクト (VAO) で 2 つの頂点バッファー オブジェクト (VBO) と 2 つのインデックス バッファー オブジェクト (IBO) を使用しようとしていました。.obj ファイルは、頂点/法線面の定義を使用していました:
f v1//vn1 v2//vn2 v3//vn3
GL_ELEMENT_ARRAY_BUFFER バインディング ターゲットに (一度に) 1 つのバッファ オブジェクトしかバインドできないため、OpenGL の VAO でのインデックス作成に 2 つの IBO を使用できないことに気付きました。これは、GLSL頂点シェーダーへの入力として両方が必要な場合に問題となる、頂点位置インデックスと頂点法線インデックスを定義することはできないことを意味します。
頂点位置と頂点法線をカプセル化する「Vertex」構造体を使用することを考えましたが、データを 1 つの長い配列以外として OpenGL に供給する方法と、すべての頂点位置データを異なるオブジェクトに持っている場合がわかりません。いくつかのループを使用して、すべての位置データを含む新しい配列にデータをコピーできると思います。
.obj ファイルをロードするときに、法線が対応する頂点位置の値と一致するようにデータを処理できると思います。
この問題を解決するにはどうすればよいですか?
OpenGL 3.3 で C++ と Visual Studio 2012 を使用しています。