glTexCoordPointerでどのようにセットアップする/計算texturebuffer OBJファイルからのインポート
質問
私は、AndroidにOBJファイルを解析することだし、私の目標は、オブジェクトをレンダリング&表示することです。すべてが(などが正常に動作しますopenglのにリソース/画像のインポート)正しいテクスチャマッピングを除いて罰金を動作します。
私はtexturebuffer-オブジェクトにOBJファイルからテクスチャ関連のデータを移入する方法がわからない。
OBJファイルでIましVT-行:
vt 0.495011 0.389417
vt 0.500686 0.561346
とフェースライン
f 127/73/62 98/72/62 125/75/62
のように私のドロールーチンルックス(関連部分のみ):
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glNormalPointer(GL10.GL_FLOAT, 0, normalsBuffer);
gl.glTexCoordPointer(2, GL10.GL_SHORT, 0, t.getvtBuffer());
gl.glDrawElements(GL10.GL_TRIANGLES, t.getFacesCount(), GL10.GL_UNSIGNED_SHORT, t.getFaceBuffer());
OBJファイルの数の出力:
Vertex-count: 1023
Vns-count: 1752
Vts-count: 524
/////////////////////////
Part 0
Material name:default
Number of faces:2037
Number of vnPointers:2037
Number of vtPointers:2037
任意のアドバイスは大歓迎です。
解決
申し訳ありませんが、いないことを確認これは恩着せがあるどの程度までが、トップから
f 127/73/62 98/72/62 125/75/62
手段ファイルに与えられた127の位置、ファイルの第73のテクスチャの位置と第62正常と同様の方法で指定された2つの他の頂点と頂点との間の三角形
(全部が単一のユニットとして変換を通過すると)ではOpenGLのあなたは、位置のすべての異なる組み合わせを把握テクスチャ座標正常およびバッファにあなたを配置する必要があるので、頂点ごとに1つだけのインデックスを指定します従ってglVertexPointer
、glNormalPointer
とglTexCoordPointer
に渡します。例えば、終わるかもしれない上記顔があなたの内部頂点バッファ内の最初の127の位置にコピーのだ頂点0、1と2の間のようGL_TRIANGLESを介して指定され、最初にテクスチャ座標第73コピーのですあなたの内部のテクスチャにバッファ座標と、あなたの内部の通常のリストの最初に通常の第62回をコピーしたのだ。
かなりおそらくあなたはコンビネーションキー頂点/テクスチャ座標/あなたの内部の配列内の位置に通常のマッピングを取っHashMapをしたいです。あなたは、着信OBJ内の各顔に遭遇したよう、あなたは組み合わせがあなたの内部バッファにスポットに割り当てられていることを既に持っているかどうかを確認できない場合は、それを次の使用可能なものを与えます。
VTはそう例えば、テクスチャCOORDでありますテクスチャ座標ます:
vt 0.495011 0.389417
手段Y = 0.389417、テクスチャ空間内で、X = 0.495011、その。メモリから、OBJファイル形式とOpenGLは反対方向にY軸を有しています。 。だから、OpenGLの面であなたがs = 0.495011、T = 1たいと思います - 0.389417 = 0.610583
あなたのオブジェクトが適切に複雑なテクスチャアトラスやスキンを使用している場合は、、私はそれがy座標が反転していることを明らか遠くからだろうと想像。あなただけの各面にその全体が繰り返される同じテクスチャを持つ立方体のようなものを持っている場合、あなたはおそらくちょうど垂直に沿って裏返されているとして、それを参照してくださいね。
混乱の源をカバーしていますか?