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