如何将多个Blender JSON模型合并为一个Three.js Object3D对象?据我所知,谷歌没有希望。
如果将它们合并到搅拌机侧,然后导出为整个对象会怎样?
在 Three 中.js您可以合并几何体,如果它们相同,也可以合并材质,但如果您没有相同的几何体并且具有多种材质,那么您就不走运了......
我正在努力解决同样的确切问题,到目前为止,我没有在 Three.js 本身中找到任何解决方案,所以试图在 Blender 方面做到这一点。另一方面,对这个引擎端进行硬编码可能比使用Blender更容易。这是一个很难理解的软件^^
有理由需要导出的 JSON 对象最终出现在一个 Three.js Object3D 中?用一个父对象控制两个对象就足够了吗?
您可以将对象作为子对象添加到空的父对象,然后对其进行控制。此要点演示了该过程。
var parent = new THREE.Object3D();
parent.add(blenderObj1);
parent.add(blenderObj2);
parent.scale.set(1,2,0.5);
编辑
这是一个场景,演示了您在评论中提到的内容。尝试更改每边的框数(您将获得侧面^2个框)并切换父项。
快速旁注:截至 4 年 25 月 16 日,Chrome 中存在一个错误,可能会导致纹理竞争条件。如果框看起来很有趣,重新加载页面会有所帮助。
为了解决您的问题:
父对象必须允许用户在父对象中添加和删除对象,
Object3D 有 .add() 和 .remove() 来做到这一点。
.add ( object, ... )
.remove ( object, ... )
,并且父项必须能够作为一个整体进行轮换。
这正是育儿的运作方式。只需执行以下操作:
parent.rotation.x = Math.PI / 2;
所有的孩子都与父母轮换。请注意,它们旋转就像世界旋转一样(因为对它们来说,确实如此)。他们的个人转变是原封不动的。
不将子项合并为单个父项将创建锯齿状动画。
不是固有的。假设您不打算减少绘制调用(下文将详细介绍),使用父对象不会显着影响帧速率。我在旧Macbook Air上的快速测试可以渲染10k个对象而不会发生任何崩溃,即使它开始变热。无论您做什么,10k 对象的性能都会受到影响。
将所有几何图形放在一起将减少绘制调用并加快速度。请记住,所有几何体相对于其他对象都是完全静态的。因此,假设您不能采用 Scharnvirk 建议的明显、优雅且简单得多的解决方案(在 Blender 中制作合并的对象并将其视为单个对象),您可以通过动态克隆几何体来节省少量带宽。在这种情况下,三.js几何有一个 merge() 函数
.merge ( geometry, matrix, materialIndexOffset )
Merge two geometries or geometry and geometry from object (using object's transform)