當進行 Direct 3D 程式設計時,我們需要先將要變換的點或向量轉為齊次座標,然後再通過矩陣來進行變換操作。那麼,怎樣將點和向量轉為齊次座標呢?
工具/原料
DirectX
一、為什麼要轉換為齊次座標
進行 Direct 3D 程式設計時,需要使用 4×4 的變換矩陣,這種矩陣可以定義所需要的各種變換。
當進行座標變換時,需要將空間中的點或 3D 向量與變換矩陣相乘。但是,空間中的點或向量都只有 x,y,z 三個座標分量,而一個 3 維的點或向量是無法與一個 4×4 的矩陣相乘的。
因此,必須將點或向量擴充套件為一個四元組。這個擴充套件後的點或向量的四元組即稱為齊次座標。
二、怎樣將點或向量轉換為齊次座標
要將點或向量轉換為齊次座標,只需要處理好新增的第四個分量即可。在這裡,我們通過將第四個分量定義為 0 或 1,來描述前面三個座標分量是向量的還是點的座標。
如果第四個分量為 0,則前面 x,y,z 三個座標分量描述的是一個向量。
如果第四個分量為 1,則前面 x,y,z 三個座標分量描述的是一個點。
通過定義,我們同時得到以下性質:
1)兩點相減的結果是一個向量(因為兩個點第四個分量都為 1,相減之後變為了 0)
2)一個點與一個向量相加的結果是一個點(點的第四個分量為 1,而向量的第四個分量為 0,1+0=1,因此相加的結果是一個點)
注意事項
點只有位置屬性,而向量只有大小和方向屬性。