VTK中的基本概念

1.三维场景中的基本要素

三维场景的基本要素包含:灯光、相机、颜色和纹理映射

(1)灯光vtkLight

光的本质是特定频段的电磁波,所以灯光的本质是特定频段(可见光频段)的电磁波发射器;依据发射可见光频段的方式不同,可以将灯光分为位置灯光和方向灯光

a) 位置灯光
  • 概念:又名聚光灯,光源在场景的某个位置,可以指定光源的衰减值和锥角等特征,如音乐演唱会的聚光灯,将灯光聚焦在某一个具体的局部区域,并且颜色可以切换
  • SetColor:设置聚光灯发射的可见光的颜色
  • SetPosition:设置聚光灯光在场景中的位置
  • SetFocalPoint:设置聚光灯的聚焦点,即指向场景中的哪个点
  • SetIntensity:设置聚光灯的强度
  • SetSwitch/SwitchOn/SwitchOff:设置聚光灯的开关
b) 方向灯光 - vtkDirectionalLight
  • 概念:光源的位置在无穷远,光线可以看作是相互平行的,且没有衰减值,如太阳光;一般用于模拟全局光照
  • SetPosition:方向灯光该函数设置的位置是象征性的,目的是配合SetFocalPoint确定光线的方向
  • SetPositional(0):设置是否为位置光源,0表示方向光源
  • SetFocalPoint:设置光照的焦点,配合SetPosition确定光照的方向
  • SetDirection:设置光照的方向,优先级高于SetPosition和SetFocalPoint的计算结果
  • GetDirection:获取光照的方向
  • SetShadowAttenuation:设置阴影的衰减系数,用于控制阴影的明暗程度,注意:仅在启用阴影渲染时生效

(2)相机vtkCamera

a) 相机的作用

将三维场景投影到二维平面中,类似于生物的眼睛

b) 相机的属性
  • SetPosition:相机在三维场景中的位置
  • SetFocusPosition:相机的聚焦点
  • SetViewUp:朝上方向,哪个方向为相机的朝上方向
  • 投影方向:相机位置和相机焦点形成的向量方向即为相机的投影方向
  • 投影方法:场景中的Actor是如何投影到相机的成像平面的,包括正交投影和透视投影
  • 视角:视野范围,主要取决于焦距,焦距越大视野越小,即视角也越小,如CCD相机的焦距一般很长
  • 前后裁剪平面:SetClippingRange,只有裁剪区间的场景物体才能被看到

(3)颜色vtkColor

颜色是物体的一种属性,在VTK中由vtkProperty所控制

(4)纹理映射

纹理映射的目的是吧渲染时把二维图像贴到三维物体的表面上,纹理映射的要素包含:待贴图表面、纹理坐标、纹理映射;后期会详细介绍纹理映射的具体细节,这里只需要理解它存在的本质就是为三维空间中的物体贴图而生的就好了

2.坐标系统和空间变换

(1)坐标系统

a) Model坐标系统

定义模型(如立方体)时候所采用的坐标系,它的本质是一个局部的笛卡尔坐标系

b) World坐标系统

防止模型对象的三维空间坐标系,它在VTK场景中是唯一的,用于确定各个对象在三维空间中的具体位置和角度

c) View坐标系统

相机内部的坐标系,用于将World坐标系转换为一个二维图像,三轴的取值为[-1.0,1.0]

d) Display坐标系统

显示屏的坐标系,单位是像素

(2)空间变换

a)线性变换
  • 平移变换:改变物体在三维空间中的位置
  • 旋转变换:改变物体在三维空间中的朝向,关键参数:旋转轴和旋转角度
  • 缩放变换:改变物体在三维空间中的尺寸大小,包含均匀缩放和非均匀缩放,判断均匀缩放和非均匀缩放的标准是确定缩放后物体的XYZ缩放比例是否相同
  • 剪切变换:类似于用一把巨大的刀切掉物体的一部分而保留剩下的部分,聚焦展示几何体的内部结构或特定区域,解决 “复杂几何体全貌显示时内部细节被遮挡” 的问题
b)非线性变换

VTK基础学习期间我们不做过多介绍,常见的有薄样条变换,模拟薄板受外力弯曲的效果,变形后保持平滑,无折角

