obb vtk 定点坐标_VTK坐标系统及视图分割

本文介绍了计算机图像学中的模型、世界、视图和显示四种坐标系统,详细阐述了它们之间的转换和作用。通过VTK实例展示了如何利用视口在同一个窗口中渲染四个不同的场景,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

计算机图像学里广泛应用的坐标系统有四种,分别是:模型坐标系统(model),世界坐标系统(world),视图坐标系统(view)和显示坐标系统(display)。

模型坐标系统就是定义模型时所用的坐标系统,通常就是笛卡尔坐标系统,以inches或meters为单位。

世界坐标系统就是三维空间中放置actors的坐标系统,actor的其中一个责任就是负责转换模型坐标系统中的坐标到世界坐标系统中去。每一个模型都有其自己的模型坐标系统,但是它们只有一个共同的世界坐标系统。世界坐标系统也是放置和定位照相机(camera)和光源(light)的坐标系统。

视图坐标系统表示照相机可见的一个系统,由x,y值组成,范围位于(-1,1),z值表示深度坐标。x,y值指定物体在图像平面的位置,而z值表示的是离照相机的距离。照相机的位置信息是由一个4*4的矩阵来表示的,这个矩阵用于把世界坐标变换为视图坐标。显示坐标系统以像素为单位,屏幕上显示的窗体的大小决定了如何把范围为(-1,1)的视图坐标系统映射到以像素为单位的显示坐标系统。这就涉及到视口的概念,我们可以渲染四个不同的场景,然后把这四个不同的场景放置在同一个窗口当中(看程序操作)。视口的x,y取值为(0,1),显示坐标系统里的z值也表示深度信息。

参考代码如下:

1 #include

2 VTK_MODULE_INIT(vtkRenderingOpenGL2);3 VTK_MODULE_INIT(vtkInteractionStyle);4 #include

5 #include

6 #include

7 #include

8 #include

9 #include

10 #include

11 #include

12 #include

13 #include

14

15 intmain()16 {17 vtkSmartPointer cone = vtkSmartPointer::New();18 vtkSmartPointer cube = vtkSmartPointer::New();19 vtkSmartPointer cylinder = vtkSmartPointer::New();20 vtkSmartPointer sphere = vtkSmartPointer::New();21

22 vtkSmartPointer coneMapper = vtkSmartPointer::New();23 coneMapper->SetInputConnection(cone->GetOutputPort());24 vtkSmartPointer cubeMapper = vtkSmartPointer::New();25 cubeMapper->SetInputConnection(cube->GetOutputPort());26 vtkSmartPointer cylinderMapper = vtkSmartPointer::New();27 cylinderMapper->SetInputConnection(cylinder->GetOutputPort());28 vtkSmartPointer sphereMapper = vtkSmartPointer::New();29 sphereMapper->SetInputConnection(sphere->GetOutputPort());30

31 vtkSmartPointer coneActor = vtkSmartPointer::New();32 coneActor->SetMapper(coneMapper);33 vtkSmartPointer cubeActor = vtkSmartPointer::New();34 cubeActor->SetMapper(cubeMapper);35 vtkSmartPointer cylinderActor = vtkSmartPointer::New();36 cylinderActor->SetMapper(cylinderMapper);37 vtkSmartPointer sphereActor = vtkSmartPointer::New();38 sphereActor->SetMapper(sphereMapper);39

40 vtkSmartPointer renderer1 = vtkSmartPointer::New();41 renderer1->AddActor(coneActor);42 renderer1->SetBackground(1.0, 0.3, 0.2);43 renderer1->SetViewport(0.0, 0.0, 0.5, 0.5);44 vtkSmartPointer renderer2 = vtkSmartPointer::New();45 renderer2->AddActor(cubeActor);46 renderer2->SetBackground(0.2, 1.0, 0.6);47 renderer2->SetViewport(0.5, 0.0, 1.0, 0.5);48 vtkSmartPointer renderer3 = vtkSmartPointer::New();49 renderer3->AddActor(cylinderActor);50 renderer3->SetBackground(0.2, 0.5, 1.0);51 renderer3->SetViewport(0.0, 0.5, 0.5, 1.0);52 vtkSmartPointer renderer4 = vtkSmartPointer::New();53 renderer4->AddActor(sphereActor);54 renderer4->SetBackground(1.0, 1.0, 0.3);55 renderer4->SetViewport(0.5, 0.5, 1.0, 1.0);56

57 vtkSmartPointer renWin = vtkSmartPointer::New();58 renWin->AddRenderer(renderer1);59 renWin->AddRenderer(renderer2);60 renWin->AddRenderer(renderer3);61 renWin->AddRenderer(renderer4);62 renWin->SetSize(640, 480);63 renWin->Render();64 renWin->SetWindowName("ViewFour");65

66 vtkSmartPointer interactor =

67 vtkSmartPointer::New();68 interactor->SetRenderWindow(renWin);69

70 renWin->Render();71 interactor->Initialize();72 interactor->Start();73

74 returnEXIT_SUCCESS;75 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值