簡體   English   中英

OpenGL中矩陣乘法的順序

[英]Order of matrix multiplications in OpenGL

glDisable(GL_DEPTH_TEST);
glViewport(0/*left*/, 0/*botton*/, 200/*width*/, 200/*height*/); //T4   
glMatrixMode(GL_PROJECTION);    
glLoadIdentity();   
gluPerspective(90 /*fov*/, 1/*aspect*/, 1/*fp*/, 1000/*bp*/); //T3
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity();     
gluLookAt(0/*eyex*/,0/*eyey*/,0/*eyez*/, 0/*lax*/,0/*lay*/,-1/*laz*/, 0/*upx*/,1/*upy*/,0/*upz*/); //T2
glTranslatef(-15.0, -10.0, -49.0); //T1
glBegin(GL_POINTS);
glVertex4f(0, 0, -1, 1);
glEnd();

鑒於此代碼,矩陣乘法的順序是什么? 我必須知道如何跟蹤並驗證紙上的計算?

我懷疑要遵循順序,但還沒有找到驗證它的方法:v = [0,0,-1,1]

T4 * T3 * T2 * T1 * v

這個對嗎?

這大多是正確的,但glViewport (...)本身並沒有定義矩陣。 這是一個簡單的偏差和縮放操作。 它定義了X和Y中的總寬度,高度和偏移量。還有另一個缺少的組件,即深度范圍。

乘法按順序發生,但由於這些是列主矩陣並后乘,所以從概念上說,從右邊開始,然后向左行進。 T4因為它本身不是一個矩陣,所有這一切的最終結果是一個剪輯空間頂點坐標。 您仍需要將v.xyz除以vw ,然后執行視口轉換以完全復制GL所執行的操作。

可以使用矩陣實現視口變換,但您還需要考慮glDepthRange (...) ,它將Z坐標從NDC空間偏移並縮放到窗口空間。

這就是這樣一個矩陣的樣子:

行主視口矩陣

4.1坐標轉換下,這里將更詳細地討論整個過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM