《vtk9 book》 官方web版 第3章 - 计算机图形基础 (5 / 5)

        vtkProp的组件和其他类型

        通常希望将演员收集到一个依赖于变换的层次结构中。例如,一个机器人手臂可以由刚性连接的链接表示,这些链接在肩关节、上臂、肘部、下臂、腕关节和手部等关节处连接在一起。在这种配置中,当肩关节旋转时,期望的行为是整个手臂一起旋转,因为这些链接是连接在一起的。这是 VTK 中所称的装配的一个例子。vtkAssembly 只是 VTK 中许多类似演员的类之一。正如图 3-34 所示,这些类被排列成 vtkProps 的层次结构。(在舞台和电影术语中,道具是指出现或在舞台上使用的东西。)在 VTK 中,通过实例化一个 vtkAssembly 然后向其添加部分来形成装配。部分是 vtkProp3D 的任何实例,包括其他装配。这意味着可以将装配形成层次结构(只要它们不包含自引用循环)。装配遵守前一节“变换矩阵”中所示的转换串联规则。以下是如何创建一个简单装配层次结构的示例(来自 assembly.tcl)。

vtkSphereSource sphere
vtkPolyDataMapper sphereMapper
   sphereMapper SetInputConnection [sphere GetOutputPort]
vtkActor sphereActor
  sphereActor SetMapper sphereMapper
  sphereActor SetOrigin 2 1 3
  sphereActor RotateY 6
  sphereActor SetPosition 2.25 0 0
  [sphereActor GetProperty] SetColor 1 0 1

vtkCubeSource cube
vtkPolyDataMapper cubeMapper
  cubeMapper SetInputConnection [cube GetOutputPort]
vtkActor cubeActor
  cubeActor SetMapper cubeMapper
  cubeActor SetPosition 0.0 .25 0
  [cubeActor GetProperty] SetColor 0 0 1

vtkConeSource cone
vtkPolyDataMapper coneMapper
  coneMapper SetInputConnection [cone GetOutputPort]
vtkActor coneActor
  coneActor SetMapper coneMapper
  coneActor SetPosition 0 0 .25
  [coneActor GetProperty] SetColor 0 1 0

vtkCylinderSource cylinder
vtkPolyDataMapper cylinderMapper
  cylinderMapper SetInputConnection [cylinder GetOutputPort]
  cylinderMapper SetResolveCoincidentTopologyToPolygonOffset

vtkActor cylinderActor
  cylinderActor SetMapper cylinderMapper
  [cylinderActor GetProperty] SetColor 1 0 0

vtkAssembly assembly
  assembly AddPart cylinderActor
  assembly AddPart sphereActor
  assembly AddPart cubeActor
  assembly AddPart coneActor
  assembly SetOrigin 5 10 15

# allows faces a specified camera and is used for billboards.
  assembly AddPosition 5 0 0
  assembly RotateX 15

ren1 AddActor assembly
ren1 AddActor coneActor

Figure3-34

Figure 3-34. Figure 3-34 The vtkProp hierarchy. Props that can be transformed in 3D space are a subclass of vtkProp3D. Images can be drawn effectively with vtkImageActor. Overlay text and graphics use vtkActor2D. Hierarchical groups of vtkProps are gathered into a vtkPropAssembly. Volume rendering uses vtkVolume. Collections of transformable props create a vtkAssembly. Level-of-detail rendering uses vtkLODProp3D and vtkLODActor. A vtkFollower allows faces a specified camera and is used for billboards.

图3-34 vtkProp层次结构。可以在3D空间中进行变换的Props是vtkProp3D的子类。可以使用vtkImageActor有效绘制图像。叠加文本和图形使用vtkActor2D。vtkProps的分层组合被聚集到vtkPropAssembly中。体积渲染使用vtkVolume。可变换props的集合创建vtkAssembly。细节级别渲染使用vtkLODProp3D和vtkLODActor。vtkFollower允许面向指定摄像头,用于广告牌。

        请注意,在这个示例中,各种actor都是使用AddPart()方法添加到装配中的。装配的顶层元素是层次结构中唯一添加到渲染器中的道具(使用AddActor())。还要注意coneActor出现了两次:一次作为装配的一部分,一次作为单独的actor添加到渲染器中使用AddActor()。正如你所想象的那样,这意味着装配的渲染需要连接变换矩阵,以确保每个vtkProp3D的正确定位。此外,层次装配在拾取过程中需要特殊处理(即,在图形上选择道具),因为一个vtkProp可以在不同的装配层次结构中出现多次。在第8章“拾取”中更详细地讨论了拾取问题。

        正如图3-34所示,还有其他类型的vtkProp。这些大多数将在本书中的许多示例中进行非正式描述。特别是,当我们描述体积渲染时(请参阅第7章“体积渲染”),对vtkVolume进行了广泛覆盖。

