我有一个带有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]);
}
答案 0 :(得分:1)
假设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是旋转矩阵。根据您的记法,视图矩阵可能必须反转。