我試圖手動(沒有像Three.js這樣的庫)將JSON 3D模型加載到我的webGL代碼中,只是爲了好玩,但當我的模型具有超過1個紋理時,我遇到了困難。 在一個OBJ-> JSON轉換後的文件中,我如何知道哪個紋理是後續面的「活動」? OBJ文件使用'usemtl'標記來標識正在使用的紋理/材質,但在使用JSON時我似乎無法找到這種指針。 隨着時間的推移,我使用的是由alteredq多紋理OBJ-> JSON轉換文件如何跟蹤面部紋理映射?
感謝一大堆寫的OBJ-> JSON轉換器, 杆
我試圖手動(沒有像Three.js這樣的庫)將JSON 3D模型加載到我的webGL代碼中,只是爲了好玩,但當我的模型具有超過1個紋理時,我遇到了困難。 在一個OBJ-> JSON轉換後的文件中,我如何知道哪個紋理是後續面的「活動」? OBJ文件使用'usemtl'標記來標識正在使用的紋理/材質,但在使用JSON時我似乎無法找到這種指針。 隨着時間的推移,我使用的是由alteredq多紋理OBJ-> JSON轉換文件如何跟蹤面部紋理映射?
感謝一大堆寫的OBJ-> JSON轉換器, 杆
看看日是文件:three.js/src/extras/loaders/JSONLoader.js
。
JSON文件faces
數組中每個面的第一個元素是位域。第一位說,如果這張臉有三個四個指標。第二位表示該臉部是否分配了材料。物料索引(如果有的話)出現在索引之後。
實施例: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: ...
檢查該位字段的完整含義的源代碼。
在我對KickJS遊戲引擎編寫的OBJ-> JSON轉換器,每種材料都有它自己的指數範圍。
這意味着簡單的OBJ模型如
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
將被翻譯成本(有兩個索引;一個用於每種材料):
[
{
"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]
}
]
使用用於轉換的交互的在線模型查看器:
http://www.kickjs.org/example/model_viewer/model_viewer.html
感謝您的回答,mortennobel。但是,您提供的鏈接似乎已被破壞。我能看到的只有按鈕(鴨子,立方體,茶壺等),沒有別的。 – rod 2012-02-16 20:11:26
Firefox目前存在問題。嘗試Chrome(當我解決Firefox問題時) – Mortennobel 2012-02-16 20:56:20
問題已修復。感謝您的反饋。我希望我的工具有趣。 – Mortennobel 2012-02-16 21:04:53
現貨。感謝你的回答,胡安。 – rod 2012-02-16 20:11:50
就像澄清一樣,這個字段不是「字節字段」嗎?一個「位字段」將保持1位,只給出2個可能性,0或1.儘管如此,非常有幫助的答案,謝謝。 – rod 2012-02-16 20:31:01
@rod否,「位域」是可以的。參見維基百科[文章](http://en.wikipedia.org/wiki/Bit_field)。 – 2012-02-16 21:57:07