1

小さなソフトウェア レンダラーを実装して、プログラム可能なレンダリング パイプラインを学習しています。「ハードウェア」スタイルで実装しようとしています。しかし、私は GPU パイプラインに精通しておらず、均一なクリッピングの問題がいくつかありました。

このスレッドによると、4D 均一クリッピング スペースに に投影される 3D 目の座標にe02つのポイントがあるとします。次に、4D 同次空間で補間を行います。セグメントは、4D ポイントで( NDC で)平面によってクリップされます。一般性を失うことなく、ラスター化段階に供給される部分 (表示可能) があるとします。したがって、 (頂点シェーダーの出力形式と同じ)の対応する頂点プロパティを生成する必要があります。私の質問は、これらの新しい頂点のプロパティを生成する方法ですか?e1h0(-70, -70, 118, 120)h1(-32, -99, -13, -11)h0-h1w = -xz = -1h(t)=t*h1+(1-t)*h2t = 0.99h0-h(0.99)h(0.99)

更新: t を補間変数として使用して、h(t) の頂点プロパティを取得し、妥当な結果を得ようとしました。t4D 空間から 3D 頂点プロパティで良い補間結果が得られるのはなぜですか?

4

1 に答える 1

1

4D 空間の t が 3D 頂点プロパティで適切な補間結果を得ることができるのはなぜですか?

それが数学の仕組みだからです。もっと言えば、それが線形計算のしくみです。

数学に深く入り込むことなく、線形変換は、元の空間の線形の性質を保持する 2 つの空間間の変換です。たとえば、互いに平行な 2 つの線分は、線形変換後も平行のままになります。Y 方向に 2 倍のスケールを実行すると、新しい線が長くなり、原点から離れます。しかし、それらはまだ平行です。

直線 AB があり、A と B の中点である点 C を定義するとします。A、B、C に対して同じ線形変換を実行すると、新しい点 C 1依然として直線 A 上にあります。1B1._ _ それだけでなく、C 1は依然として新しい線の中点です。

これを一般化することもできます。C は、次の方程式に適合する任意の点C = (B-A)t + Aである可能性がありますt。A、B、C の線形変換はt、この式の変化に影響しません。

実際、それが線形変換の本当の意味です。それtは、元の空間のすべての点 A、B、および C について、その方程式で保持される変換です。

空間に 4 つの次元があるという事実は、最終的に上記のベクトル方程式とは無関係です。任意の空間での線形変換は保持されtます。行列変換は、(通常) ある空間から別の空間への線形変換を表します。

また、元の 3D 位置は実際には 4D 位置であり、W は 1.0 であると想定されていました。

ただし、クリップ空間 (4D 同種) から正規化されたデバイス座標空間(3D 非同種) への変換は非線形であることに注意してください。W による除算は線形変換ではありません。これが、4D の均一なクリップ空間でクリッピングを行う理由の 1 つです。ここでは、元の位置とクリップ空間の間の線形関係が維持されます。

これは、頂点ごとの出力のパースペクティブ補正補間が重要である理由でもあります。これは、ラスタライズを実行している空間 (ウィンドウ空間) が、頂点シェーダーによって出力された元の空間 (クリップ空間) の線形変換ではないためです。これは、t適切に保存されていないことを意味します。補間するときは、通常、頂点ごとの値の線形関係を維持するために、それを補正する必要があります。

于 2016-05-30T15:28:57.440 に答える