Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OpenGL中围绕XZ平面上的点旋转摄影机_Opengl_3d_Camera_Rotation - Fatal编程技术网

在OpenGL中围绕XZ平面上的点旋转摄影机

在OpenGL中围绕XZ平面上的点旋转摄影机,opengl,3d,camera,rotation,Opengl,3d,Camera,Rotation,我正在尝试在OpenGL中实现一个可以四处移动和旋转的摄像头。我希望相机围绕XZ平面上的一个点旋转(Y向上),相机当前正在观察该点(即,XZ平面和相机方向的交点)。实现这一点的最佳方法是什么?假设您希望围绕XZ平面上的点p(x,0,z) 一种方法是调用glRotatef(θ,px,py,pz),将当前矩阵乘以旋转矩阵(围绕向量(px,py,pz)旋转θ) 由于要围绕任意点而不是原点旋转,因此需要首先平移轴: glTranslatef(x, 0, z); glRotatef(thetax, 1,

我正在尝试在OpenGL中实现一个可以四处移动和旋转的摄像头。我希望相机围绕XZ平面上的一个点旋转(Y向上),相机当前正在观察该点(即,XZ平面和相机方向的交点)。实现这一点的最佳方法是什么?

假设您希望围绕
XZ
平面上的点
p(x,0,z)

一种方法是调用
glRotatef(θ,px,py,pz)
,将当前矩阵乘以旋转矩阵(围绕向量
(px,py,pz)
旋转θ)

由于要围绕任意点而不是原点旋转,因此需要首先平移轴:

glTranslatef(x, 0, z);
glRotatef(thetax, 1, 0, 0);
glRotatef(thetay, 0, 1, 0);
glRotatef(thetaz, 0, 0, 1);
glTranslatef(-x, 0, -z);
或者,您可以使用
gluLookAt(cx,cy,cz,px,py,pz,ux,uy,uz)
,为
(cx,cy,cz)
处的摄影机创建视图矩阵,该视图矩阵查看
(px,py,pz)
(ux,uy,uz)是指向“上”(摄影机的滚动)的向量

我想你会希望你的相机到你的点的距离保持不变,这样在球坐标系中表达你相机的坐标会很方便

x=rsin(θ)cos(φ)

y=rsin(θ)sin(φ)


z=rcos(θ)

制作一个以交点为中心的球形摄像机,如果使用glm或类似的库来计算注视矩阵,这是非常简单的。