camera

查看相机属性

  vtkCamera* camera = m_resliceViewers[i]->GetRenderer()->GetActiveCamera();
  auto p  = camera->GetPosition();          // 摄像机位置
  auto fp = camera->GetFocalPoint();        // 视点(焦点)
  auto vu = camera->GetViewUp();            // “上”方向 (归一化)
  auto dop= camera->GetDirectionOfProjection(); // 视线单位向量
  
  //    double clip[2];
  //    camera->GetClippingRange(clip);           // 近裁剪、远裁剪
  //    double bounds[6];
  //    camera->GetFrustumPlanes(clip[1], bounds); // 视锥六平面 (可选)
  
  std::cout << std::fixed << std::setprecision(3);
  std::cout << "===== vtkCamera info =====\n" << i;
  std::cout << "Position           = (" << p[0]  << ", " << p[1] << ", " << p[2] << ")\n";
  std::cout << "FocalPoint         = (" << fp[0] << ", " << fp[1] << ", " << fp[2] << ")\n";
  std::cout << "ViewUp             = (" << vu[0] << ", " << vu[1] << ", " << vu[2] << ")\n";
  std::cout << "DirectionOfProj    = (" << dop[0]<< ", " << dop[1]<< ", " << dop[2]<< ")\n";
  //    std::cout << "Parallel?          = " << (camera->GetParallelProjection() ? "YES" : "NO") << "\n";
  //    if (camera->GetParallelProjection())
  //        std::cout << "  ParallelScale   = " << camera->GetParallelScale() << "\n";
  //    else
  //        std::cout << "  ViewAngle (deg) = " << camera->GetViewAngle() << "\n";
  //    std::cout << "ClippingRange      = [" << clip[0] << ", " << clip[1] << "]\n";
  std::cout << "Distance           = " << camera->GetDistance() << "\n";
  std::cout << "===========================\n";

相机决定了视角位置,也决定了在屏幕上pick的世界坐标,比如在站在x轴负轴,看y轴上,如果没有pick到物体,那么(a, b, c)坐标中a是恒定值,不是可信值

Table of Contents