2015-02-03 41 views
5

Ostatnio wypróbowałem Three.js i użyłem dodatku do eksportera do Blendera, aby przetestować modelowanie w blenderze i eksportować, więc mogę używać ich w trzech Program .js.Three.js Błąd modelu blendera JSONLoader: właściwość 'length' undefined

Dołączyłem dodatek do miksera, a używając tylko podstawowego modelu kostki blendera, wyeksportowałem go do .json, jak mówi eksporter. Potem importowany model do moich three.js używając tego jako guide ale dał mi błąd:

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

Ive już przeszukiwane online i próbowaliśmy kilka różnych podejść (jak w tym do materiałów w wywołaniu funkcji z program ładujący), ale nic nie działa.

Sprawdziłem również stackoverflow dla odpowiedzi, ale jak dotąd nic nie wydaje się być rozwiązane. Jeśli ktokolwiek wyjaśniłby, co robię źle, byłbym bardzo wdzięczny.

Kod dla mojego programu three.js:

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); 
})(); 

Odpowiedz

3

Z mojego doświadczenia tak daleko z eksportera, trzeba być bardzo ostrożnym, który można zaznaczyć pudełka!

Ten błąd długości jest zwykle spowodowany tym, że nie eksportujesz wierzchołków lub eksportujesz scenę zamiast obiektu.

+0

Jak można debugować? –

1

Mam taki sam problem z nowym eksporterem.

Jeśli następnie wybierz SCENE I zazwyczaj „nie można odczytać własności«długość»undefined”

Jeśli wybiorę tylko przedmiotu oraz materiałów i wierzchołków. Zwykle po prostu wydaje się utknąć na zawsze.

UPDATE

Sprawdź tę odpowiedź na ten problem!

Threejs blender exporter exports in wrong format

+0

Miałem ten sam problem, ale to dlatego, że użyłem niewłaściwego programu ładującego w trojkach. Aby wczytać wyeksportowaną scenę, musisz użyć ObjectLoader zamiast JSONLoader. Coś w stylu 'var loader = new THREE.ObjectLoader(); \t \t \t Loader.load ('dane/yourfile.json', funkcja (obj) { \t \t \t \t scene.add (obj) \t \t \t \t ożywione(); \t \t \t \t \t \t \t }); '. To rozwiązało mój problem. – bre

5

Podczas eksportowania, zmienić typ z buffergeometry do geometrii (Blender 2.76)