Three.js: ユーザー定義のクリップ平面

作成日 2011年10月13日  ·  5コメント  ·  ソース: mrdoob/three.js

ユーザー定義のクリッピングプレーンを使用したいのですが。
openGLでは私は使用します:

glClipPlane(GL_CLIP_PLANE0, planeEq);
glEnable(GL_CLIP_PLANE0);

どうすればwebGLで同じことができますか?

Question

最も参考になるコメント

どうもありがとう!

あなたの提案は私に問題を再考させました、そして私は「一般的な」遅れがなく、近くのクリップ面が変わるときだけちらつくことに気づきました(ミラーリングされたカメラ位置と比較したミラー位置)。

つまり、 @ WestLangleyはほぼそこにあり

結果:「ラグ」はもうありません: http

たぶん、これをそれ自身のオブジェクトに抽象化することができます。

はい、私はそれについて考えました。 すべてを処理するnew THREE.mirror()と便利です。 何かをコーディングしてみます...

全てのコメント5件

renderer.context WebGLコンテキストを取得できるはずです。
そこからそれはあなたとWebGL仕様次第です:)

私は最近、反射する平らな面(別名「ミラー」:smile :)をthree.jsに実装しているときに同じ問題に遭遇しました
私の知る限り、WebGLでユーザー定義のクリッピングプレーンを作成することはできません。少なくとも、説明した「単純な」openGLの方法ではできません。
秘訣は、この論文で説明されている「斜位錐台」法を使用することです: http ://www.terathon.com/lengyel/Lengyel-Oblique.pdf
この方法の目的は、ミラーリングされたカメラ錐台のクリップに近い平面を、反射面によって定義された平面に置き換えることです。
いくつかのソースコードも提供されています(C ++でも): http

私はそのメソッドをthree.jsに正常に移植しました。これは、このライブを表示するためのサンプルシーンです: http ://jsfiddle.net/slayvin/PT32b/

残っている唯一の問題は、renderTargetがフレームの後ろにレンダリングされることであり、その理由がわかりません。 これにより、カメラの動きが速すぎる場合や、ミラーが他のオブジェクトを通過している場合に、ちらつきが発生します。

これを修正する方法について何かアイデアはありますか? 一種のマルチバッファリングメソッドを実装する必要がありますか、それとも錐台を変更した後にカメラマトリックスを更新しないという理由だけですか? もしそうなら、どうすればそれを行うことができますか?

うーん... scene.autoUpdatefalsescene.updateMatrixWorld()を手動で呼び出して、すべてのレンダラーが同じものを持っていることを確認しようとしましたが、何も解決されていないようです...そこからローテーションを抽出する前にmirror.updateMatrix()呼び出さないでください...

でもかなりかっこいい! たぶん、これをそれ自身のオブジェクトに抽象化することができます。

甘い。

また、関連するマトリックスが最新であることを確認してみました。 ラグが気になる場合は、使用する前に更新する必要があります。 残念ながら、すばやくズームしても問題はないようです...

mirror.updateMatrixWorld();

camera.updateMatrixWorld();

camera.matrixWorldInverse.getInverse( camera.matrixWorld );

どうもありがとう!

あなたの提案は私に問題を再考させました、そして私は「一般的な」遅れがなく、近くのクリップ面が変わるときだけちらつくことに気づきました(ミラーリングされたカメラ位置と比較したミラー位置)。

つまり、 @ WestLangleyはほぼそこにあり

結果:「ラグ」はもうありません: http

たぶん、これをそれ自身のオブジェクトに抽象化することができます。

はい、私はそれについて考えました。 すべてを処理するnew THREE.mirror()と便利です。 何かをコーディングしてみます...

このページは役に立ちましたか?
0 / 5 - 0 評価