3.11 章总结
        渲染是使用计算机生成图像的过程。计算机图形学是涵盖渲染技术的研究领域,是数据可视化的基础。

        三维渲染技术模拟光线和相机与对象或演员的交互,以生成图像。一个场景由光源、相机和演员的组合组成。对象顺序渲染技术按顺序在场景中渲染演员来生成图像。图像顺序技术逐像素渲染图像。基于多边形的图形硬件基于对象顺序技术。光線跟踪或光線投射是一种图像顺序技术。

        光照模型需要颜色的规范。我们看到了RGB(红-绿-蓝)和HSV(色调-饱和度-明度)颜色模型。对于大多数用户来说,HSV模型比RGB模型更自然。光照模型还包括由环境光、漫反射和镜面反射光引起的效果。

        计算机图形学中有四个重要的坐标系。模型系统是我们定义几何形状的三维坐标系。世界系统是全局笛卡尔坐标系。所有建模数据最终都被转换为世界系统。视图坐标系表示相机可见的内容。它是一个从(-1,1)缩放的二维系统。显示坐标系使用计算机显示器上的实际像素位置。

        齐次坐标是一个4D坐标系,我们可以在其中包含透视变换的效果。变换矩阵是作用于齐次坐标的4x4矩阵。变换矩阵可以表示演员的平移、缩放和旋转的效果。这些矩阵可以相乘以给出组合变换。

        图形编程通常使用高级图形库和专用硬件系统实现。这些专用系统提供更好的性能和更容易实现图形应用程序。这些系统中实现的常见技术包括抖动和z缓冲。抖动是一种通过混合可用颜色的组合来模拟颜色的技术。Z缓冲是一种执行隐藏线和隐藏表面消除的技术。

        可视化工具包使用基于光源、相机、演员和渲染器的图形模型。渲染器绘制到渲染窗口中。演员属性由属性对象表示,它们的几何由映射器对象表示。这些各种类的实例化共同形成一个场景。与场景中的对象的交互由vtkRenderWindowInteractor和vtkInteractorStyle类实现。这些类使用命令/观察者设计模式,触发和响应事件。用户可以观察特定事件并编写回调函数,执行任意任务,轻松扩展工具包以适用于特定应用程序。

3.12 章参考文献说明


        本章为读者提供了足够的信息,以理解计算机图形学中使用的基本问题和术语。有许多涵盖计算机图形学更详细内容的好书,建议那些希望更全面了解的读者阅读。计算机图形学的圣经是[FoleyVanDam90]。对于希望阅读更少令人生畏的书籍的人来说,[BurgerGillies89]和[Watt93]也是有用的参考书。您还可以查阅ACM SIGGRAPH会议的论文集。这些会议包括一些计算机图形学中最重要工作的论文和其他论文的参考文献。[Carlson85]为那些希望了解更多关于人类视觉系统的人提供了很好的介绍。

3.13 参考文献


[Bresenham65] J. E. Bresenham. “一种用于数字绘图机的计算机控制算法。”IBM系统杂志,4(1):25–30,1965年1月。

[BurgerGillies89] P. Burger 和 D. Gillies。交互式计算图形功能、过程和设备级方法。Addison-Wesley,Reading, MA,1989年。

[Carlson85] N. R. Carlson。行为生理学(第3版)。Allyn and Bacon Inc.,Newton, MA,1985年。

[Dartnall83] H. J. A. Dartnall,J. K. Bowmaker 和 J. D. Mollon。“人类视觉色素:来自七个人眼睛的显微光度测定结果。”皇家学会会议录,伦敦,1983年。

