Javascript 在Three.js中使用带有JSONLoader的.getObjectById()访问多个OBJ
是否可以区分从blender导出的一个.js文件中的网格,并使用Three.js分别为其设置动画 我要选择的多维数据集名为“cube”,并正确加载。但是,当我试图通过名称或Id获取它时,它无法识别var item1Javascript 在Three.js中使用带有JSONLoader的.getObjectById()访问多个OBJ,javascript,json,three.js,blender,loader,Javascript,Json,Three.js,Blender,Loader,是否可以区分从blender导出的一个.js文件中的网格,并使用Three.js分别为其设置动画 我要选择的多维数据集名为“cube”,并正确加载。但是,当我试图通过名称或Id获取它时,它无法识别var item1 loader = new THREE.JSONLoader(); loader.load('engine.js', function (geometry, materials) { var mesh, material; material = new THREE.Mesh
loader = new THREE.JSONLoader();
loader.load('engine.js', function (geometry, materials) {
var mesh, material;
material = new THREE.MeshFaceMaterial(materials);
mesh = new THREE.Mesh(geometry, material);
mesh.scale.set(1, 1, 1);
var item1 = scene.getObjectByName("Cube");
item1.position.x = 15;
scene.add(mesh);
});
我找到了这篇文章,但似乎没有解决:
通过JSONLoader加载多个网格的最佳方法是什么?我更喜欢将它们作为一个.js文件加载在一起,只需选择我想要设置动画的那些文件
谢谢你的帮助 在blender场景中,您需要在three.js中分别命名要访问的每个网格。然后可以使用Object3D.getObjectByName()访问three.js中的网格 是的,可以从Blender导出的json文件加载包含多个网格的整个场景强> 您可以在的上看到所描述的完整过程 因此,可以使用
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");
mask.scale.set(0.9, 0.9, 0.9);
scene.add(surface);
scene.add(outline);
scene.add(mask);
} );
在上面的代码中,我们确实可以独立设置曲面、轮廓和遮罩网格的动画。感谢您的回复。我偶然发现了一些关于使用SceneLoader()的博客。加载多组网格是否更好?两种方法的优缺点是什么?再次感谢您的时间和努力!所以要说清楚,因为我是javascript新手。您是否建议我访问blender中名为“item1”的网格,并使用以下代码移动它Object3D.getObjectByName(“item1”).position.x=50;不幸的是,这不起作用。
Object3D.getObjectByName()
是函数的签名。您可以像在代码中一样使用它(只要您的对象带有来自blender的名称)。