0

.obj および .mtl ファイルを aframe にロードできますが、.mtl ファイルからマテリアル名を取り出してオブジェクト onclick のこれらのマテリアルを変更したかったのですが、aframe でどのように行うのですか?

 <a-entity id="model" position="0 0 -2">
                 <a-entity obj-model = "obj: #tree-obj; mtl: #tree-mtl"  position="0 0 0" rotation="0 0 0" scale="0.8 0.8 0.8"></a-entity>  
          </a-entity>

次のようにthreejsで同じことを複製できます

object.traverse( function( child ) { if ( child instanceof THREE.Mesh ) {
                            if (child.material.name == "xyz")  { //xyz from .mtl file
                                        child.material = Black;// black is a meshphong material                                                                                                       
                                        child.castShadow = true;
                                        child.receiveShadow = true;
                                    }
                        }
4

1 に答える 1

1

クリック イベントをリッスンし、同じ three.js コードを実行するコンポーネントを作成できます。

AFRAME.registerComponent('change-material-on-click', {
  schema: {
    target: {type: 'selector'}
  },

  init: function () {
    var el = this.el;  // Element to add click listener.
    var targetEl = this.data.target;  // Target to change material.

    el.addEventListener('click', function () {
      var mesh = targetEl.getObject3D('mesh');
      mesh.traverse(...);  // Do your logic here.
    });
  }
});

次に、コンポーネントをアタッチします。

<a-image change-material-on-click="target: #model"></a-image>
<a-obj-model id="model" ...></a-obj-model>
于 2016-08-08T17:20:07.297 に答える