2
我已經實現了一個FPS風格的攝像頭,相機由一個位置矢量和歐拉角間距和偏轉(x和y旋轉)組成。 設置投影矩陣後,我再通過旋轉,然後翻譯成相機位置的逆轉換成攝像頭座標:從位置和歐拉角計算觀察向量
// Load projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Set perspective
gluPerspective(m_fFOV, m_fWidth/m_fHeight, m_fNear, m_fFar);
// Load modelview matrix
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// Position camera
glRotatef(m_fRotateX, 1.0, 0.0, 0.0);
glRotatef(m_fRotateY, 0.0, 1.0, 0.0);
glTranslatef(-m_vPosition.x, -m_vPosition.y, -m_vPosition.z);
現在,我已經有了多設幾個視口,每個都有自己的相機,並從每個攝像頭渲染其他攝像頭的位置(作爲一個簡單的盒子)。 我也想繪製這些相機的視圖矢量,除了我不知道如何從位置和歐拉角度計算lookat矢量。 我試圖用表示相機旋轉的矩陣乘以原始相機矢量(0,0,-1) ,然後將相機位置添加到變換後的矢量,但這根本不起作用(最有可能是因爲我'遠離基地):
vector v1(0, 0, -1);
matrix m1 = matrix::IDENTITY;
m1.rotate(m_fRotateX, 0, 0);
m1.rotate(0, m_fRotateY, 0);
vector v2 = v1 * m1;
v2 = v2 + m_vPosition; // add camera position vector
glBegin(GL_LINES);
glVertex3fv(m_vPosition);
glVertex3fv(v2);
glEnd();
我想從攝像機畫一條線段到查看方向。 我已經找遍了這個地方的例子,但似乎無法找到任何東西。
非常感謝!
只是好奇,你是否在做任何處理萬向節鎖? – FrustratedWithFormsDesigner 2010-05-03 20:13:05
不,我知道它在那裏,潛伏着;)我會在後期嘗試四元數,但我真的很想先弄清楚這一點。 – Jaap 2010-05-03 20:35:04
旋轉相機時,實際上是在相反的方向旋轉整個世界。因此,當您將相同的變換應用於矢量而不是用相機移動相機時,可以在相反的方向旋轉它,嘗試旋轉用矩陣的逆矩陣來旋轉你的視圖.. – Ivan 2010-05-04 09:54:11