c++ - 如何在 3D 场景中使用和设置轴

标签 c++ python vtk

我正在创建一个用 python 编码并基于 ODE(开放动态引擎)的模拟器。对于可视化,我选择了 VTK。

对于模拟中的每个对象,我都创建了相应的源(例如 vtkCubeSource)、映射器和角色。我能够正确显示对象并在模拟运行时更新它们。

我想添加轴以具有引用点并显示每个轴的方向。这样做我意识到,默认情况下,X 和 Z 位于屏幕平面内,Y 指向外。在我的程序中,我有一个不同的约定。

我已经能够以两种方式显示轴:

1) Image

axes = vtk.vtkAxes()
axesMapper = vtk.vtkPolyDataMapper()
axesMapper.SetInputConnection(axes.GetOutputPort())
axesActor = vtk.vtkActor()
axesActor.SetMapper(axesMapper)
axesActor.GetProperty().SetLineWidth(4)

2) Image (颜色与第一种情况不匹配)

axesActor = vtk.vtkAxesActor()
axesActor.AxisLabelsOn()
axesActor.SetShaftTypeToCylinder()
axesActor.SetCylinderRadius(0.05)

在第二个中,允许用户设置许多与轴显示方式相关的参数。在第一个中,我只设法设置了线宽,但没有别的。

所以,我的问题是:

  • 在 3D 场景中定义和显示轴的正确方法是什么?我只希望它们处于固定的位置和方向。
  • 如何为坐标轴的显示和一般可视化设置不同的约定?

最佳答案

好吧,如果你不弄乱对象的显示变换矩阵 目的,可能只需将您的相机放入 使用轴方法时的不同位置 2. 调整的简单方法 您的相机位置是:Pitch()、Azimuth() 和 Roll()。

如果您弄乱了对象变换,请将相同的变换应用于 轴。


Dženan Zukić 在 vtkusers@vtk.org 邮件列表中友善地回答了这个问题。 http://www.vtk.org/pipermail/vtkusers/2011-November/119990.html

关于c++ - 如何在 3D 场景中使用和设置轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7810632/

相关文章:

python - 如何在 Windows 上构建 Python Sybase 模块?

python - 我想在 vtk(python)中制作均匀分布的球体

python - 根据 Mayavi iso_surface 中的高度更改颜色

c++ - 为什么我的程序在大输入时失败?超过 10^5

c++ - 水平对齐动态创建的小部件 qt c++

c++ - 在 getline C++ 上复制最后的数据

python - 如何将 vtkPolyData 的 Polys 保存到数据库并将它们分配给 vtkPoints?

c++ - 具有 unique_ptr 的结构 vector

python - 通过比较列表和字符串中的值创建一个新列表

python - Tensorflow:从先前创建的模型中保存变量子集