0

OpenGL2.1でOBJファイルを扱っています。これはOBJ仕様です: http: //www.martinreddy.net/gfx/3d/OBJ.spec それによると、面は頂点/テクスチャ/法線として示され、頂点、テクスチャ、法線が異なります。これは頂点の平均インデックスです。 、各バッファのテクスチャ座標と法線インデックスは異なります。

質問:頂点、テクスチャ、および通常の配列ごとに異なる指示バッファーを提供するオブジェクトを描画するにはどうすればよいですか?

4

1 に答える 1

4

悲しい答え、これはOpenGLでは不可能です。OpenGL(および他の多くのそのようなシステム、特にDirect3D)では、頂点は概念的には、位置、法線、テクスチャ座標などのすべての頂点属性の結合です(残念ながら、頂点という用語は位置属性にのみ使用されることがよくあります)。したがって、位置は同じで法線ベクトルが異なる2つの頂点は、概念的には2つの異なる頂点です。

これが、すべての属性に同じ頂点インデックスを使用する必要がある理由です。したがって、OpenGLまたは同様のライブラリを使用して.OBJファイルを描画する場合、ロード後にデータを処理することはできません。

最も簡単な方法は、インデックスを完全に削除し、面の仕様から読み取ったインデックスを使用して、各三角形のコーナーのすべての頂点データを次々に保存することです。これにより、3*F頂点があり、インデックスがありません。ただし、すべての属性を全体として考慮したとしても、おそらくまだ多くの重複する頂点があるため、これはかなり非効率的です。

もう1つのオプションは、インデックストリプル(頂点、texcoord、および通常のインデックスで構成される)をハッシュテーブルに挿入し、それを結合されたインデックスにマップすることです。インデックストリプルがすでに存在する場合は常に、ハッシュテーブル内の1つのインデックスに置き換え、存在しない場合は、最終的にレンダリングされた頂点配列に新しい頂点(position、normal、texCoordsで構成される)を追加して、ファイルのインデックスを作成します。インデックストリプルを使用する頂点配列(そしてもちろん、この新しい頂点配列サイズを一意のインデックスとしてハッシュテーブルに挿入します)。

于 2012-06-06T12:56:24.263 に答える