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