Natanの適切なコメントに答えるために、Affine Spaceでベクターを使用して標準ユークリッド空間で3Dベクターを表す場合に実際に何が起こるかを理解するのに役立ついくつかの考慮を行いました。
最初に、座標を持つものは何でもvectorを呼び出すので、ポイントとベクトルは同じエンティティです。ベクトルは2点の差として見ることができます:V = B - A ; A + V = A + B - A = Bであるため、VはAをBに移動し
ます。入れてA = 0(原点)と、あなたはそれが得るV = B - 0 = B:ポイントBとベクトル移動していること0Bは同じものです。
アフィン空間のベクトルがw = 0である場合、大部分の3Dライブラリで使用される意味で「ベクトル」を呼び出します。
行列は、線形関数をコンパクト/エレガント/効率的な形式で表すことができるために使用されますが、線形関数には、原点を変換できない大きな欠点があります:F が線形になりたい場合はF (0)= 0 amog他のもの、例えばF(λ X)=λF(X)とF(A + B)= F(A)+ F(B))
これは、0ベクトルを移動することはないため、変換を行う行列を構築できないことを意味します。ここに登場するのがアフィンスペースです。アフィン空間は、ユークリッド空間に次元を追加するため、スケーリングと回転で移動を行うことができます。
Affine Spaceは、AffineとEuclideanのベクトルの間に同値関係を構築できるという意味で射影空間であるため、それらを混同することができます(ポインとベクトルで行ったように)。同じ方向で原点に投影されるすべてのアフィンベクトルは、同じユークリッドベクトルとして見ることができます。
これは、座標内で同じ比率を持つすべてのベクトルを同等と見なせることを意味します。
数学的に:
つまり、すべてのアフィンベクトルは、w = 1のキヤノンバージョンに減らすことができます(すべての同等のベクトルの中から、最適なベクトルを選択します)。
視覚的に(2Dユークリッド-3Dアフィン):
したがって、「投影」空間の平均。ここで、ユークリッド空間は2D(シアン領域)であることに注意してください。
(ハイパー)平面w = 0にある正規バージョンに(簡単に)配置できないアフィンベクトルの特定のセットがあります。
視覚的に表示できます。
w-> 0のとき、ユークリッド空間への射影ベクトルは無限になりますが、特定の方向では無限になります。
射影空間に2つのベクトルを加算すると、和ベクトルをユークリッド空間の射影ベクトルと見なすと問題が発生することが明らかです。これは、アフィン空間のWコンポーネントを合計してから、ユークリッド(ハイパー)平面。
これは、「ベクトル」が「ポイント」のw座標を変更しないため、「ポイント」のみを「ベクトル」に加算できる理由です。これは、w = 1の「ポイント」にのみ当てはまります。
ご覧のとおり、緑色の点はシアンの「点」とVの「ベクトル」を表す2つのアフィンベクトルを加算したものですが、キヤノン1とは異なる形式ですべてのアフィンベクトルにVを適用すると、間違った結果(赤い「 "ポイント"」)。
あなたはそれを見アフィン空間を透過的に使用することはできませんユークリッド空間と上の動作を説明する「ベクター」という用語の誤用計算和の(厳格な)制約の下で意味を持っているだけでキヤノン射影ベクトル。
つまり、GPUがVector4にはw = 0 または w = 1 が必要であると想定していると考えるのは非常に合理的です。