(僅是草稿,未做整理)
2.10 座標轉換
在幀緩衝中,頂點,法線和紋理座標在用來產生一個映像的之前,將被轉換。首先,我們先描述頂點座標如何轉換及控制。
圖2.5 是頂點轉換的流程方框圖。在GL上的頂點座標,被稱為對象座標(object coordinates),然後用模型視圖應用於對象座標,從而產生眼座標(eye coordinates),再用另個矩陣,即投影矩陣應用於眼座標,從而產生剪輯座標。然後用透視分離的方法應用於剪輯座標從而產生了歸一化的裝置座標(normalized device coordinates)。最終的視點(view port)轉換應用於這些座標,從而把它們轉換成視窗座標。
對象座標,眼座標,剪輯座標都是四維的,包括x,y,z和w座標。模型視圖和投影矩陣是4x4。
圖2.5 頂點座標轉換流程
如果一個頂點的對象座標為,模型視圖矩陣為M,那麼頂點的眼座標為
同樣,如果P是投影矩陣,那麼剪輯矩陣為
歸一化裝置座標為
2.10.1控制視點
視點轉換由視點的寬高決定,寬高以像素為單位,分別為px和py,中心點為(ox,oy),也是以像素也單位。頂點的視窗座標為,如下定義
其中係數和位移量應用於zd,表示為n和f,通過以下命令進行編碼
void DepthRangef( clampf n,clampf f );
void DepthRangex( clampx n,clampx f );
每一個n和f被限制在[0,1]之間,作為clampf 和clampx 的參數。zw是一個定點數,根據幀緩衝的深度緩衝,必須有足夠的位元數。假定定點數所表示的值為,其中,(例如,1.0表示二進位所有的strings)
視點轉換的參數通過以下命令設定
void Viewport( int x,int y,sizei w,sizei h );
其中x,y表示視窗左下角座標,w和h表示視窗的寬高,視點的其他參數,可以通過以上的等式而得到,如ox=(x+w)/2,oy=(y+h)/2, px=w, py=h。
視點的寬高要根據實現無關性最大值進行截斷。最大的寬高可以從執行合適的Get命令進行擷取,見第6章節。最大的視點維度必須大於或等於要渲染的可視的維度,如果w或h為負,那麼將產生INVALID_VALUE錯誤。
實現視點轉換的條件是四個整數和兩個截斷的浮點數。在初始狀態,w和h設定為GL要渲染的視窗寬高值,ox為w/2,oy為h/2, n為0.0,f為1.0。