Import 3.js出口商';导出对象';不使用jsonLoader(r58)
我正在尝试将我从3DWarehouse获得的一个文件加载到three.js中。我无法让Collada加载程序工作,因此我将其导入到THREEJS编辑器中,并使用“导出对象”功能将其导出。当我使用以下代码将对象加载到我的应用程序中时:Import 3.js出口商';导出对象';不使用jsonLoader(r58),import,three.js,webgl,collada,Import,Three.js,Webgl,Collada,我正在尝试将我从3DWarehouse获得的一个文件加载到three.js中。我无法让Collada加载程序工作,因此我将其导入到THREEJS编辑器中,并使用“导出对象”功能将其导出。当我使用以下代码将对象加载到我的应用程序中时: var kiss = new THREE.Object3D(), loader = new THREE.JSONLoader(true); loader.load("model/kiss/kiss.js", function (geometry, meshKiss)
var kiss = new THREE.Object3D(), loader = new THREE.JSONLoader(true);
loader.load("model/kiss/kiss.js", function (geometry, meshKiss) {
meshKiss = new THREE.Mesh(geometry, new THREE.MeshPhongMaterial());
kiss.addChild(meshKiss);
});
scene.add(kiss);
我得到了一个错误:
Uncaught TypeError: Cannot read property 'length' of undefined
这是指THREE.JSONLoader.prototype.parse中的一行,其中它询问第一个参数的UV长度
对象文件“几何体”没有UV(它有顶点、法线和面):
在将旧的JSON格式文件导入THREEJS导出器时,我也发现了这个问题(我测试了Ginger模型)
我的过程有效吗?如果有效,为什么json对象没有导入到THREE.JS中?这似乎正在开发中。作为一种解决方法,您只能从编辑器导出几何体,因此JSON如下所示:
{
"metadata": {
"version": 4,
"type": "geometry",
"generator": "GeometryExporter"
},
"vertices": [ ... ]
"normals": [ ... ]
"uvs": [[]],
"faces": [ ... ]
}
然后这样做:
loader.load( "Kiss2.js", function ( geometry, materials ) {
var mesh = new THREE.Mesh( geometry, new THREE.MeshPhongMaterial( { color: 0xff0000, ambient: 0xff0000 } ) );
scene.add( mesh );
});
改为使用三个.js.r.58用户对象加载器。
您将得到一个网格数组作为响应
var loader = new THREE.ObjectLoader;
loader.load('http://localhost/threetest/assets/weaponThree.js', createScene);
var material = null;
var mesh = null;
function createScene( json ) {
material = new THREE.MeshLambertMaterial( json.material );
mesh = new THREE.Mesh( json.geometry, material );
//scene.add( json[0] );
scene.add( mesh );
}
谢谢@WestLangley,这是一个成功的解决方法。注意:对于使用此解决方案的其他人,对象文件中包含的大多数其他数据都可以轻松手动导入。
var loader = new THREE.ObjectLoader;
loader.load('http://localhost/threetest/assets/weaponThree.js', createScene);
var material = null;
var mesh = null;
function createScene( json ) {
material = new THREE.MeshLambertMaterial( json.material );
mesh = new THREE.Mesh( json.geometry, material );
//scene.add( json[0] );
scene.add( mesh );
}