2015-02-03 31 views
5

Gần đây tôi đã thử Three.js và tôi đã sử dụng addon xuất khẩu cho Blender để thử tạo mô hình trong máy xay sinh tố và xuất khẩu để tôi có thể sử dụng chúng trong ba .js.Lỗi mẫu thiết bị máy xay JSONLoader Three.js: thuộc tính 'length' undefined

Tôi đã thêm phần bổ sung vào máy xay sinh tố và chỉ sử dụng mô hình khối cơ bản của máy xay sinh tố, xuất nó sang .json như nhà xuất khẩu nói. Sau đó, tôi nhập khẩu các mô hình thành three.js tôi sử dụng điều này như một guide nhưng điều đó đã cho tôi một lỗi:

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

Ive đã tìm kiếm trực tuyến và thử một vài phương pháp khác nhau (như trong đó có một vật liệu trong các cuộc gọi chức năng bộ tải) nhưng không có gì có vẻ hiệu quả.

Tôi cũng đã kiểm tra stackoverflow cho câu trả lời nhưng cho đến nay không có gì có vẻ được giải quyết. Nếu bất cứ ai sẽ làm rõ những gì im làm sai tôi sẽ rất biết ơn.

mã cho chương trình three.js tôi:

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

Trả lời

3

Theo kinh nghiệm của tôi cho đến nay với các nhà xuất khẩu, bạn phải rất cẩn thận mà hộp bạn đánh dấu!

Lỗi độ dài này thường là do bạn không xuất khẩu các đỉnh hoặc xuất cảnh thay vì đối tượng.

+0

Làm thế nào tôi có thể gỡ lỗi? –

1

Tôi gặp vấn đề tương tự với nhà xuất khẩu mới.

Nếu chọn SCENE sau đó tôi thường nhận được "không thể đọc thuộc tính 'chiều dài' không xác định"

Nếu tôi chỉ chọn các đối tượng và các tài liệu và đỉnh. Nó thường chỉ có vẻ như bị mắc kẹt mãi mãi.

CẬP NHẬT

Kiểm tra phản hồi này cho vấn đề này!

Threejs blender exporter exports in wrong format

+0

Tôi có cùng một vấn đề, nhưng đó là vì tôi đã sử dụng bộ tải sai trong baj. Để tải một cảnh đã xuất, bạn phải sử dụng ObjectLoader thay vì JSONLoader. Một cái gì đó như 'var loader = new THREE.ObjectLoader(); \t \t \t loader.load ('dữ liệu/yourfile.json', function (obj) { \t \t \t \t scene.add (obj); \t \t \t \t animate(); \t \t \t \t \t \t \t }); '. Điều này giải quyết được vấn đề của tôi. – bre

5

Khi bạn xuất, thay đổi Type từ buffergeometry để Geometry (Blender 2.76)

Các vấn đề liên quan