[FoleyVanDam90] J. D. Foley,A. van Dam,S. K. Feiner 和 J. F. Hughes。计算机图形学原理与实践(第2版)。Addison-Wesley,Reading, MA,1990年。

[Fuchs80] H. Fuchs,Z. M. Kedem 和 B. F. Naylor。“通过先验树结构生成可见表面的改进模型。”计算机图形学(SIGGRAPH‘80),14(3):124–133,1980年。

[Gamma95] E. Gamma,R. Helm,R. Johnson,J. Vlissides。设计模式 可重用面向对象软件的元素。Addison-Wesley,1995年。ISBN0-201-63361-2。

[Ousterhout94] J. K.Ousterhout。Tcl和Tk工具包。Addison-Wesley Publishing Company,Reading, MA,1994年。

[Watt93] A. Watt。3D计算机图形学(第2版)。Addison-Wesley,Reading, MA,1993年。

[Whitted80] T. Whitted。“用于阴影显示的改进照明模型。”ACM通讯,23(6):343-349,1980年。

3.14 练习


3.1 估计一束光从太阳发射、到达地球并击中一个一平方米的野餐毯的几率。您可以假设太阳是一个点光源,均匀地向所有方向发射光线。从太阳到地球的大致距离为150,000,000公里。

a) 当太阳正好在头顶上方时,几率是多少?

b) 当太阳相对于野餐毯的表面法线倾斜45度时,几率是多少?

c) 您做了什么样的假设或近似?

3.2 根据您在练习3.1中的结果,确定一束光从太阳射到野餐毯上并进入观察者眼睛的几率存在哪些困难?

3.3 青色可以在HSV和RGB颜色空间中表示,如图3-4所示。这两种青色的表示不会产生相同的波长强度图。它们有何不同?

3.4 vtkSphereSource类生成一个球体的多边形模型。使用本章末尾的示例作为起点,创建一个程序来显示一个白色的球体。将环境和漫反射强度设置为0.5。然后在此程序中添加一个for循环,调整这个球体的环境和漫反射颜色,使得随着循环的进行,漫反射颜色从红色变为蓝色,环境颜色从蓝色变为绿色。您也可以尝试调整其他光照参数,如镜面颜色、环境、漫反射和镜面强度。

3.5 使用练习3.4中描述的vtkSphereSource,创建一个程序来显示在位置为(1,1,1)处放置了一个光源的球体。然后通过添加一个for循环来扩展此程序,调整活动摄像机的裁剪范围,以便可以看到球体内部的逐渐增加的部分。通过增加裁剪范围的第一个值,您将调整前裁剪平面的位置。一旦前裁剪平面开始与球体相交,您应该能够看到其内部。vtkSphereSource的默认半径为0.5,因此请确保您以小于1.0的增量调整裁剪范围。

3.6 修改“渲染一个圆锥”的程序,以便用户可以输入齐次坐标中的世界坐标,并且程序将输出结果的显示坐标。参考vtkRenderer的参考页面,其中有一些有用的方法。

a) 有哪些世界坐标您预计在显示坐标中是未定义的?

b) 当世界坐标在相机后面时会发生什么?

3.7 考虑对一个10x10像素的正方形进行光栅化。比较在平面、Gouraud或Phong着色的情况下需要进行的算术操作数量的近似差异。

3.8 使用z缓冲时,我们在光栅化一个基元时还必须插值z值(或深度)。从练习3.7开始,计算在光栅化我们的正方形时计算z缓冲值的额外负担是什么?

3.9 vtkTransform有一个GetOrientation()方法,它查看从一系列旋转构建的结果转换矩阵,并提供将重现该矩阵的单个x、y和z旋转的方法。指定一系列旋转的顺序,并使用GetOrientation()请求方向。然后按照vtkActor执行旋转的相同顺序应用旋转,并验证生成的4x4转换矩阵是否相同。

3.10 vtkTransform默认情况下在当前转换的右侧应用新的转换。PostMultiply()方法更改了这种行为,使得转换应用在左侧。

a) 使用vtkTransform创建一个变换,使用各种变换操作符,包括Scale()、RotateXYZ()和Translate()。然后使用PostMultiplyOn()创建相同的矩阵。

