2015-08-16 35 views
5

Sto provando OBJ di importazione (provato diverso) sul server con node.js e three.js - Ho ricevuto questo errore dopo il file di analisi. Questo è il codice attuale come importare la geometria:three.js TypeError: Impossibile leggere la proprietà 'center' di undefined

var loader = new THREE.OBJLoader(); 
    loader.load(modelPath, function (geometryObj) { 
    var materialObj = new THREE.MeshBasicMaterial({ vertexColors: THREE.FaceColors, overdraw: 0.5 }); 
    mesh = new THREE.Mesh(geometryObj, materialObj); 
    scene.add(mesh); 

Ecco stack di chiamate:

this.center.copy(sphere.center); 
TypeError: Cannot read property 'center' of undefined 
at THREE.Sphere.copy (eval at <anonymous> (/lib/three.js:32:3), <anonymous>:6074:27) 
at THREE.Frustum.intersectsObject (eval at <anonymous> (/lib/three.js:32:3), <anonymous>:6253:11) 
at eval (eval at <anonymous> (/lib/three.js:32:3), <anonymous>:36578:53) 
at THREE.Object3D.traverseVisible (eval at <anonymous> (/lib/three.js:32:3), <anonymous>:7943:3) 
at THREE.Object3D.traverseVisible (eval at <anonymous> (/lib/three.js:32:3), <anonymous>:7947:23) 
at projectScene (eval at <anonymous> (/lib/three.js:32:3), <anonymous>:36568:9) 
at render (eval at <anonymous> (/lib/three.js:32:3), <anonymous>:35449:28) 

So che questo era noto problema https://github.com/mrdoob/three.js/pull/3748, ma non riesco a capito come risolvere questo errore.

+0

Il modello è caricato senza utilizzare materiale? In caso contrario, c'è qualcosa di sbagliato nel codice del tuo modello – mrapsogos

+0

@mrapsogos Il modello è solo geometrico (http://pastebin.com/6gAkVmE0) generato da 3dsmax, quindi dovrebbe essere ok. – Destrosvet

risposta

10

Ho lo stesso problema da quando ho scoperto che gli oggetti caricati da OBJLoader sono già un'istanza THREE.Mesh.

Quindi probabilmente si dovrebbe fare questo:

var loader = new THREE.OBJLoader(); 
loader.load(modelPath, function(object) { 

    // if you want to add your custom material 
    var materialObj = new THREE.MeshBasicMaterial({ 
     vertexColors: THREE.FaceColors, 
     overdraw: 0.5 
    }); 
    object.traverse(function(child) { 
     if (child instanceof THREE.Mesh) { 
      child.material = materialObj; 
     } 
    }); 

    // then directly add the object 
    scene.add(object); 
}); 

vedono anche this question e this example on the three.js website.

Problemi correlati