c)透视变换
  • vtkPerspectiveTransform,模拟相机透视投影的变换,将三维空间中的点映射到二维图像平面
  • 透视变换的关键参数:相机内参和相机外参

3.VTK管线和渲染引擎

(1)VTK管线

a) 概念

本质是数据从产生到流向渲染引擎之前的流动和处理流程
vtk数据源 -> Filter -> Mapper

b) 链接

可视化管线使用SetInputConnection和GetOutputPort函数进行链接,要求两部分的数据类型必须一致

c) 执行

遵循惰性赋值的原则:类似于Make编译机制,只有源文件修改时间大于编译时间,才会进行重新编译

(2)渲染引擎

a) 作用

将管线输出的数据进行可视化表达(即通过显示屏呈现给用户)

b) 概念

在VTK中渲染引擎包括:vtkActor(vtkVolumn)、vtkRender(vtkLight、vtkCamera)、vtkRenderWindow、vtkInteractor等

  • vtkActor接收来自vtk管线的模型数据,并将数据转为可可视化表达的图元数据
  • vtkRender是可视化的场景,向场景中添加模型对象,配合灯光和相机等模拟一个三维场景
  • vtkRenderWindow是可视化场景的窗口,用于向用户呈现vtkRender场景对象
  • vtkInteractor是交互器,是用户和三维场景交互的桥梁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/97752.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/97752.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/97752.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2348.全0子数组的数目

给你一个整数数组 nums ,返回全部为 0 的 子数组 数目。 子数组 是一个数组中一段连续非空元素组成的序列。 示例 1: 输入:nums [1,3,0,0,2,0,0,4] 输出:6 解释: 子数组 [0] 出现了 4 次。 子数组 [0,0] 出现了 2 次。…

【wpf】从 DataContext 到依赖属性:WPF 自定义控件 ImageView 的优化之路

从 DataContext 到依赖属性:WPF 自定义控件 ImageView 的优化之路 最近我在做一个 WPF 项目,需要封装一个 ImageView 控件,用来显示图像并处理鼠标交互。 在实际开发中,我遇到了一系列和 数据绑定 有关的问题: 控件需要…

人力资源管理的思维方式学习笔记2

战略人力资源管理的思维方式——北京师范大学政府管理学院——王建民 教授3.1.理念:人力资源是第一战略资源 我们先来了解海尔集团公司实施发展战略的情况。海尔集团创立于1984年,根据官方网站的介绍,目前是一家全球领先的美好生活解决方案服…

汽车网络安全 CyberSecurity ISO/SAE 21434 测试之一

一、什么是网络安全? 在智能网联和自动驾驶技术进入汽车行业之前,功能安全 一直是汽车开发的核心。 简单来说,功能安全的目标是确保车辆的系统在出现故障时,不会对人、环境或者设备造成危害。比如,刹车失灵了&#xff…

力扣(LeetCode) ——217. 存在重复元素(C++)

题目:217. 存在重复元素 示例1: 输入: nums [1,2,3,1] 输出: true 解释: 元素 1 在下标 0 和 3 出现。 示例2: 输入: nums [1,2,3,4] 输出: false 解释: 所有元素都…

Redis 高可用与集群原理

Redis 高可用与集群原理1. 前言 Redis 单机虽然高性能,但一旦节点宕机,数据丢失或服务不可用问题会非常严重。为了解决这一问题,Redis 提供了 主从复制、哨兵(Sentinel)、Cluster 集群 等高可用机制。 这一篇文章我们重…

Oracle OCP认证考试题目详解082系列第31题

考察知识点:SET VERIFY ON命令 英文题目 Which two statements are true about the SET VERIFY ON command? A.It displays values for variables prefixed with && B.It displays values for variables created by the DEFINE command C.It can be used in SQL Dev…

【WebSocket✨】入门之旅(五):WebSocket 的安全性

本篇文章将讲解 WebSocket 的安全性,特别是如何防止常见的 WebSocket 安全漏洞,如中间人攻击(MITM)、XSS、CSRF 等。我们将介绍如何使用 wss:// 协议保障数据传输的安全,并给出一些安全最佳实践,帮助你在使…

流程图用什么工具做?免费/付费工具对比,附在线制作与下载教程

