クリッピング時に頂点を補間する方法は?

Aug 16 2020

均一なクリップ空間でクリップする場合、エッジとクリップ平面の交点にある新しい頂点を生成する必要があります。したがって、補間する必要があります$(x , y, z , w)$新しい頂点位置を生成するための両方の頂点の位置。すべてうまくいっているように見えますが、補間後に生成された頂点のawが0の場合はどうすればよいですか?

w-divideはポイントを無限大(ゼロ除算)にするため、機能しません。

では、awが0の頂点を生成しないようにする必要がありますか(どのように?)?それとも、null wを処理する必要がありますか(どのように?)?

この状況は決して起こらないと言うかもしれませんが、実際には起こります。特に、たとえばスカイボックスの場合、頂点のzがwに設定されている場合はそうです。この場合、ニアプレーン(クリップスペースでz = 0)に対してクリップし、位置を補間すると、azは0になりますが、awも0になります。

回答

2 NathanReed Aug 30 2020 at 07:12

カメラの前のポイントには $w > 0$厳密には、定義上。クリッピングがあなたにポイントを与えているなら、私は言うでしょう$w = 0$ その後、何かがうまくいかない。

左/右/上/下のクリップ面を考えてみましょう。三角形が目に見える錐台の一部からにまたがることができる方法はありません$w = 0$ カメラ面またはその背後。錐台の側面の1つ、または正の距離にある近くの面の外側も交差しません。 $w_\text{near} > 0$

あなたはスカイボックスと設定について言及しました $z = w$頂点シェーダー出力で。このような形状は、錐台の側面に到達する前に、錐台の側面を横切る必要があります。(スカイボックスの一部をカメラに十分に近づけて、近くの平面だけでクリップできるようにするにはどうすればよいですか?)すべての錐台平面に対して正しくクリップしている場合は、次のようになります。$w > 0$ 最後の頂点で。