2012-07-06 17 views

risposta

1

Vorrei prima esaminare il convertitore python OBJ -> three.js.

Tranne che, non penso che troverete alcuna libreria pre-creata per farlo. In realtà chiederei 3DTin se usassero una libreria o se la sviluppassero internamente.

3

Scrivere un OBJExporter dovrebbe essere abbastanza semplice. Basta usare come riferimento lo OBJLoader. Tra qualche settimana probabilmente scriverò me stesso se nessuno lo ha fatto da allora.

+0

Grazie! Penso che sarà estremamente utile. – user1507511

7

Per ottenere maglie in .Obj formato uso questa semplice funzione:

THREE.saveGeometryToObj = function (geometry) { 
var s = ''; 
for (i = 0; i < geometry.vertices.length; i++) { 
    s+= 'v '+(geometry.vertices[i].x) + ' ' + 
    geometry.vertices[i].y + ' '+ 
    geometry.vertices[i].z + '\n'; 
} 

for (i = 0; i < geometry.faces.length; i++) { 

    s+= 'f '+ (geometry.faces[i].a+1) + ' ' + 
    (geometry.faces[i].b+1) + ' '+ 
    (geometry.faces[i].c+1); 

    if (geometry.faces[i].d !== undefined) { 
     s+= ' '+ (geometry.faces[i].d+1); 
    } 
    s+= '\n'; 
} 

return s; 
} 
+0

Avete un oggetto di geometria di esempio funzionante che funzioni con questo? Stavo diventando 'lunghezza indefinita' ma sto cercando di salvare una mesh buffer a triplo piano, quindi forse il formato dell'oggetto è diverso? –

0

ho ottimizzato il codice sopra leggermente per consentire matrici di oggetti che sono stati duplicati e tradotti intorno in una scena. Attualmente sto usando document.writeln per poi copiare e incollare manualmente in un documento.

var l = parent.length; 
var j = 0; 

while (l--) { 

var numVerts = parent[l].children[0].geometry.vertices.length; 
document.writeln(THREE.saveGeometryToObj(parent[l].children[0],j*(numVerts)));  

j++; 
} 

THREE.saveGeometryToObj = function (geo,nums) { 

geo.updateMatrixWorld(); 
var num = parseInt(nums); 
var s = ''; 

for (i = 0; i < geo.geometry.vertices.length; i++) { 

    var vector = new THREE.Vector3(geo.geometry.vertices[i].x, geo.geometry.vertices[i].y, geo.geometry.vertices[i].z); 
    geo.matrixWorld.multiplyVector3(vector); 


    s+= 'v '+(vector.x) + ' ' + 
    vector.y + ' '+ 
    vector.z + '</br>'; 
} 

for (i = 0; i < geo.geometry.faces.length; i++) { 

    s+= 'f '+ (geo.geometry.faces[i].a+1+num) + ' ' + 
    (geo.geometry.faces[i].b+1+num) + ' '+ 
    (geo.geometry.faces[i].c+1+num); 

    if (geo.geometry.faces[i].d!==undefined) { 
     s+= ' '+ (geo.geometry.faces[i].d+1+num); 
    } 
    s+= '</br>'; 
} 

return s; 

}

Problemi correlati