开发者问题收集

Three.js 导入 Blender 模型:未捕获 TypeError:无法读取未定义的属性“length”

2016-12-26
1799

我尝试使用 Three.js Blender Export 工具将 Blender 模型导入 three.js。但是,我收到错误: Uncaught TypeError: Cannot read property 'length' of undefined

我尝试浏览其他 Stack Overflow 线程,并尝试改用 THREE.ObjectLoader() 。但是,我得到的却是这个错误 Uncaught TypeError: Cannot read property 'type' of undefined .

我目前正在使用 three.js 的 R83 版本。

这是我的代码:(我正在遵循这个 教程 。)

var scene, camera, renderer;

var WIDTH = window.innerWidth;
var HEIGHT = window.innerHeight;

var speed = 0.01;

function init() {
    scene = new THREE.Scene();

    initMesh();
    initCamera();
    initLights();
    initRenderer();

    document.body.appendChild(renderer.domElement);
}

function initCamera() {
    camera = new THREE.PerspectiveCamera(70, WIDTH / HEIGHT, 1, 10);
    camera.position.set(0, 3.5, 5);
    camera.lookAt(scene.position);
}

function initRenderer() {
    renderer = new THREE.WebGLRenderer( {alpha: true} );
    renderer.setSize(WIDTH, HEIGHT);
}

function initLights() {
    var light = new THREE.AmbientLight(0xFFFFFF);
    scene.add(light);
}

var mesh = null;
function initMesh() {
    var loader = new THREE.JSONLoader();
    loader.load('js/cube.json', function(geometry, materials) {
        mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));
        mesh.scale.x = mesh.scale.y = mesh.scale.z = 0.75;
        mesh.translation = THREE.GeometryUtils.center(geometry);
        scene.add(mesh);
    });
}

function rotateMesh() {
    if (!mesh) {
        return;
    }

    mesh.rotation.x -= SPEED * 2;
    mesh.rotation.y -= SPEED
    mesh.rotation.z -= SPEED * 3;
}

function render() {
    requestAnimationFrame(render);
    rotateMesh();
    renderer.render(scene, camera);
}

init();
render();

我的 cube.json 如下所示:

{
    "metadata":{
        "generator":"io_three",
        "type":"BufferGeometry",
        "position":23382,
        "version":3,
        "normal":23382
    },
    "data":{
        "attributes":{
            "position":{
                "type":"Float32Array",
                "itemSize":3,
                "array":[...]
            },
            "normal":{
                "type":"Float32Array",
                "itemSize":3,
                "array":[...]
            }
        },
        "index":{
            "type":"Uint16Array",
            "itemSize":1,
            "array":[...]
        }
    }
}
2个回答

我通过将导出器设置从 Type: BufferGeometry 更改为 Type: Geometry 解决了此问题。希望这能对遇到相同问题的人有所帮助。

Lyxpudox
2016-12-26

在导出器设置中包含“场景”可以为我解决该问题,并且允许将其导出为 Buffergeometry 并使用 ObjectLoader 在 Three.js 中读取,没有任何问题。

Deuxis
2017-10-20