2012-02-16 8 views
1

私は手動で(Three.jsのようなライブラリはありません)JSON 3Dモデルを私のwebGLコードに読み込みますが、私のモデルには1つ以上のテクスチャがある場合は苦労しています。 OBJ-> JSON変換されたファイルでは、どのテクスチャが後続の顔の「アクティブ」なのかをどのように知ることができますか? OBJファイルは 'usemtl'タグを使って使用中のテクスチャ/マテリアルを識別しますが、JSONを扱う際にはそのようなポインタを見つけることができません。 時間で、私はKickJSゲームエンジンのために書かれているOBJ-> JSONコンバータでは、 ロッドマルチテクスチャOBJ-> JSON変換ファイルは、フェイステクスチャマッピングをどのように追跡しますか?

答えて

1

目を見てみましょうファイル:three.js/src/extras/loaders/JSONLoader.jsです。

faces JSONファイルの各面の最初の要素は、ビットフィールドです。最初のビットは、その顔が3つの4つのインデックスを持つかどうかを示します。 2番目のビットは、その面に割り当てられた素材があるかどうかを示します。材料インデックスがある場合は、インデックスの後に表示されます。

例:faces: [2, 46, 44, 42, 0, 1, 45, 46, 48, 3, ...

第一の面(材料と三角形):

Type: 2 (00000010b) 
Indices: 46, 44, 42 
Material index: 0 

第二の面(材料なしクワッド):

Type: 1 (00000001b) 
Indices: 45, 46, 48 

第三の面(材料とクワッド):

Type: 3 (00000011b) 
Indices: ... 

そのビットフィールドの完全な意味のソースコードを確認してください。

+0

スポットがあります。答えてくれてありがとう、Juan。 – rod

+0

ちょうど説明の問題として、そのフィールドは「バイトフィールド」ではないでしょうか? 「ビットフィールド」は1ビットを保持し、0または1の2つの可能性しか与えません。 – rod

+0

@rodいいえ、「ビットフィールド」はOKです。 Wikipedia [記事](http://en.wikipedia.org/wiki/Bit_field)を参照してください。 –

0

alteredq

おかげでたくさんによって書かれOBJ-> JSONコンバーターを使用しています、それぞれの材料が持ちますそれ自身の指標の範囲。

これは、

mtllib plane.mtl 
    o Plane 
    v 1.000000 0.000000 -1.000000 
    v 1.000000 0.000000 1.000000 
    v -1.000000 0.000000 1.000000 
    v -1.000000 0.000000 -1.000000 
    usemtl Material 
    s 1 
    f 2 3 4 
    usemtl Material.001 
    f 1 2 4 

ような単純なOBJモデルは、(2つのインデックスと、各材料に対して1つ)、この翻訳されるであろう意味:

[ 
     { 
      "vertex": [1,0,1,-1,0,1,-1,0,-1,1,0,-1], 
      "name": "Plane mesh", 
      "normal": [0,-1,0,0,-1,0,0,-1,0,0,0,0], 
      "indices0": [0,1,2], 
      "indices1": [3,0,2] 
     } 
    ] 

convertionのオンラインモデルビューアを使用:

http://www.kickjs.org/example/model_viewer/model_viewer.html

+0

回答ありがとう、mortennobel。あなたが提供したリンクは壊れているようです。私が見ることができるのは、ボタン(ダック、キューブ、ティーポットなど)だけです。 – rod

+0

現在Firefoxに問題があります。 Chromeを試す(Firefoxの問題を解決している間に) – Mortennobel

+0

問題が修正されました。フィードバックをお寄せいただきありがとうございます。興味深いツールが欲しい。 – Mortennobel

関連する問題