PCL setCameraPosition 参数讲解

PCL setCameraPosition 参数讲解_第1张图片

       

setCameraPosition 的原型如下

void setCameraPosition (double pos_x, double pos_y, double pos_z,
                           double view_x, double view_y, double view_z,
                           double up_x, double up_y, double up_z, int viewport = 0);

pos_x pos_y pos_z为相机所在的位置

view_x view_y  view_z 是焦点所在的位置

up_x  up_y  up_z 的那个坐标轴朝上,若朝上则为1,若朝下为-1

cloudcompare 中正视的的坐标显示如下图,Z轴朝上(up_x=0 up_y=0 up_z=1)而Y轴背离 所以相机位置 pos_y为负值.

PCL setCameraPosition 参数讲解_第2张图片

如果坐标系看起来不直观,建议拿个盒子画好正视的坐标系 .

以下是切换自动计算相机位置、焦点位置、相机朝向的计算函数

#define    PCL_FACEVIEW      1  //正视
#define    PCL_DOWNVIEW      2  //仰视
#define    PCL_LEFTVIEW      3  //左视
#define    PCL_RIGHTVIEW     4  //右视
#define    PCL_TOPVIEW       5  //俯视
#define    PCL_BACKVIEW      6  //后视

void getCameraParam(int viewPos,PointT minIn,PointT maxIn,PointT &cameraPosOut,PointT &focusPosOut,PointT &upPosOut){


  switch (viewPos) {
  case PCL_FACEVIEW     : //OK
  {
    focusPosOut.x=0;
    focusPosOut.y=0;
    focusPosOut.z=0;
    cameraPosOut.x=0;
    cameraPosOut.y=-300;
    cameraPosOut.z=0;
    upPosOut.x=0;
    upPosOut.y=0;
    upPosOut.z=1;

  }
  break;
  case PCL_DOWNVIEW     :   //OK
  {
    focusPosOut.x=0;
    focusPosOut.y=0;
    focusPosOut.z=0;
    cameraPosOut.x=0;
    cameraPosOut.y=0;
    cameraPosOut.z=-300;
    upPosOut.x=0;
    upPosOut.y=1;
    upPosOut.z=0;
  }
  break;
  case PCL_LEFTVIEW     :  //OK
  {
    focusPosOut.x=0;
    focusPosOut.y=0;
    focusPosOut.z=0;
    cameraPosOut.x=-300.0;
    cameraPosOut.y=0;
    cameraPosOut.z=0;
    upPosOut.x=0;
    upPosOut.y=0;
    upPosOut.z=1;
  }
  break;
  case PCL_RIGHTVIEW    :  //OK
  {
    focusPosOut.x=0;
    focusPosOut.y=0;
    focusPosOut.z=0;
    cameraPosOut.x=300;
    cameraPosOut.y=0;
    cameraPosOut.z=0;
    upPosOut.x=0;
    upPosOut.y=0;
    upPosOut.z=1;

  }
  break;

  case     PCL_TOPVIEW: //OK
  {
    focusPosOut.x=0;
    focusPosOut.y=0;
    focusPosOut.z=0;
    cameraPosOut.x=0;
    cameraPosOut.y=0;
    cameraPosOut.z=300;
    upPosOut.x=0;
    upPosOut.y=1;
    upPosOut.z=0;

  }
  break;
  case     PCL_BACKVIEW:    //OK
  {
    focusPosOut.x=0;
    focusPosOut.y=0;
    focusPosOut.z=0;
    cameraPosOut.x=0;
    cameraPosOut.y=300.0;
    cameraPosOut.z=0;
    upPosOut.x=0;
    upPosOut.y=0;
    upPosOut.z=1.0;
  }
  break;

  }


}

你可能感兴趣的:(PCL,点云,PCL,点云)