三維觀察與座標變換
三維景物視圖的計算機生成過程類似於用相機對物體的拍照過程。我們需要對相機定位,並決定鏡頭的方向。按下快門時,相當於用鏡頭作爲窗口對景物進行裁剪。
在計算機圖形學中,我們可以在世界座標系中通過建立觀察座標系來實現對三維物體的觀察。(見下圖1)
一,建立觀察座標系,將世界座標系中三維物體的座標轉化爲觀察座標。
二,在觀察座標系中建立觀察平面,將觀察座標再投影到觀察平面上。
圖1 世界座標系與觀察座標系
圖2 Window GDI 下座標系
圖3 OpenGL 下標準設備座標系
圖 4 透視投影的有限觀察空間
假設我們想要實現用鼠標左鍵點擊畫點:
在窗口中按下鼠標左鍵,發出WM_LButtonDown消息,void OnLButtonDown(UINT nFlags, CPoint point)函數處理該消息,其中point是相對於圖2中座標系,要想在屏幕中正確的顯示,必須將該點座標值轉化成OpenGL下標準的設備座標。
第一步,將GDI下座標轉化爲觀察座標下座標值。假設建立的是透視投影觀察座標系
::gluPerspective(90.0f, aspect_ratio, .01f, 100.0f);
X_ratio = point.x / CX;
Y_ratio = point.y / CY;
h代表該點在觀察座標系中z軸的大小,也即深度信息。
用h和視角可以求出該點所在截面的長和寬。
根據X_ratio和Y_ratio求出該點在截面中的座標值
第二步,由OpenGL本身將截面中座標投影到標準設備座標。