从 A-Frame 或 JS 更新 Collada (.dae) 文件代码

Posted

技术标签:

【中文标题】从 A-Frame 或 JS 更新 Collada (.dae) 文件代码【英文标题】:Update Collada (.dae ) file code from A-Frame or JS 【发布时间】:2017-03-27 21:08:07 【问题描述】:

我在 A-Frame 中加载 collada (.dae) 文件。它的加载很好。但现在我必须从用户输入(如颜色等)更新该文件。如何从 html、js 或 A-Frame 更新 .dae 文件中的代码

这是加载的 A 帧代码:

<a-scene>
   <a-assets>
        <a-asset-item id="box" src="box.dae"></a-asset-item>
   </a-assets>
   <a-entity id="collada" collada-model="#box"></a-entity>
       <a-entity id="cmr" position="0 1 5" rotation="0 0 0">
         <a-camera> 
           <a-cursor color="#2E3A87" >
         </a-camera>
       </a-entity> 
</a-scene>

那么我如何从用户端更新 .dae 文件中的代码,使用 html、js、A-Frame 或任何方式?

这是 Collada 文件:box.dae

【问题讨论】:

【参考方案1】:

A-Frame 的内置组件仅支持非常基本的覆盖(您可能可以使用例如material="color: red" 设置模型的颜色,我不确定)。对于更高级的内容,您将需要使用 A-Frame 本身使用的三个.js API。我建议查看 THREE.js 文档——有很多关于如何自定义 Material 和 Geometry 实例的细节——但这里有一个非常基本的示例:

 AFRAME.registerComponent('model-overrider', 
   init: function() 
     this.el.addEventListener('model-loaded', function(e) 
       var model = e.detail.model;
       model.traverse(function(o) 
         if (o instanceof THREE.Mesh) 
           // modify o.material or o.geometry here.
         
       );
     );
   
 );

用法:

<a-entity collada-model="..." model-overrider> </a-entity>

THREE.Material 的文档:Material

对于更复杂的示例,使单个顶点变形,请参阅&lt;a-ocean/&gt;


当然,如果您想进行任何认真的手动编辑,您将需要使用 Blender、Maya 或其他 3D 建模程序。 :)

【讨论】:

我们可以更改 .dae 文件组件,例如颜色。这是 dae 文件中的代码。 &lt;diffuse&gt; &lt;color sid="diffuse"&gt;0 0.64 0.64 1&lt;/color&gt; &lt;/diffuse&gt; 。那么我们可以使用这段代码来更改或更新这段代码吗? @Sunilgauswami 是的,如上代码所示可以得到o.material,然后设置o.material.color。示例:***.com/questions/12564156/… 如果我们想改变 dae 模型的一些其他属性,比如头发颜色、衣服、体型、体重等,那么我们应该怎么做。 dae 文件的所有属性。这是 dae 文件:body.dae. 我们必须使用 A-Frame 做类似 Link 的事情。我们将如何使用 A-Frame 来做到这一点? 您将使用上面显示的traverse() 方法遍历模型的所有部分,并检查o.name 以查看它是哪个部分。然后,您可以使用 THREE.js API 来更改颜色、比例等。这将涉及大量的 THREE.js 代码,因此我无法在 Stack Overflow 中为您编写。 IMO,在您的位置上,我可能更愿意在 Blender 中进行这些自定义,除非您 100% 必须在浏览器中实时编辑模型。

以上是关于从 A-Frame 或 JS 更新 Collada (.dae) 文件代码的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Three.js 和 Collada Loader 更新 .dae 文件中模型的特定部分

如何在 aframe-v1.1.0.min 中使用 collada 模型

三个 js - 你可以克隆从 collada 文件加载的动画吗?

如何将 collada 对象加载到 three.js?

Three.js - 从文件输入加载 Collada 文件(和纹理)

Angle Threejs Collada