2017-05-27 16 views
0

3Dモデルのポイントクラウドを表すTHREE.Pointsオブジェクトがあります。 〜10,000バーツ。私は、カメラに「不可視」でない点を「隠す」ことができるようにしたいと思います(オブジェクトが正常にレンダリングされた場合には見えない頂点は点としてレンダリングすべきではありません)。メッシュのどの頂点がカメラに見えるかを調べる方法は?

カメラに「面している」バーテックスを計算するための安価な方法はありますか?

答えて

1

EDIT:(それが最初に尋ねられたとして、完全に質問を誤解)

あなたがポイントの法線を使用するか、彼らはフロントであるか、後ろ向きのかどうかを判断するために直面​​することができます。これは、通常はカメラの近くの顔によって隠される、カメラに直面する点がない限り機能します。この場合、顔のzソートのようなものが必要になります。

ORIGINAL ANSWER:あなたがそれをしたいと思う理由(参考のためにここでは左)

興味深い質問はありますか?とにかく表示されないので、なぜ明示的に非表示にするのですか?

これはGPUの固定機能パイプラインで可能な限り最速の方法で実装されています(興味がある場合は、すべての座標が標準ビューボリュームに変換されたときに頂点シェーダの後で発生するクリッピングです)。それ以上のパフォーマンスを得るためにjavascriptで行うことはできません。

視界を手動で制御したい場合は、各点で何らかのプロセスを実行し、移動しながらジオメトリを更新することを意味します。それが完了したら、再びジオメトリをGPUにアップロードする必要があります。これはもう1つのパフォーマンスヒットです。

しかし、あなたのユースケースはわかりませんが、正当な理由があります。このケースでは、ここをクリックしてください:Manual frustrum culling with three.js

+0

私は粒子から3Dモデルを構築しています。各パーティクルは、読み込まれた3Dモデルの頂点に位置します。すべての点が表示されます。私は理想的にはモデルが固体であれば見えないものを隠そうと思っています。それは文体の選択です。 – defmech

+0

申し訳ありませんが、私は完全にあなたに誤解されました。これらの点でサーフェス法線を使用できますか?その場合は、単純な前後の計算を行うことができます。 –

+1

私は計算に垂直法線を使用しました。かなりうまくいく。レイキャスティングを使ってそれらのvertでいくつかの後処理をして、私が望まない他のvertを除外します。ポインタありがとう。 – defmech

関連する問題