Three.js JSONLoader blender model error: property 'length' undefined
Three.js JSONLoader blender model error: property 'length' undefined
我最近一直在尝试 Three.js,我使用 Blender 的导出器插件来测试在 Blender 中制作模型并导出,这样我就可以在 three.js 程序中使用它们。
我将附加组件包含到搅拌机中,并仅使用搅拌机的基本立方体模型,将其导出到 .json 正如导出器所说。然后我将模型导入我的 three.js 并将其用作 guide
但这给了我一个错误:
Uncaught TypeError: Cannot read property 'length' of undefined.
我已经在网上搜索并尝试了几种不同的方法(比如在加载程序的函数调用中包含一个材料)但似乎没有任何效果。
我也检查了 Whosebug 的答案,但到目前为止似乎没有任何解决办法。如果有人能澄清我做错了什么,我将不胜感激。
我的 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);
})();
根据我目前与出口商的经验,您必须非常小心勾选哪些方框!
这个长度错误通常是因为您没有导出顶点,或者导出场景而不是对象。
我和新出口商有同样的问题。
如果select SCENE 那么我通常得到"Cannot read property 'length' of undefined"
如果我select只有对象和材质以及顶点。它通常似乎永远卡住了。
更新
查看此问题的回复!
导出时,将类型从 buffergeometry 更改为 Geometry (Blender 2.76)
正如前面所说的 roadkill,导出为 Geometry 而不是 BufferedGeometry 是可行的。
另请注意,加载 JSON 模型加载是异步处理的(仅在操作完成时才调用回调,其余代码保持 运行)。该模型在第一帧或第二帧不存在,因此在动画循环中对其进行任何操作之前检查您的模型是否存在。
我最近一直在尝试 Three.js,我使用 Blender 的导出器插件来测试在 Blender 中制作模型并导出,这样我就可以在 three.js 程序中使用它们。
我将附加组件包含到搅拌机中,并仅使用搅拌机的基本立方体模型,将其导出到 .json 正如导出器所说。然后我将模型导入我的 three.js 并将其用作 guide 但这给了我一个错误:
Uncaught TypeError: Cannot read property 'length' of undefined.
我已经在网上搜索并尝试了几种不同的方法(比如在加载程序的函数调用中包含一个材料)但似乎没有任何效果。
我也检查了 Whosebug 的答案,但到目前为止似乎没有任何解决办法。如果有人能澄清我做错了什么,我将不胜感激。
我的 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);
})();
根据我目前与出口商的经验,您必须非常小心勾选哪些方框!
这个长度错误通常是因为您没有导出顶点,或者导出场景而不是对象。
我和新出口商有同样的问题。
如果select SCENE 那么我通常得到"Cannot read property 'length' of undefined"
如果我select只有对象和材质以及顶点。它通常似乎永远卡住了。
更新
查看此问题的回复!
导出时,将类型从 buffergeometry 更改为 Geometry (Blender 2.76)
正如前面所说的 roadkill,导出为 Geometry 而不是 BufferedGeometry 是可行的。
另请注意,加载 JSON 模型加载是异步处理的(仅在操作完成时才调用回调,其余代码保持 运行)。该模型在第一帧或第二帧不存在,因此在动画循环中对其进行任何操作之前检查您的模型是否存在。