2013-08-19 21 views
1

在閱讀從UCMerced的TRIPATH工具​​包的一些代碼,我在這些如何從手動矩陣運算推斷平移,剪切等?

float xmin, xmax, ymin, ymax; 
float mat[16] = { 1, 0, 0, 0, 
    0, 1, 0, 0, 
    0, 0, 1, 0, 
    0, 0, 0, 1 }; 
TheLct->get_bounds (xmin, xmax, ymin, ymax); 
glMatrixMode (GL_MODELVIEW); 
glLoadIdentity(); 

float width = xmax-xmin; 
float height = ymax-ymin; 
mat[0]=mat[5]=mat[10]= 1.8f * (1/(width > height ? width : height)); 
glMultMatrixf (mat); 
mat[0]=mat[5]=mat[10]= 1; 

mat[12]=-(xmin+w/2); 
mat[13]=-(ymin+h/2); 
glMultMatrixf (mat); 

排在第一的改造,在基體中的前三個角1的是乘以因子。從我對身份矩陣有限的認識來看,這似乎是按比例縮放的。

第二個轉變,但是,我真的不明白:

所有的
mat[12]=-(xmin+w/2); 
mat[13]=-(ymin+h/2); 
glMultMatrixf (mat); 

首先,我不知道這是什麼意思,甚至改變指數1213在這樣一個矩陣。我試圖通過讀取變換的維基百科頁面弄明白,但我想我沒有足夠的數學相關的領域知識,以它的意義。

儘管OpenGL的資源,我可以找到真的不顯得修改矩陣以這種方式,而他們使用的功能,如glScaleF

如何可以涉及手動矩陣變換如上述縮放,剪切,平移,旋轉等?

回答

3

第一矩陣,你猜對了,是一個統一的比例矩陣。第二個矩陣只是一個平移(沿x和y軸)。請注意,GL 的(固定功能矩陣堆棧)使用列主存儲器佈局,其中轉換部分總是處於m[12],m[13],m[14](另請參閱answer 9.005 in the old GL FAQ)。將合併的轉換不是透視投影(這將需要(m[3], m[7], m[11])不是空載體),但是正交一個。

爲便於解釋如何對這些數字進行幾何解釋,您可能會發現this article有用。