2016-10-06 13 views
0

にTHREE.LineBasicMaterialを置くために、私はAFRAMEでLineBasicMaterialを置くことに取り組んでいますが、いくつかの問題につまずいています:AFRAME:どのようにAFRAME

1.変数は、何らかの形でスキーマに注入され、エラー

ずに取り出すことができません

私はボックスがあります。

<a-box material="shader: linebasic;"></a-box> 

をし、カスタムシェーダ登録している:

AFRAME.registerShader('linebasic', { 
    schema: { 
     blending:  {default: THREE.NormalBlending}, 
     color:   {type: 'color', default: 0xffffff, is: 'uniform'}, 
     depthTest:  {default: true}, 
     depthFunc:  {default: THREE.LessEqualDepth}, 
     depthWrite:  {default: true}, 
     fog:   {default: false}, 
     linewidth:  {default: 10}, 
     linecap:  {default: 'round'}, 
     linejoin:  {default: 'round'}, 
     needsUpdate: {default: true}, 
     opacity:  {default: 1}, 
     side:   {default: THREE.FrontSide}, 
     transparent: {default: true}, 
     vertexColors: {default: THREE.NoColors}, 
     visible:  {default: true} 
    }, 
    init: function (data) { 
     console.log(data); 
     delete data.flatShading; 
     this.material = new THREE.LineBasicMaterial(data); 
     this.update(data); 
    }, 
    update: function (data) { 
     this.material.clone(data); 
    } 
}); 

どうやらdata.flatシェーディングは、オブジェクトとシェーダがそれを持っていなくても設定されています。だから私はdelete data.flatShadingです。

データにもある別のプロパティはshaderです。

コンポーネント::材質:エラー不明なシェーダスキーマ未定義+ 0msと

私はそれを残している場合、私は通知メッセージが表示されます:

私はそれを削除した場合、コンソールは私にこのエラーメッセージを表示します

THREE.LineBasicMaterial: 'shader'はこの資料の所有物ではありません。

いずれにしても明らかに間違っています。 #1の

UPDATE:

@ngokevinよう修正#1以下の投稿:

私はTHREEを使っているにもかかわらずLineBasicMaterialは、白色の固体ブロック

として示し

AFRAME.registerShader('linebasic', { 
    schema: { 
     blending:  {default: THREE.NormalBlending}, 
     color:   {type: 'color', default: 0xffffff, is: 'uniform'}, 
     depthTest:  {default: true}, 
     depthFunc:  {default: THREE.LessEqualDepth}, 
     depthWrite:  {default: true}, 
     fog:   {default: false}, 
     linewidth:  {default: 10}, 
     linecap:  {default: 'round'}, 
     linejoin:  {default: 'round'}, 
     needsUpdate: {default: true}, 
     opacity:  {default: 1}, 
     side:   {default: THREE.FrontSide}, 
     transparent: {default: true}, 
     vertexColors: {default: THREE.NoColors}, 
     visible:  {default: true} 
    }, 
    init: function (data) { 
     data = AFRAME.utils.extend({}, data); 
     delete data.flatShading; 
     delete data.shader; 
     this.material = new THREE.LineBasicMaterial(data); 
     this.update(data); 
    }, 
    update: function (data) { 
     this.material.clone(data); 
    } 
}); 

2 .LineBasicMaterialをとすると、そのプロパティのすべてがであり、THREE.Materialの多くのプロパティは、線として表示されず、ソリッドブロックとして表示されます。

MaterialとLineBasicMaterialには 'wireframe'がありません。このため、Wireframeを追加してLineBasicMaterialをハッキングするだけでは、この作業を行う方法がわかりません。

ナンバー2は、今、私にとって最も重要ですが、私はまた、私はそれらが関連していると思います。1.修正したいと思い、そのことが現在通過しているので、私は、#1のために一つの質問

+0

ワイヤフレームを追加できますか? – ngokevin

+0

'three.js:20406THREE.LineBasicMaterial: 'wireframe'はこのマテリアルのプロパティではありません。 ' LineBasicMaterialはワイヤフレームを使用していませんが、ワイヤフレームシェーダです。 – xaddict

+0

あなたの線幅は10ですが、それはかなり厚いですか? – ngokevin

答えて

1

に入れdataオブジェクトに直接アクセスする場合は、オブジェクトを削除しないでください。オブジェクトを複製してから削除してください。ファンクションとして受け取るのではなく、単にthis.dataを実行するというファイルに関する問題があります。

data = AFRAME.utils.extend({}, data); 
+0

それは#1を修正しました。コードを更新します。 #2はまだ動作していません。 – xaddict

関連する問題