如何在3D场景中使用和设置坐标轴

2 投票
1 回答
2529 浏览
提问于 2025-04-17 04:34

我正在用Python创建一个模拟器,使用的是ODE(开放动力学引擎)。为了可视化,我选择了VTK。

在模拟中,每个物体我都会创建一个对应的源(比如vtkCubeSource)、映射器和演员(actor)。这样我就能正确显示物体,并在模拟运行时更新它们。

我想添加坐标轴,以便有一个参考点,并显示每个轴的方向。在这个过程中,我发现默认情况下,X轴和Z轴是在屏幕平面上,而Y轴是指向外面的。但在我的程序中,我有不同的约定。

我已经能用两种方式显示坐标轴:

1) 图片

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

2) 图片(颜色和第一种情况不匹配)

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

在第二种方式中,用户可以设置很多与坐标轴显示相关的参数。而在第一种方式中,我只能设置线条的宽度,其他的都没法调整。

所以,我的问题是:

  • 在3D场景中,定义和显示坐标轴的正确方式是什么?我只想让它们保持固定的位置和方向。
  • 我该如何设置坐标轴的方向约定,以便在显示和整体可视化中都能反映出来?

1 个回答

1

好吧,如果你不去改变对象的变换矩阵来调整显示效果,那么只需把相机放在不同的位置,使用第二种坐标轴的方法就可以了。调整相机位置的简单方法有:Pitch()、Azimuth() 和 Roll()。

如果你改变了对象的变换,那就要把同样的变换应用到坐标轴上。


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

撰写回答