如何在THREE.js中将Object3D中的网格动态添加到新对象
我是一个完全的3d编程新手,现在已经和three.js一起工作了一个多星期了。我已经设法加载了多个collada和obj文件,并设法从示例中获取透视图、轨迹球和一切有用的东西。然而,现在我陷入困境,需要一些帮助。作为参考,您可以在以下url上看到我发布的文件: 这个页面基本上是直接从示例中获得的,只是我正在加载一个obj文件,它将所有这些对象都作为网格。我现在正在做的是在加载obj之后,我将迭代对象中的所有几何体并提取它们,这样我可以在需要它们的时候一次将它们放到场景中,或者让它们像泡泡一样四处漂浮。我想用菲涅耳的例子,但这就是我遇到的理解的边界,一些术语让我不知所措 我的问题是,当这运行时,返回并在加载后添加到场景中的对象将所有这些宝石放在一起 因此,不要使用以下行:如何在THREE.js中将Object3D中的网格动态添加到新对象,three.js,Three.js,我是一个完全的3d编程新手,现在已经和three.js一起工作了一个多星期了。我已经设法加载了多个collada和obj文件,并设法从示例中获取透视图、轨迹球和一切有用的东西。然而,现在我陷入困境,需要一些帮助。作为参考,您可以在以下url上看到我发布的文件: 这个页面基本上是直接从示例中获得的,只是我正在加载一个obj文件,它将所有这些对象都作为网格。我现在正在做的是在加载obj之后,我将迭代对象中的所有几何体并提取它们,这样我可以在需要它们的时候一次将它们放到场景中,或者让它们像泡泡一样四处
var loader = new THREE.OBJMTLLoader();
loader.addEventListener( 'load', function ( event ) {
var object = event.content;
object.position.y = - 100;
scene.add( object );
});
loader.load( 'obj/gems/24.obj', 'obj/gems/24.mtl' );
所以我要做的是当对象返回时,我在调试/中断模式下查看内部,我看到它是一个object3D和object.children是一个25个网格的数组…每个网格都是我想要单独使用的“宝石”
所以这里是我迷路的地方…当我抓取“网格”时,我是否需要剥离底层几何体并创建一个新的网格
在此页面上,您可以看到我试图实现的目标:
唯一的主要区别在于本节代码:
var loader = new THREE.OBJMTLLoader();
loader.addEventListener( 'load', function ( event ) {
var object = event.content;
var pos=0;
for(var i=0; i< object.children.length; i++){
var m = object.children[i];
var gem = new THREE.Object3D();
gem.name=m.name;
gem.add(m);
gem.position.x = -10;
gem.position.y = -10;
gem.position.z = pos;
scene.add( gem );
pos = pos - 10;
}
});
loader.load( 'obj/gems/24.obj', 'obj/gems/24.mtl' );
请注意,25颗宝石中只有13颗出现在收藏品中,还要注意它们是如何分散的,这表明它们仍然以某种方式与某些高阶关系相关联,而我无法用位置正确设置这些关系,就像每个网格在加载的原始对象中以某种方式相对于其原始位置偏移……认为这与world matrix有关吗?也许这可以说明一些问题:您至少有4个问题需要解答你的文章的主体-加上标题中的一个问题。通过问一个具体的问题来创建一个对其他人有用的帖子。好吧,实际上只有两个问题,但谁算?我会更新这个问题并把它发出来…谢谢。