フラグメントシェーダで、オブジェクトがプレーンと交差する線を描きたい。フラグメントシェーダでオブジェクトとプレーンの交差を描画する
私は平面の式をフラグメントシェーダ(a、b、c、d)に渡し、オブジェクトとこの一様平面との交点を赤で描画したいと思います。
私は交差点の幅は関係なく、我々はズームインどのくらい常に同じになることはありませたい
今私のようにフラグメントシェーダで平面に私の物体からの距離を取得する:。
// uPlane: vec4 where values are a.b.c.d (plane equation)
// vPos: wodlPosition of the fragment
vec4 prod = uPlane*vPos;
float distance = (prod.r + prod.g + prod.g + prod.a)/length(uPlane.xyz);
if(abs(distance) < 1.) {
gl_FragColor = vec4(1., 0., 0., .5);
} else {
gl_FragColor = vec4(0., 1., 0., .5);
}
このアプローチの問題点は、ズームイン/アウトするときに交差点の「幅」が変化することです(下のスクリーンショットを参照)。
私のオブジェクトと飛行機の制服の交差点に「2px幅」の線を描くには、どの方法が最適でしょうか?あなたはあなたのビューの "ズーム倍率" /スケーリングを考慮する必要があり
解決策の1つは、断片位置を平面に投影した後、何らかの方法で投影画面座標を計算し、投影画面座標と断片画面座標を比較し、その情報を使用して線を描画します – Nicolas