Domanda

Sto cercando di manualmente (senza librerie quali Three.js) caricare un modello 3D JSON nel mio codice WebGL solo per divertimento, ma sto attraversando un periodo difficile in cui i miei modelli hanno più di 1 texture. In un obj-> JSON convertito il file, come faccio a sapere che la trama è il "attivo" per le facce che seguono? file OBJ utilizzano tag 'usemtl' per identificare la texture / materiale in uso, ma io non riesco a trovare quel tipo di puntatore quando si lavora con JSONs. Con il tempo, sto usando il obj-> JSON convertitore scritto da alteredq

Grazie un mazzo, Rod

È stato utile?

Soluzione

Date un'occhiata a questo file:. three.js / src / extras / loaders / JSONLoader.js

Il primo elemento di ogni faccia nella matrice faces del file JSON è un campo di bit. Il primo bit dice se quel volto hanno tre o quattro indici. E il secondo bit dice se quel viso ha un materiale assegnato. indice di materiale, se del caso, compare dopo indici.

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

prima faccia (triangolo con materiale):

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

seconda faccia (quad senza materiale):

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

terza faccia (quad con il materiale):

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

codice di controllo di origine per la piena sensi di tale campo di bit.

Altri suggerimenti

Nel obj-> JSON convertitore che ho scritto per il motore KickJS gioco, ogni materiale ha una propria gamma di indici.

Ciò significa che un semplice modello OBJ come

    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

sarebbe tradotta in questo (Con due indici, uno per ogni materiale):

    [
       {
          "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]
       }
    ]

Utilizza lo spettatore modello di on-line per la conversione:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top