从Blender在Three.js中加载多个对象

从Blender在Three.js中加载多个对象,three.js,blender,mesh,Three.js,Blender,Mesh,我有一个非常复杂的形状(dressed girl),在Blender中被分解成不同的对象,它通过JSON加载程序加载到Three.js中(我做了一点小改动,使用压缩文件而不仅仅是JSON文件,因为有很多顶点) 由于我想在网页上动态更改裙子的样式,我想知道如何在场景中显示/隐藏不同的片段(例如袖子) 我尝试遍历THREE.Mesh,但没有子对象 当我使用JSON导出器从Blender导出时,我看不到任何引用JSON中对象名称的内容。结构丢失了吗?如果您使用的网格包含很多顶点,我建议您使用openC

我有一个非常复杂的形状(dressed girl),在Blender中被分解成不同的对象,它通过JSON加载程序加载到Three.js中(我做了一点小改动,使用压缩文件而不仅仅是JSON文件,因为有很多顶点)

由于我想在网页上动态更改裙子的样式,我想知道如何在场景中显示/隐藏不同的片段(例如袖子)

我尝试遍历
THREE.Mesh
,但没有子对象


当我使用JSON导出器从Blender导出时,我看不到任何引用JSON中对象名称的内容。结构丢失了吗?

如果您使用的网格包含很多顶点,我建议您使用openCTM webGL加载程序,而不是zip黑客。下面是加载程序的链接:
此网格压缩工具使用LZMA压缩方法,可将文件大小减少93%

关于JSONLoader,使用数组可能会有所帮助:

var meshes = [];
...
var loader = new THREE.JSONLoader();
var onGeometry = function(geom)
{
    var mesh = new THREE.SceneUtils.createMultiMaterialObject(geom, [material]);
    meshes.push( mesh );
    ...
    scene.add(mesh);
};

loader.load("yourfile.js", onGeometry);

希望这有助于

可以从Blender导出的json文件加载包含多个网格的整个场景,并分别处理它们

您可以遵循从Blender导出整个场景的完整过程,以及在my上正确处理导出网格的方法

因此,您可以使用
getObjectByName
方法获取不同的网格并分别操作它们。但重要的是要知道加载的对象不再是几何体。它现在已标记为场景类型,必须以不同的方式处理

加载代码必须如下所示:

    loader = new THREE.JSONLoader();
    loader.load( "obj/Books.json", function ( loadedObj ) {
        var surface = loadedObj.getObjectByName("Surface");
        var outline = loadedObj.getObjectByName("Outline");
        var mask = loadedObj.getObjectByName("Mask");
        scene.add(surface);
        scene.add(outline);
        scene.add(mask);
    } );
此外,您可以使用
THREE.MeshFaceMaterial
处理单个网格的多个材质,如下代码所示:

var mat1 = new THREE.MeshLambertMaterial( { map: texture1 } );
var mat2 = new THREE.MeshLambertMaterial( { map: texture2 } );
var materials = [mat1, mat2];
var faceMat = new THREE.MeshFaceMaterial(materials);
mesh = new THREE.Mesh( geometry, faceMat );
scene.add( mesh );

希望这有帮助:)

嘿,谢谢,但是我试着理解如何从一个文件加载所有对象,就像它们在Blender中一样。我必须加载的对象数量将1)在我的代码中造成混乱,2)在加载时有更大的开销。是的,我已经这样做了。最后我按照你的建议做了,我改变了我的工作流程,减少了网格。以及使用OpenCTM。谢谢很高兴听到这个消息。祝你的项目好运。我认为这并不能真正回答问题。如果
yourfile.js
包含多个网格怎么办?当加载包含多个网格的导出了“场景”的json文件时,这个数组肯定不起作用@r72。我看到了这个问题,并注意到您让openctm使用Blender。我想知道你能否回答我的问题:。在我看来,openctm脚本不适用于Blender 2.7。类似的问题,有一个model.js,加载后无法分离网格…例如,我在一个文件中有5个对象,但无法单独访问它们:myobject.children“item1”似乎无法解决