2017-04-12 5 views
0

A-Frameに読み込まれたモデルの位置、標準、およびuv属性にアセットとしてアクセスして変更する必要があるコンポーネントを記述しています。私はデータへのアクセスに近づくことができますが、そこにはあまり行きません。使用:A-FrameコンポーネントからbufferGeometryの属性にアクセスする方法

document.querySelector('a-entity').object3D.children 

私は配列を与えているようですが、要素にアクセスしようとすると、空の子と空のジオメトリを持つオブジェクトが得られます。

私の推測では、私が間違ってドアを通って、中にデータにアクセスしようとしているということです。

console.log(document.querySelector('a-entity').object3D.children[0]); 

人口Object要素で

console.log(document.querySelector('a-entity').object3D.children); 

は私= 1、配列のサイズを示しています私には空のジオなどの要素があります。データを取得するために使用する正しい仕組みや構文は何ですか?

+0

私も 'three.js'タグを追加することを示唆しています。 –

答えて

1

ここで知る必要がある2つのthree.jsクラス:GeometryBufferGeometryがあります。前者はすでにgeometry.verticesgeometry.facesのプロパティを持っています(ドキュメントを参照)。頂点はTHREE.Vertex3オブジェクトの配列であり、使いやすくなっています。

あなたはBufferGeometryを持っている場合は、代わりにあなたは THREE.Vertex3の配列ではなく、[x1, y1, z1, x2, y2, ...]のような山車の平らな配列を含み、geometry.attributes.positionを持っています。これはより効率的ですが、手動で変更するのは難しくなります。

あなたはBufferGeometryを持っているのではなくジオメトリでうまくいくなら、あなたはどちらかの方法で変換することができます:

var geometry = Geometry.fromBufferGeometry(mesh.geometry); 
mesh.geometry = BufferGeometry.fromGeometry(geometry); 

アンA-フレームの特定のノートを、通常、あなたはel.getObject3D('mesh')を行うことにより、メッシュへの参照を取得します。場合は、ネストされたグループ、かもしれないカスタムモデルの場合:

el.object3D.traverse(function(node) { 
    if (node.geometry) { /* ... */ } 
}); 

(three.js R84)

+0

this.el.object3D.traverse(function(node){ if(node.geometry){ console.log(node.geometry); } }); はジオメトリオブジェクトを出力しますが、その中に属性データはありません –

+0

そのコメントに書式がないことは残念です。基本的に、node.geometry内のデータにアクセスしようとすると、そこにデータがないと思われます。それにアクセスするための構文がありますか? –

+0

あなたの提案はエンティティで機能しますが、OBJモデルでも同じことが言えます: 'TypeError:node.geometry.attributes.position is undefined' –

関連する問題