Wie hält Multi-Texture OBJ-> JSON-konvertierte Dateien die Gesichts-Text-Mapping im Auge?
Frage
Ich versuche manuell (keine Bibliotheken wie drei.js) ein JSON 3D -Modell in meinen WebGL -Code zu laden, aber es fällt mir schwer, wenn meine Modelle mehr als eine Textur haben. Woher weiß ich in einer über konvertierten OBJ-> JSON-Datei, welche Textur für die folgenden Gesichter "aktiv" ist? OBJ -Dateien verwenden 'Usemtl' Tag, um das verwendete Textur/das verwendete Material zu identifizieren, aber ich kann diesen Zeiger bei der Arbeit mit Jsons nicht finden. Mit der Zeit verwende ich den obj-> JSON-Konverter von geschrieben von Alteredq
Danke ein Haufen, Rod
Lösung
Schauen Sie sich diese Datei an: three.js / src / extras / loaders / JSONLoader.js
.
Das erste Element jedes Gesichts in der faces
Array der JSON -Datei ist ein Bitfeld. Das erste Bit besagt, ob dieses Gesicht drei O vier Indizes hat. Und das zweite Bit sagt, ob dieses Gesicht ein Material zugewiesen ist. Der Materialindex erscheint nach Indizes, falls vorhanden.
Beispiel: faces: [2, 46, 44, 42, 0, 1, 45, 46, 48, 3, ...
Erstes Gesicht (Dreieck mit Material):
Type: 2 (00000010b)
Indices: 46, 44, 42
Material index: 0
Zweites Gesicht (Quad ohne Material):
Type: 1 (00000001b)
Indices: 45, 46, 48
Drittes Gesicht (Quad mit Material):
Type: 3 (00000011b)
Indices: ...
Überprüfen Sie den Quellcode für die vollständige Bedeutung dieses Bitfeldes.
Andere Tipps
In dem Obj-> JSON-Konverter, den ich für die Kickjs Game Engine geschrieben habe, hat jedes Material seine eigene Indizesspanne.
Dies bedeutet ein einfaches OBJ -Modell wie z.
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
Würde in dieses übersetzt werden (mit zwei Indizes; eine für jedes Material):
[
{
"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]
}
]
Verwenden Sie den Online -Model Viewer für die Konvertion:
http://www.kickjs.org/example/model_viewer/model_viewer.html