VTK 三维场景

VTK 三维场景

在这里插入图片描述

基本要素

VTK 三维场景的基本要素:

  1. 灯光:vtkLight。vtkLight可以分为位置灯光(Positional Light,也叫聚光灯)和方向灯光(Direction Light)。 位置灯光是光源位置在渲染场景中的某个位置,可以指定灯光的衰减值、锥角等;方向灯光即光源位置在无穷远,可以认为光线是平行的,比如自然界中的太阳光。光源的位置和焦点的连线定义光线的方向,默认的vtkLight为方向灯光。
  2. 相机:vtkCamera。vtkCamera 负责把三维场景投影到二维平面,如屏幕。
  3. 颜色:颜色是Actor重要的属性之一。VTK采用RGB和HSV两种颜色系统来描述颜色。
  4. 纹理映射:纹理映射是把二维图像“贴”到三维物体表面。纹理投射需要两块信息:一个纹理图片(常用vtkImageData数据集表示)和一个yong’yu表面上纹理定位的的纹理坐标。

坐标系统及空间变换

计算机图形学里常用的坐标系统主要有四种,分别是:Model坐标系统、World坐标系统、View坐标系统和Display坐标系统,以及两种表示坐标点的方式:以屏幕像素值为单位和归一化坐标值(各坐标轴取值都为[-1, 1])。它们之间的关系如图所示。

在这里插入图片描述

Model坐标系统是定义模型时所采用的坐标系统,通常是局部的笛卡尔坐标系。例如,我们要定义一个表示球体的Actor,一般的做法是将该球体定义在一个柱坐标系统里。

World坐标系统是放置Actor的三维空间坐标系,Actor其中的一个功能就是负责将模型从Model坐标系统变换到World坐标系统。每一个模型可以定义有自己的Model坐标系统,但World坐标系只有一个,每一个Actor必须通过放缩、旋转、平移等操作将Model坐标系变换到World坐标系。World坐标系同时也是相机和光照所在的坐标系统。

View坐标系统表示的是相机所看见的坐标系统。X、Y、Z轴取值为[-1, 1],X、Y值表示像平面上的位置,Z值表示到相机的距离。相机负责将World坐标系变换到View坐标系。

Display坐标系统跟View坐标系统类似,但是各坐标轴的取值不是[-1, 1],而是使用屏幕像素值。屏幕上显示的不同窗口的大小会影响View坐标系的坐标值[-1, 1]到Display坐标系的映射。可以把不同的渲染场景放在同一个窗口进行显示,例如我们把一个窗口分为四个视口,用vtkRenderer::SetViewport()来设置视口的范围(取值为[0, 1]):

renderer1->SetViewport(0.0, 0.0, 0.5, 0.5);
renderer2->SetViewport(0.5, 0.0, 1.0, 0.5);
renderer3->SetViewport(0.0, 0.5, 0.5, 1.0);
renderer4->SetViewport(0.5, 0.5, 1.0, 1.0);

在VTK里,Model坐标系统用得比较少,其他三种坐标系统经常使用。根据坐标点单位、取值范围等不同,可以将坐标系统分为:

  • DISPLAY:X、Y轴的坐标取值为渲染窗口的像素值。坐标原点位于渲染窗口的左下角,这个对于VTK里所有的二维坐标系统都是一样的,且VTK里的坐标系统都是采用右手坐标系。

  • NORMALIZEDDISPLAY:X、Y轴坐标取值范围为[0, 1],跟DISPLAY一样,也是定义在渲染窗口里的。

  • VIEWPORT:X、Y的坐标值定义在视口或者渲染器(Renderer)里。

  • NORMALIZEDVIEWPORT:X、Y坐标值定义在视口或渲染器里,取值范围为[0, 1]。

  • VIEW:X、Y、Z坐标值定义在相机所在的坐标系统里,取值范围为[-1, 1],Z值表示深度信息。

  • WORLD:X、Y、Z坐标值定义在世界坐标系统,参考图3.9。

  • USERDEFINED:用户自定义坐标系统。

vtkCoordinate 类提供的设置以上坐标系统的方法是:

SetCoordinateSystemToDisplay()
SetCoordinateSystemToNormalizedDisplay()
SetCoordinateSystemToViewport()
SetCoordinateSystemToNormalizedViewport()
SetCoordinateSystemToView()
SetCoordinateSystemToWorld()
  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你好!C++和VTK(Visualization Toolkit)可以用于三维建模。VTK是一个强大的开源软件库,用于可视化和图形处理。它提供了许多功能,包括创建、渲染和操作三维模型。 要在C++中使用VTK进行三维建模,你需要以下步骤: 1. 安装VTK:首先,你需要从VTK官方网站下载并安装VTK库。按照官方文档中的说明进行安装。 2. 包含VTK头文件:在你的C++代码中,使用#include语句包含所需的VTK头文件。例如,要使用vtkRenderWindow类,你可以包含以下头文件: ```cpp #include <vtkRenderWindow.h> ``` 3. 创建场景和渲染窗口:使用VTK类创建一个场景,并将其添加到渲染窗口中。以下是一个示例: ```cpp vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); ``` 4. 创建模型:使用VTK提供的各种类和方法创建三维模型。例如,可以使用vtkSphereSource类创建一个球体模型,并将其添加到场景中: ```cpp vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New(); sphereSource->SetRadius(1.0); sphereSource->Update(); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(sphereSource->GetOutputPort()); renderer->AddActor(actor); ``` 5. 渲染场景:使用vtkRenderWindow类的Render()方法渲染场景,并显示渲染结果: ```cpp renderWindow->Render(); ``` 这只是一个简单的示例,你可以使用VTK提供的更多类和方法来创建复杂的三维模型。你可以查阅VTK的官方文档和示例代码,以获取更详细的信息和实例。 希望这对你有帮助!如果你有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值