2017-01-05 19 views
0

私は今は3つ使用していますが、過去数日間何かに固執しています。私は頻繁に更新したいシェイダーにカスタム属性を渡そうとしています。シェーダがShaderMaterialとしてメッシュに追加されます。私がそれを持っている問題は、以前のいくつかのバージョンに気付いたことです.3つは、属性を扱う方法をやり直しました。マテリアルの中にそれらを持つ代わりに、それらをジオメトリ上に配置します。私が理解できる限り、通常のジオメトリはカスタム属性を扱うことができません。私はそれが提供するすべての利便性にかなり依存していたので、悪い状況に陥ります。私はBufferGeometryを使用しようとしましたが、私はUVマップ(これは常に更新しています)を正しく読み込めなかったとき、混乱と不満に終わりました。カスタムアトリビュートが必要な場合や、あまり望ましくないが、UVを正しく適用する方法があれば、BufferGeometryアプローチの代替手段はありますか?通常のジオメトリでカスタム属性を使用できない理由はありますか?Three.js:ジオメトリのカスタム属性

答えて

0

ジオメトリをバッファジオメトリに変換し、カスタム属性を設定して、両方の世界のベストを維持します。これは、あなたが求めているように、バッファーメーターのuvを扱う手間を省くでしょう。 uvsを渡す必要があります。そのよう

var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);

+0

私は実際にBufferGeometryもfromGeometry機能を持っていたことを知りませんでした。私はそれが普通のジオメトリに排他的だと思った。とにかく、私は言及するのを忘れましたが、すべてのレンダリングで私のUVをかなり更新しているので、これで十分に機能するとは思いません。 – Ellie

+0

BufferGeometryのUVもその場で更新することができます。 [これを確認する](https://jsfiddle.net/Pisha/4ud3c22u/2/) 私はBoxGeometryからキューブを作成しましたが、そこからBufferGeometryを取得しました。 animate()関数では、UVシーケンスを書き、右の頂点に適用します。 uvsを更新することを忘れないでください。助けてくれますか? – Hesha

+0

これは実装するのがかなり難しいですが、最終的には、アレイをどのようにまとめて、すべての "面"をループして適切なUVを割り当てて、合理的な結果を生み出したかを把握することができました。 – Ellie