參考書籍-OpenGL 3D繪圖互動程式設計
將三維空間的點投影到二維空間,這中間要經過以下步驟,下面一一來介紹。
模型座標空間(Object space)
世界座標空間(World space)
鏡頭座標空間(Camera space)
正則座標空間(Canonical space)
螢幕座標空間(Screen space)
模型座標空間(Object space)
主要是用在物體的定位,假設有一個3D正方形,那他的中心點就是儲存在模型座標空間中,如果3D正方形發生形變(Deformation),就要另外花費資源去更新點的資訊。
世界座標空間(World space)
在一個空間中建立一個基準點,給物體去參照才可以知道物體的所在之處,當物體移動時只要更新世界座標即可。
鏡頭座標空間(Camera space)
世界座標空間中觀察物體,要看到物體需要把物體的世界座標空間轉換成鏡頭座標空間。
鏡頭的設置需要3個值分別是前方,上方、位置。
正則座標空間(Canonical space)
鏡頭設定後會產生一個三維的成像視錐區域(Canonical view volume)。
物體的鏡頭座標空間經過投影轉換(Projection transformation),轉換中,視錐區域的,x、y、z會被壓縮在-1~1之間,可以透過簡單的邏輯運算(查看中心點的位置)看物體是不是轉成二維之後還會不會顯示在螢幕上。
螢幕座標空間(Screen space)
平面空間的比例不一定與螢幕比例相符,還要再經過視角轉換(Viewport transformation),轉到空間與螢幕相符。
總結:
五個座標空間可以分為這兩大類:
視覽座標矩陣(Model-view matrix,GL_MODELVIEW)-處理物體的縮放(Scaling)、位移(Translation)等運算
投影矩陣(Projection matrix, GL_PROJECTION)-鏡頭投影(Projection)轉換
物體直接用這兩個矩陣直接從三維變二維