b) 在一系列转换的右侧应用旋转实际上是围绕其自身坐标系旋转对象。使用rotations.tcl脚本验证这一点。你能解释一下吗?

c) 在一系列转换的左侧应用旋转实际上是围绕世界坐标系旋转对象。修改rotations.tcl脚本以说明这一点。(提示:您将需要使用vtkTransform创建一个显式变换,并使用SetUserMatrix()设置actor的变换。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/455636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C++]20.实现红黑树。

实现红黑树 一.基本概念:1.红黑树的概念:2.红黑树的性质: 二.实现红黑树:1.基本结构:2.插入节点的多种情况:1.叔叔存在且为红:2.叔叔不存在/存在且为黑(单旋变色)3.叔叔不存在/存在且为黑(多旋&…

Wi-Fi 6E简介:扩展Wi-Fi的频谱资源

一、Wi-Fi 6E是什么? Wi-Fi 6E是Wi-Fi 6的一个增强版本,其中的“E”代表“Extended”。它采用了相同的技术标准,但使用了更高的频段。Wi-Fi 6E在5 GHz频段之外引入了新的6 GHz频段,为用户提供了更多的可用频谱,以便提…

滑动窗口算法(1)

目录 基本概念 209.长度最小的子数组 一、题目描述 二、思路解析 三、代码 3.无重复字符的最长子串 一、题目描述 二、思路解析 三、代码 1004.最大连续1的个数 一、题目描述 二、思路解析 三、代码 1658.将x减到0的最小操作数 一、题目描述 二、思路解析 三、…

JSP-内置对象

Out对象 作用&#xff1a;用来给页面输出数据。 主要方法&#xff1a; Print(string) </br>换行 Println(string) 方法同上 <%page language"java" contentType"text/html;charsetUTF-8"%> <html><head><title>test.…

基于深度学习的图像去雨去雾

基于深度学习的图像去雨去雾 文末附有源码下载地址 b站视频地址&#xff1a; https://www.bilibili.com/video/BV1Jr421p7cT/ 基于深度学习的图像去雨去雾&#xff0c;使用的网络为unet&#xff0c; 网络代码&#xff1a; import torch import torch.nn as nn from torchsumm…

Prompt提示工程上手指南:基础原理及实践(二)-Prompt主流策略

前言 上篇文章将Prompt提示工程大体概念和具体工作流程阐述清楚了&#xff0c;我们知道Prompt工程是指人们向生成性人工智能&#xff08;AI&#xff09;服务输入提示以生成文本或图像的过程中&#xff0c;对这些提示进行精炼的过程。生成人工智能是一个根据人类和机器产生的数…

【Python】使用plt库绘制动态曲线图,并导出为GIF或MP4

一、绘制初始图像 正常使用plt进行绘图&#xff0c;这里举例一个正弦函数&#xff1a; 二、绘制动态图的每一帧 思路&#xff1a; 根据横坐标点数绘制每一帧画面每次在当前坐标处&#xff0c;绘制一个点和垂直的线&#xff0c;来表示当前点可以在点上加个坐标等样式来增加…

Gut Microbes | 新生儿微生物组研究的方法学挑战

摘要 新生儿出生后&#xff0c;肠道菌群的定植对新生儿的健康发育起着至关重要的作用&#xff0c;并影响其日后的健康和疾病。了解新生儿肠道菌群的发育以及其与新生儿宿主的相互作用是一个重要的研究领域。然而&#xff0c;该领域的研究必须解决影响研究方法设计和实施的一系…

【Java系列】OOM 时,JVM 堆栈信息保存和分析

一、前言 在日常开发中&#xff0c;即使代码写得再谨慎&#xff0c;免不了还是会发生各种意外的事件&#xff0c;比如服务器内存突然飙高&#xff0c;又或者发生内存溢出(OOM)。当发生这种情况时&#xff0c;我们怎么去排查&#xff0c;怎么去分析原因呢&#xff1f; 一般遇到…

展厅设计中灯光的要点都是什么

1、白炽灯 白炽灯也就是普通普通白炽灯泡白炽灯有显色性强&#xff0c;开灯即亮&#xff0c;明暗可调&#xff0c;结构简单&#xff0c;造价低等优点&#xff0c;但缺点是使用寿命短&#xff0c;光效较低展厅设计中常使用于走道和其他部位。 2、卤钨灯 充气白炽灯填充气体中含有…

代码随想录day20(1)二叉树:二叉树的最小深度(leetcode111)

题目要求&#xff1a;求出一棵二叉树的最小深度 思路&#xff1a;最小深度指的是从根节点到最近叶子节点的最短路径上的节点数量&#xff08;左右孩子必须都为空&#xff01;&#xff09;。思路类似于求二叉树的最大深度&#xff0c;仍然采用后序遍历&#xff0c;增加判断只有…

Docker启动安装nacos(踩过坑版)

1、Docker 拉取镜像 docker pull nacos/nacos-server:v2.1.0 2、创建宿主机挂载目录 mkdir -p /mydata/nacos/logs/ mkdir -p /mydata/nacos/conf/ 3、启动nacos并复制文件到宿主机&#xff0c;关闭容器 启动容器 docker run -p 8848:8848 --name nacos -d nacos/nacos-se…

通过Maven创建Web工程

通过Maven创建Web工程 方式一方式二 方式一 1.先创建一个Maven工程 2.把该Maven模块的pom文件里添加一个war 3.选中该Maven模块 点击项目架构 4.手动添加一个Web架构 方式二 1.也是new一个模块 但是直接配置好Web 2.这里就是我IDEA对Maven的设置 3.第一次创建 可能…

【C++】STL--String

这一节主要总结string类的常见接口&#xff0c;以及完成了string类的模拟实现。 目录 标准库的String类 string类常见接口 string类对象的常见构造 string析构函数&#xff1a;~string string类对象的容量操作 string类对象的访问及遍历操作 string类对象的修改操作 s…

jvm题库详解

1、JVM内存模型 注意&#xff1a;这个是基于jdk1.8之前的虚拟机&#xff0c;在jdk1.8后 已经没有方法区&#xff0c;一并合并到堆中的元空间了 JVM内存区域总共分为两种类型 线程私有区域&#xff1a;程序计数器、本地方法栈和虚拟机栈 线程共享区域&#xff1a;堆&#xff08…

让若依生成的service、mapper继承mybatisPlus的基类

前言&#xff1a;若依继承mybatisPlus后&#xff0c;生成代码都要手动去service、serviceImpl、mapper文件去继承mybatisplus的基类&#xff0c;繁琐死了。这里通过修改若依生成模版从而达到生成文件后直接使用mybatisPlus的方法。 一、首先找到若依生成模版文件位置&#xff…

顶顶通呼叫中心中间件-群集模式配置

文章目录 群集模式介绍联系我们配置流程群集模式下呼叫线路配置 群集模式介绍 在大规模的外呼或者呼入系统&#xff0c;比如整个系统需要1万并发&#xff0c;单机最高也就3000-5000并发&#xff0c;这时候就需要多机群集了。顶顶通呼叫中心中间件使用的是 redis 数据库&#x…

你选的Six Sigma咨询公司靠谱吗?保姆级避坑指南

近年来&#xff0c;企业为了追求更高的运营效率和产品质量&#xff0c;纷纷寻求Six Sigma这样的先进管理方法。然而&#xff0c;市场上的咨询公司琳琅满目&#xff0c;如何选择一家真正靠谱、能带来实际效益的咨询公司呢&#xff1f; 一、了解公司背景和实力 在选择Six Sigma咨…

msdn我告诉你itellyou做一个安静的工具站,各种windows镜像下载,iso体积都是很小的那种

官网地址&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 可以看到里面集成了各种操作系统&#xff0c;可以下载使用。 或者在他的新站点&#xff1a;登录 里面有最新的windows11系统可以下载&#xff0c;但是需要登陆之后才可以&#xff0c;随便第三方账号登陆即可&…

【Devin AI】全球首位AI程序员登场,程序员该如何保住饭碗?编程新纪元的革命已到来!

程序员们&#xff0c;警惕&#xff01;我们的饭碗要被砸了&#xff01; 一觉醒来&#xff0c;全球首位AI程序员 Devin 上线了&#xff01;直接引爆整个科技圈。 Devin被介绍为世界首个完全自主的AI软件工程师。只需一句指令&#xff0c;它可端到端地构建和部署整个开发项目。 …