obb vtk 定点坐标_vtk学习笔记 --- 显示坐标系

有的时候,在显示三维物体时,我们希望知道当前场景对应的坐标系位置或者方向,这样在旋转物体的时候,就能够很清楚地看到当前正对这视野的是什么面xy平面,还是y轴等信息了。

在vtk库中有一个vtkAxesActor负责显示坐标系,在查阅了vtk的wiki之后,找到了两个示例,在这里将两者结合起来,放在同一个例子中显示,并用java代码重写。其中,第一个示例:http://vtk.org/Wiki/VTK/Examples/Cxx/GeometricObjects/Axes 是直接将vtkAxesActor加入到renderer中进行显示,而第二个示例:

最后的效果如下图:

5db4e52cd993bbcaa9ef5da5c58ba2eb.png

相应的java代码如下:

/**

* 显示坐标系

* 代码参考:

* http://vtk.org/Wiki/VTK/Examples/Cxx/Visualization/DisplayCoordinateAxes

* http://vtk.org/Wiki/VTK/Examples/Cxx/GeometricObjects/Axes

*/

public class DisplayCoordinateAxes {

static {

System.loadLibrary("vtkCommonJava");

System.loadLibrary("vtkFilteringJava");

System.loadLibrary("vtkIOJava");

System.loadLibrary("vtkImagingJava");

System.loadLibrary("vtkGraphicsJava");

System.loadLibrary("vtkRenderingJava");

System.loadLibrary("vtkChartsJava");

System.loadLibrary("vtkGenericFilteringJava");

System.loadLibrary("vtkGeovisJava");

System.loadLibrary("vtkViewsJava");

System.loadLibrary("vtkWidgetsJava");

System.loadLibrary("vtkVolumeRenderingJava");

System.loadLibrary("vtkInfovisJava");

System.loadLibrary("vtkHybridJava");

}

public static void main(String[] args) {

//创建一个球体

vtkSphereSource sphereSource = new vtkSphereSource();

sphereSource.SetCenter(0.0, 0.0, 0.0);

sphereSource.SetRadius(1.0);

sphereSource.Update();

vtkPolyDataMapper mapper = new vtkPolyDataMapper();

mapper.SetInput(sphereSource.GetOutput());

vtkActor actor = new vtkActor();

actor.SetMapper(mapper);

//为了能够看清楚vtkAxesActor,特意设置的透明度

actor.GetProperty().SetOpacity(0.3);

vtkRenderer renderer = new vtkRenderer();

vtkRenderWindow renderWindow = new vtkRenderWindow();

renderWindow.AddRenderer(renderer);

vtkRenderWindowInteractor renderWindowInteractor = new vtkRenderWindowInteractor();

renderWindowInteractor.SetRenderWindow(renderWindow);

renderer.AddActor(actor);

renderer.SetBackground(.2, .3, .4);

//使用vtkTransform对vtkAxesActor进行转换,默认位于(0,0,0)

vtkTransform transform = new vtkTransform();

transform.Translate(1.0, 0.0, 0.0);

//1、在同一个视口中显示坐标系,直接添加到renderer中

vtkAxesActor axes1 = new vtkAxesActor();

renderer.AddActor(axes1);

axes1.SetUserTransform(transform);

vtkAxesActor axes = new vtkAxesActor();

//2、以Widget方式,在左下角的视口中显示坐标系,可进行鼠标交互

vtkOrientationMarkerWidget widget = new vtkOrientationMarkerWidget();

widget.SetOutlineColor(0.9300, 0.5700, 0.1300);

widget.SetOrientationMarker(axes);

widget.SetInteractor(renderWindowInteractor);

widget.SetViewport(0.0, 0.0, 0.4, 0.4);

widget.SetEnabled(1);

widget.InteractiveOn();

renderer.ResetCamera();

renderWindow.Render();

// Begin mouse interaction

renderWindowInteractor.Start();

}

}

eec99ebaf4f0c57776215dade24d0c16.png

大小: 40.3 KB

1

1

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-11-09 19:47

浏览 15823

评论

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值