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是恒定值,不是可信值