如何围绕特定点旋转 vtk 场景
How to rotate a vtk scene around a specific point?
我有一个代表点云的3D vtk场景,通过QVTKWidget显示。vtk7.1, Qt5.8.
我希望能够围绕特定坐标旋转场景,但我不知道如何进行。
我喜欢轨迹球互动。我只需要设置中心,但我对 VTK API 有点迷茫。我想我可以通过更改旋转矩阵来做到这一点:InvTranslation + 旋转 + 翻译应该可以解决问题。我看到两种方法:
1(
- 获取由 VTK 计算的旋转矩阵
- 生成新矩阵
- 应用矩阵。
2(
- 将转换设置为 VTK 以在流程之前应用
- 将转换设置为 VTK 以在处理后应用
我的方向是否正确?如果是,我如何实施这些解决方案之一..?
谢谢我前进,
艾蒂安。
问题解决了。焦点的变化也会改变观点。所以,我应用了一些几何变换,就这样了。
// vtk Element /////////////////////////////////////////////////////////
vtkRenderWindowInteractor *rwi = widget->GetInteractor();
vtkRenderer *renderer = widget->GetRenderWindow()->GetRenderers()->GetFirstRenderer();
vtkCamera *camera = renderer->GetActiveCamera();
// Camera Parameters ///////////////////////////////////////////////////
double *focalPoint = camera->GetFocalPoint();
double *viewUp = camera->GetViewUp();
double *position = camera->GetPosition();
double axis[3];
axis[0] = -camera->GetViewTransformMatrix()->GetElement(0,0);
axis[1] = -camera->GetViewTransformMatrix()->GetElement(0,1);
axis[2] = -camera->GetViewTransformMatrix()->GetElement(0,2);
// Build The transformatio /////////////////////////////////////////////////
vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
transform->Identity();
transform->Translate(d->center[0], d->center[1], d->center[2]);
transform->RotateWXYZ(rxf, viewUp); // Azimuth
transform->RotateWXYZ(ryf, axis); // Elevation
transform->Translate(-d->center[0], -d->center[1], -d->center[2]);
double newPosition[3];
transform->TransformPoint(position,newPosition); // Transform Position
double newFocalPoint[3];
transform->TransformPoint(focalPoint, newFocalPoint); // Transform Focal Point
camera->SetPosition(newPosition);
camera->SetFocalPoint(newFocalPoint);
// Orhthogonalize View Up //////////////////////////////////////////////////
camera->OrthogonalizeViewUp();
renderer->ResetCameraClippingRange();
rwi->Render();
你只需要改变你的vtkCamera的焦点
vtkSmartPointer<vtkCamera> camera =
vtkSmartPointer<vtkCamera>::New();
camera->SetPosition(0, 0, 20);
camera->SetFocalPoint(0, 0, 10); // The center point is not 0, 0, 10
相关文章:
- Qt VTK交互风格的信号到小部件
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何禁用VTK的热键
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 子轴围绕父轴而不是他自己的轴旋转
- 将使用太多的纹理插值器 - 带旋转的着色器
- SFML 向下移动时如何围绕屏幕中心旋转?
- 将网格与VTK相机对齐(相机的视觉表示,随之移动和旋转的网格)
- 如何围绕特定点旋转 vtk 场景
- VTK:旋转3D模型并捕获其深度图
- VTK应用翻译和旋转到vtkImageData
- VTK:在vtkRenderWindowInteractior处于活动状态时,以编程方式旋转actor