vtkCamera联络点期望的值的类型和范围是什么?

时间:2018-08-02 21:24:39

标签: vtk point-cloud-library point-clouds qvtkwidget

我正在使用PCL查看器(使用VTK)来可视化SLAM算法生成的3D点云。我正在尝试渲染给定姿势(位置和方向)下机器人看到的点云视图。我可以设置摄像头的位置和ViewUp矢量,但是无法将摄像头的焦点设置为机器人的航向。当前,我正在使用滑块设置焦点,但是我想根据标题以编程方式设置它。

我正在尝试了解VTKCamera Focal Point期望的类型(以rad为单位的角度/以m为单位的距离)和值的范围以及与航向的关系。

我要更新相机的功能

void Widget::setcamView(){

    //transfrom position
     Eigen::Vector3d position = this->transformpose(Eigen::Vector3d(image_pose.at(pose_ittr).position[0], image_pose.at(pose_ittr).position[1], image_pose.at(pose_ittr).position[2]));

    posx = position(0);
    posy = position(1);
    posz = position(2);

    //transform the pose
    Eigen::Vector3d attitude = this->transformpose(Eigen::Vector3d(image_pose.at(pose_ittr).orientation[0],image_pose.at(pose_ittr).orientation[1],image_pose.at(pose_ittr).orientation[2]));

    roll = attitude(0);
    pitch = attitude(1);
    yaw = attitude(2);

    viewx = ui->viewxhSlider->value();// * std::pow(10,-3);
    viewy = ui->viewyhSlider->value();// * std::pow(10,-3);
    viewz = ui->viewzhSlider->value();// * std::pow(10,-3);

    // debug
    std::cout<<"Positon: "<<posx<<"\t"<<posy<<"\t"<<posz<<std::endl<<
                "View: "<<viewx<<"\t"<<viewy<<"\t"<<viewz<<std::endl<<
               "Orientation: "<<roll<<"\t"<<pitch<<"\t"<<yaw<<std::endl;

    point_cutoffy = ui->ptcutoffhSlider->value();

    if(yaw <=0)
        yaw = yaw * -1;

    viewer->setCameraPosition(posx,posy,posz+1,
                              viewz,viewy,viewz,
                              0, 0, 1, 0);
    viewer->setCameraFieldOfView(1);
    viewer->setCameraClipDistances(point_cutoffx,point_cutoffy,0);

    ui->qvtkWidget->update();
    count++;
}

非常感谢您的帮助。

-谢谢

PS

PCL Viewer设置摄像机实施(使用VTK)

void pcl::visualization::PCLVisualizer::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)
{
  rens_->InitTraversal ();
  vtkRenderer* renderer = NULL;
  int i = 0;
  while ((renderer = rens_->GetNextItem ()) != NULL)
  {
    // Modify all renderer's cameras
    if (viewport == 0 || viewport == i)
    {
      vtkSmartPointer<vtkCamera> cam = renderer->GetActiveCamera ();
      cam->SetPosition (pos_x, pos_y, pos_z);
      cam->SetFocalPoint (view_x, view_y, view_z);
      cam->SetViewUp (up_x, up_y, up_z);
      renderer->ResetCameraClippingRange ();
    }
    ++i;
  }
  win_->Render ();
}

1 个答案:

答案 0 :(得分:0)

我正在通过也使用VTK的opencv Viz处理非常相似的问题。相对于您的问题,我认为您可以找到答案HERE