Import 3.js出口商';导出对象';不使用jsonLoader(r58)

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)

我正在尝试将我从3DWarehouse获得的一个文件加载到three.js中。我无法让Collada加载程序工作,因此我将其导入到THREEJS编辑器中,并使用“导出对象”功能将其导出。当我使用以下代码将对象加载到我的应用程序中时:

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


}