在日常工作和学习中,流程图是一种高效的可视化工具——项目开发时梳理需求逻辑、业务推进中拆解步骤节点、学术研究里呈现论证框架,甚至是生活中规划旅行路线,都能借助流程图让复杂信息变得清晰易懂。但面对市面上五花八门的流程图工具&#…

Oracle重做日志(Redo Log):数据一致性的“守护者“

在Oracle数据库的三大核心文件中,数据文件承载着最终的业务数据,控制文件记录着数据库的"身份档案",而重做日志(Redo Log)则扮演着"事务日记"的关键角色——它以不可篡改的方式记录每一次数据变更…

C++学习:map/set源码剖析+利用红黑树封装map/set

前面我们已经学习了红黑树这个高级数据结构的实现。我们知道STL的map/set的底层数据结构为红黑树,本期就查看STL源码的map/set,并结合着这之前的红黑树的实现,模拟实现map和set的一部分功能 STL源码:楼田莉子/CPP代码学习 作者的个…

【c++进阶系列】:map和set的模拟实现(附模拟实现的源码)

🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录:每一次抉择,都是将未来的自己轻轻推向某个方向 ★★★ 本文前置知识: 红黑树 原理 那么在上一期博客中&#xf…

JVM默认栈大小

JVM 里线程栈的大小不是一个固定值,而是由 操作系统平台、JVM 实现版本、以及启动参数 共同决定的。 常见情况(以 HotSpot 为例): Linux / macOS 64 位 JVM 默认大约是 1M (1024 KB)32 位 JVM 默认大约是 3…

AI 机器视觉检测方案:破解食物包装四大质检难题,筑牢食品安全防线

在食品生产领域,包装盒或包装袋作为食品的直接包装载体,其质量优劣直接关系到食品安全与企业声誉。传统人工质检在应对食物包装生产的高速节奏与复杂质量问题时,逐渐暴露出诸多局限性,成为企业发展的瓶颈。而 AI 视频检测技术的出…

嵌入式 Linux 安全简介-第二部分

大家好!我是大聪明-PLUS!这是有关嵌入式Linux安全性的文章的第二部分。在第一部分中,我们讨论了一些安全概念、威胁建模、安全启动、代码和数据加密、加密密钥和密钥存储技术。在第二部分中,让我们继续讨论提高嵌入式 Linux 设备安…

Vue3+JS 复杂表单实战:从验证到性能优化的全流程方案

继上一篇分享组合式 API Hook 封装后,这次想聚焦前端开发中 “让人又爱又恨” 的场景 —— 复杂表单。不管是管理后台的配置表单,还是用户中心的多步骤提交,表单处理都占了业务开发的 40% 以上。这篇文章会从实际项目痛点出发,分享…

[特殊字符] Python在CentOS系统执行深度指南

文章目录1 Python环境安装与配置问题1.1 系统自带Python的限制1.2 安装Python 3的常见问题及解决方案1.3 SSL模块问题解决方案1.4 环境变量配置与管理1.5 软件集合(SCL)替代方案2 包管理与虚拟环境问题2.1 pip包管理器问题与解决方案2.2 虚拟环境的最佳实…

ptx 简介03,ldmatrix 的应用实例解析

1. 实例编译 运行 main.cu //nvcc -g -lineinfo -stdc17 -archnative main.cu -o main#include <iostream> #include <thrust/device_vector.h>/* ldmatrix.sync.aligned.shape.num{.trans}{.ss}.type r, [p];.shape {.m8n8}; .num {.x1, .…

PostgreSQL 的核心优势数据库优化与面试问题解析

Part0: PostgreSQL 的核心优势PostgreSQL 的核心优势可以总结为&#xff1a;它不仅仅是一个关系型数据库&#xff0c;更是一个功能极其强大、设计高度严谨、且具有无限扩展潜力的数据平台。其核心优势主要体现在以下几个方面&#xff1a;1. 高度符合 SQL 标准与可靠性&#xff…

牛客周赛 Round 109 (小红的直角三角形

小红的直角三角形思路&#xff1a;当作向量来求&#xff0c;向量乘为0&#xff1b;#include<bits/stdc.h> #define ll long long #define endl "\n" using namespace std; typedef pair<ll, ll> pll; int n; vector<pll> u; void solve() {int x,…