[英]first person camera, turning around OPENGL
我有一個帶Obs和VRP和向上矢量的透視攝像頭。
我想實現轉身,像我的場景中的觀察者一樣。 我已經實現了前向和后向,因為它只是向Obs和VRP添加相同數量的z坐標(兩者都是vec3)。 當我嘗試實現旋轉時出現問題,是否有任何方法可以使用矩陣產品? 我試過了:
x = R * cos角
z = R * sin角
其中R是向量的大小(VRP-Obs),但它不起作用
編輯:我在這里應用視圖和投影矩陣:
void MyGLWidget::projTransform(){
//fov window, ra window (anchura / altura), near, far
glm::mat4 Proj = glm::perspective(M_PI/1.3, 1.0, 0.2, 3000.0);
glUniformMatrix4fv(projLoc,1,GL_FALSE, &Proj[0][0]);
}
void MyGLWidget::viewTransform(){
//lookAt(OBS,VRP;UP)
//glm::mat4 View = glm::lookAt(glm::vec3(0,0,10),glm::vec3(0,0,-2), glm::vec3(0,1,0));
glm::mat4 View = glm::lookAt(glm::vec3(xObs,yObs,zObs),glm::vec3(xVRP,yVRP,zVRP), glm::vec3(0,1,0));
glUniformMatrix4fv(viewLoc,1,GL_FALSE, &View[0][0]);
}
假設Obs是攝像機位置,VRP是觀察位置:
r = ||VRP - Obs||
r * cos(angle)
VRP_new = Obs + [ 0 ]
r * sin(angle)
由於您可能希望稍后有第二個旋轉軸,我建議為攝像機設置此參數:位置矢量t和描述圍繞x軸和y軸旋轉的兩個角度[rx,ry]。 可以在每個幀中組合它們以獲得Obs和VRP,但這不是必需的,因為視圖矩陣可以直接從這些參數派生:
V = T(t) * R_y(ry) * R_x(rx),
其中T是平移矩陣,R_x,R_y是旋轉矩陣。 根據您的表示法,可能必須反轉視圖矩陣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.