我正在做我自己的世界 - >凸輪變換(而不是使用gluLookAt
)。我正在關注信息here,但是Im爲最終的4x4模型視圖轉換獲得了不同的翻譯符號。DIY相機變換爲openGL
該文章說「既然我們正在往下看x軸,世界就會被相機的負位置轉換。」。然後他們翻譯了-eye
,這是我的代碼中的-camPos
。
我不認爲這是正確的,因爲opengl是右撇子,相機通常看起來-Z(離開屏幕)。所以看起來正確的翻譯變換應該是+camPos
。
float lookAtP[3] = {0,0,0}; /* camera look at point */
float camPos[3] = {0,0,-150}; /* camera location */
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(camPos[0],camPos[1],camPos[2], lookAtP[0],lookAtP[1],lookAtP[2], 0,1,0);
GLfloat matrix[16];
glGetFloatv (GL_MODELVIEW_MATRIX, matrix);
mat_print(matrix);
結果(gluLookAt):
-1.0000 0.0000 0.0000 0.0000
0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 -1.0000 0.0000
0.0000 0.0000 -150.0000 1.0000
當我按照文章中,我得到不同的符號(+150)的翻譯。我計算旋轉矩陣R
,然後翻譯T
。然後,用glLoadMatrix
加載T*R
的轉置(因爲opengl是右手,文章處理左手座標系)。
-1.0000 0.0000 0.0000 0.0000
0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 -1.0000 0.0000
0.0000 0.0000 150.0000 1.0000
問題是,文章是否正確?
嗯,當你說GL_MODELVIEW矩陣是右手的,相機矩陣是左手的時候,你是對的......我會閱讀這篇文章,看看能否得到更多的結論。 – fvdalcin
NDC,它是在最終的視口變換之前最終結束的座標空間是左手的。這是OpenGL中唯一無法控制的座標空間,z = -1總是最接近的深度,z = 1總是最遠的深度。只要最終產品在邏輯上映射到左手NDC,深度範圍,投影和您的模型視圖矩陣都可以具有不同的手型的各種中間座標空間。在固定功能流水線中,投影之前的所有內容都是右旋的,而投影矩陣/深度範圍是生成適當NDC的原因。 –