簡體   English   中英

第一人稱相機,轉身OPENGL

[英]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.

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