Qt openGL-我想让相机更靠近物体,怎么做?

Qt openGL-我想让相机更靠近物体,怎么做?,qt,opengl,graphics,3d,camera,Qt,Opengl,Graphics,3d,Camera,我使用了相当于gluLookAt的Qt来设置我的视图矩阵,我一直在通过在场景中的任何地方转换来移动它。。现在我想用相机靠近一个物体 我知道对象的位置,无论是在对象坐标系中还是在彼此坐标系中(我有该对象的模型矩阵),但是如何获得相机的位置 要设置摄影机动画,使其越来越接近对象,我想我应该取两点: 对象所在的点 相机所在的点 然后做一些类似的事情 QVector3D direction_to_get_closer = point_where_object_is - point_where_cam

我使用了相当于gluLookAt的Qt来设置我的视图矩阵,我一直在通过在场景中的任何地方转换来移动它。。现在我想用相机靠近一个物体

我知道对象的位置,无论是在对象坐标系中还是在彼此坐标系中(我有该对象的模型矩阵),但是如何获得相机的位置

要设置摄影机动画,使其越来越接近对象,我想我应该取两点:

  • 对象所在的点
  • 相机所在的点
然后做一些类似的事情

QVector3D direction_to_get_closer = point_where_object_is - point_where_camera_is
我怎样才能知道相机在哪里?或者,如果不需要这样做,如何将矢量指向相机到达目标所必须遵循的方向(无旋转,我只需要平移,这将简化事情)?

gluLookAt(眼睛,目标,抬头)采用三个参数,相机/眼睛的位置,你想看的对象的位置,和一个控制滚动/平头方向的单位向量

若要更近地缩放,您可以将眼睛/相机位置移动向量方向的一小部分以更近。比如说,

point_where_camera_is += 0.1f * direction_to_get_closer; // move 10% closer
更有用的方法是移动恒定的距离,而不是当前距离的10%(否则,当距离很大时,移动速度会非常快,然后会越来越慢)。因此,应使用规格化方向:

 QVector3D unitDir = direction_to_get_closer.normalized();
 point_where_camera_is += 0.1f * unitDir; // move 0.1 units in direction
如果相机所在的点与对象所在的点相等,相机变换将中断

更好的方法是,如果不需要缩放,平移/旋转新的“缩放”点,\u camera\u将在两个位置之间插值

float t = some user input value between 0 and 1 (0% to 100% of the line camToObj)
QVector3D point_on_line_cam_obj = t * point_where_camera_is + (1-t) * point_where_object_is;
这样,您可以通过限制t来阻止用户放大对象,也可以返回到t=0的开始位置

gluLookAt(眼睛、目标、抬头)采用三个参数,相机/眼睛的位置、要查看的对象的位置以及控制滚动/抬头方向的单位向量

若要更近地缩放,您可以将眼睛/相机位置移动向量方向的一小部分以更近。比如说,

point_where_camera_is += 0.1f * direction_to_get_closer; // move 10% closer
更有用的方法是移动恒定的距离,而不是当前距离的10%(否则,当距离很大时,移动速度会非常快,然后会越来越慢)。因此,应使用规格化方向:

 QVector3D unitDir = direction_to_get_closer.normalized();
 point_where_camera_is += 0.1f * unitDir; // move 0.1 units in direction
如果相机所在的点与对象所在的点相等,相机变换将中断

更好的方法是,如果不需要缩放,平移/旋转新的“缩放”点,\u camera\u将在两个位置之间插值

float t = some user input value between 0 and 1 (0% to 100% of the line camToObj)
QVector3D point_on_line_cam_obj = t * point_where_camera_is + (1-t) * point_where_object_is;
这样,您可以通过限制t来阻止用户放大对象,也可以返回到t=0的开始位置