2015-02-03 8 views
5

Ich habe Three.js in letzter Zeit ausprobiert und ich habe das Exporter-Addon für Blender verwendet, um Modelle in Blender zu testen und zu exportieren, damit ich sie in drei verwenden kann .js Programm.Three.js JSONLoader Mixer-Modell Fehler: Eigenschaft 'Länge' undefined

Ich habe das Add-on zum Mixer hinzugefügt, und mit nur dem grundlegenden Würfelmodell von Blender, exportierte es zu .json, wie der Exporteur sagt. Dann importierte ich das Modell in meine three.js mit diesem als guide aber das gab mir eine Fehlermeldung:

Uncaught TypeError: Cannot read property 'length' of undefined. 

Ive bereits online gesucht und versuchte, ein paar verschiedenen Ansätze (wie zB ein Material in dem Funktionsaufruf von der Loader) aber nichts scheint zu funktionieren.

Ich habe auch stackoverflow für Antworten überprüft, aber bis jetzt scheint nichts gelöst. Wenn jemand erklären würde, was ich falsch mache, wäre ich sehr dankbar.

Der Code für mein three.js Programm:

var WIDTH = 1000, 
     HEIGHT = 1000; 


var VIEW_ANGLE = 45, 
     ASPECT = WIDTH/HEIGHT, 
     NEAR = 0.1, 
     FAR = 10000; 


var radius = 50, 
     segments = 16, 
     rings = 16; 

var sphereMaterial = 
     new THREE.MeshLambertMaterial(
       { 
        color: 0xCCCCCC 
       }); 


var sphere = new THREE.Mesh(
     new THREE.SphereGeometry(
       radius, 
       segments, 
       rings), 
     sphereMaterial); 



var pointLight = 
     new THREE.PointLight(0x660000); 


var $container = $('#container'); 


var renderer = new THREE.WebGLRenderer(); 
var camera = 
     new THREE.PerspectiveCamera(
       VIEW_ANGLE, 
       ASPECT, 
       NEAR, 
       FAR); 

var scene = new THREE.Scene(); 

var loader = new THREE.JSONLoader(); // init the loader util 


scene.add(camera); 


pointLight.position.x = 10; 
pointLight.position.y = 50; 
pointLight.position.z = 130; 


scene.add(pointLight); 

camera.position.z = 300; 


renderer.setSize(WIDTH, HEIGHT); 

$container.append(renderer.domElement); 
window.requestAnimFrame = (function() { 
    return window.requestAnimationFrame || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      function (callback) { 
       window.setTimeout(callback, 1000/60); 
      }; 
})(); 


loader.load('test.json', function (geometry, materials) { 
    var material = new THREE.MeshFaceMaterial(materials); 
    var object = new THREE.Mesh(geometry, material); 
    scene.add(object); 

}); 


(function animloop() { 
    requestAnimFrame(animloop); 

    renderer.render(scene, camera); 
})(); 

Antwort

3

In meinen bisherigen Erfahrungen mit dem Exporteur, müssen Sie sehr vorsichtig sein, welche Boxen Sie ankreuzen!

Dieser Längenfehler ist normalerweise, weil Sie die Eckpunkte entweder nicht exportieren oder die Szene eher als das Objekt exportieren.

+0

Wie kann ich debuggen? –

1

Ich habe das gleiche Problem mit dem neuen Exporteur.

Wenn wählen Sie bitte Szene dann in der Regel bekomme ich „Kann nicht Eigenschaft‚Länge‘undefinierter lesen“

Wenn ich nur das Objekt und die Materialien und Ecken aus. Es scheint normalerweise nur für immer zu bleiben.

UPDATE

Aktivieren Sie diese Antwort auf diese Frage!

Threejs blender exporter exports in wrong format

+0

Ich hatte das gleiche Problem, aber es war, weil ich den falschen Lader in Threejs verwendete. Um eine exportierte Szene zu laden, müssen Sie ObjectLoader anstelle von JSONLoader verwenden. So etwas wie 'var loader = new THREE.ObjectLoader(); \t \t \t Loader.load ('data/yourfile.json', function (obj) { \t \t \t \t scene.add (OBJ); \t \t \t \t belebtes(); \t \t \t \t \t \t \t }); '. Das hat mein Problem gelöst. – bre

5

Wenn Sie exportieren, die Art von buffergeometry zu Geometrie ändern (Blender 2.76)