【问题标题】:Can entities share the same material?实体可以共享相同的材料吗?
【发布时间】:2018-11-17 17:32:38
【问题描述】:

我有多个实体,我想共享相同的材料。因此,如果我对材质属性进行更改,则会在场景中使用该材质的所有实体上更新属性。

这可能吗?如果可以,怎么做?

【问题讨论】:

    标签: aframe


    【解决方案1】:

    手动创建材质并附加到网格:

    var material = new THREE.SomeMaterial();
    
    AFRAME.registerComponent('my-material', {
      this.el.getObject3D('mesh').material = material;  
    });
    
    <a-entity geometry my-material></a-entity>
    

    然后您可以随时手动操作材质,它会自动应用于所有使用它的实体/网格(例如,material.color.set(0.5, 0.5, 0.5))。

    mixin 方法也有效,但效率稍低且更抽象

    【讨论】:

    • 谢谢。我对这种方法的问题是在“my-material”上设置的属性将无法管理。有没有办法以&lt;a-asset-item&gt; 的形式做到这一点?文档暗示:“ 杂项资产,例如 3D 模型和 材料”。虽然,我确实想知道“材料”是否是“纹理”的拼写错误。
    • 您仍然可以添加纹理。 Material 组件只是为您处理它。所以就像map: new THREE.TextureLoader().load(texture)
    • 我的意思是 不支持材料;这与文档所说的相反。
    【解决方案2】:

    a-mixin 与材质组件一起使用并操作其属性。已应用它的所有实体都将更新:

    https://aframe.io/docs/0.8.0/core/mixins.html#sidebar

    【讨论】:

    • 很好,我完全错过了。您是否知道实体是否将共享相同的材质对象或实例化新材质?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2011-02-26
    • 2017-06-21
    • 2017-04-30
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多