2017-03-24 10 views
0

世界でスライス面が与えられていれば、平面のプラス側にある場合は三角形を表示し、プレーンと交差する場合はプラス平面上の部分も分割します。メッシュジオメトリをスライスしないで断面をレンダリングする方法は?

飛行機が変更されるたびに三角形メッシュをスライスすると、三角形がたくさんある場合は非常に遅くなり、テクスチャ座標も再生成されます。

カメラ(ビュー)と投影を慎重に設定すると、同様の結果が生成されることがありますが、この結果はビューに依存します。

GPUのクリッピング結果を利用してビューに依存しない横断面をレンダリングできるレンダリング技術はありますか?このような

断面:img

答えて

0

使用してシェーダがこれは本当に簡単です。 Opengl/GLSLでは、フラグメントがプレーンの正しい側にあるかどうかを判断し、そうでなければdiscard()である場合、ifステートメントをフラグメントシェーダに追加するだけです。

これは輪郭を取得するようにあなたの状態であなたのオブジェクトをカットします。しかし、2番目のパスで、またはステンシルバッファを使用して深度バッファから何らかの形で塗りつぶしを処理する必要がありますが、どちらも画面全体をカバーする単一のGL_QUADです。

これを行う数学は、半分の空間を定義する必要があります。私が考えることができる最も簡単なものである:もし

dot_product(p-p0,n0) >= 0.0 
ので、任意の断片 p=(x,y,z)が表示されている側

を見た病棟を指し切断面の法線 -


p0=(x0,y0,z0) - 平面
n0=(nx,ny,nz)切削に属する3D点

ので

if (nx*(x-x0)+ny*(y-y0)+nz*(z-z0)<0.0f) discard(); 

GL_CULL_FACEを無効にし、両面マシェル/ライティングを使用することを忘れないでください。また、すべての座標は同じ座標系になければなりません!

+0

これは非常にシンプルでエレガントなアイデアです。私はそれをテストするつもりです、ありがとう。私はGPUシェーダーについていくつかのスキルを開発する必要があると思う。 –

関連する問題