2014-10-08 27 views
0

我昨天更新了我的問題,希望有人澄清這個問題!opengl相機的執行是正確的?

當應用俯仰偏航輥(假設我們選擇這個順序)角度來實現空氣的相機,我想我們可以計算這樣的觀點矩陣:

view matrix

而且還有點支持這種觀點如Using a camera and simple user inputOpenGL Transformation,他們的代碼風格是這樣的:

// First, transform the camera (viewing matrix) from world space to eye space 
// Notice all values are negated, because we move the whole scene with the 
// inverse of camera transform 
glRotatef(-roll, 0, 0, 1); // roll 
glRotatef(-yaw, 0, 1, 0); //yaw 
glRotatef(-pitch, 1, 0, 0); // pitch 
glTranslatef(-cameraPosition[0], -cameraPosition[1], -cameraPosition[2]); 

我相信這是正確的。

Red book pilotView(7th edition)A C++ Camera Class for Simple OpenGL FPS ControlsFirst Person Camera Control with LWJGLModern OpenGL 04 - Cameras, Vectors & Input 這樣的代碼風格:

glRotatef(roll, 0, 0, 1); // roll 
glRotatef(yaw, 0, 1, 0); //yaw 
glRotatef(pitch, 1, 0, 0); // pitch 
glTranslatef(-cameraPosition[0], -cameraPosition[1], -cameraPosition[2]); 

它將工作,並沒有影響多少用戶交互,但是從數學的角度來看,它是不是正確的。

爲什麼書和其他人選擇第二種代碼風格?請幫助澄清這個問題!

回答

0

我會建議這是一個約定的問題。舉例來說,當你俯身時,俯仰角度是正面的,或者當你俯身時,仰角是正面的?兩種方法都可以正常工作,您可能需要根據您選擇的慣例否定角度。在現實世界中,我始終與地質學家討論「傾角」和「方位角」意味着什麼,而地質學界似乎沒有固定的慣例。

看來你的勞埃德古道爾參考不會否定glTranslatef()調用中的相機位置。又一個約定?

要回答他們爲什麼選擇這種代碼風格的問題......我認爲它有點武斷,所以作者只是單方面做。

+0

感謝您抽出時間來調查我的參考頁,減輕我的初學者的謎.Lloyd古道爾碼的glTranslatef異常別人,但他也做不同的東西在walkForward/walkBackwards方法來計算相機位置以使其工作。我更喜歡選擇第一種編碼風格。 – wangdq 2014-10-08 06:30:24

0

在OpenGL中攝像機矩陣是

  • 模型矩陣表示實際呈現物體座標系模型視圖矩陣的一部分
  • 視圖(攝像機)矩陣表示觀察者座標系

爲了形成正確ModelView矩陣您需要:

ModelView = Model * Inverse(View) 
  • 當您通過向量乘以這個矩陣從對象空間將其轉換到攝像機空間
  • 您生成視圖部分是你約定的事項(如丹尼爾包貴革指出)
  • 但是得到的矩陣是路您正在查看的座標系的倒數。
  • 欲瞭解更多信息請看這裏:transform matrix anatomy