Three.js JSONLoader搅拌器模型错误:属性'长度'未定义

时间:2015-02-03 12:36:46

标签: json 3d three.js undefined blender

我最近一直在尝试使用Three.js,我使用Blender的导出器插件来测试在blender和导出中制作模型,以便我可以在three.js程序中使用它们。

我将附加组件包含在搅拌机中,并仅使用搅拌机的基本立方体模型,将其导出为.json,如出口商所说。然后我使用此作为guide将模型导入我的three.js 但这给了我一个错误:

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

我已经在线搜索并尝试了一些不同的方法(比如在加载器的函数调用中包含一个材质),但似乎没有任何工作。

我还检查了stackoverflow的答案,但到目前为止似乎没有解决。如果有人会澄清我做错了什么,我将非常感激。

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

4 个答案:

答案 0 :(得分:6)

导出时,将类型从缓冲区测量更改为几何(Blender 2.76)

答案 1 :(得分:3)

根据我迄今为止与出口商的经验,你必须非常小心你打勾的哪个方块!

此长度错误通常是因为您要么不导出顶点,要么导出场景而不是对象。

答案 2 :(得分:1)

我对新导出器有同样的问题。

如果选择SCENE,我通常会得到"无法读取属性'长度'未定义"

如果我只选择对象以及材质和顶点。它通常似乎永远陷入困境。

更新

检查此问题的回复!

Threejs blender exporter exports in wrong format

答案 3 :(得分:1)

如前路杀手所述,导出为Geometry而不是BufferedGeometry是有效的。

还要注意,JSON模型的加载是异步处理的(仅在操作完成后才调用回调,其余代码将继续运行)。该模型在前一帧或第二帧中将不存在,因此请在进行动画循环内的任何操作之前检查模型是否存在。