《vtk9 book》 官方web版 第3章 - 计算机图形基础 (1 / 6)
计算机图形是数据可视化的基础。从实际角度来看,可视化是将数据转换为一组图形基元的过程。然后使用计算机图形的方法将这些基元转换为图片或动画。本章讨论了基本的计算机图形原理。我们首先描述了光线和物体如何相互作用形成我们所看到的景象。接下来,我们将介绍如何使用计算机图形技术模拟这些相互作用。硬件问题在这里扮演着重要角色,因为现代计算机内置了图形硬件支持。本章最后通过一系列示例说明了我们针对3D计算机图形的面向对象模型。
3.1 引言
计算机图形是使用计算机生成图像的过程。我们称这个过程为渲染。有许多类型的渲染过程,从2D绘图程序到复杂的3D技术。在本章中,我们将重点介绍用于可视化的基本3D技术。
我们可以将渲染视为将图形数据转换为图像的过程。在数据可视化中,我们的目标是将数据转换为图形数据或图形基元,然后进行渲染。我们的渲染目标并不是照片般的逼真,而是信息内容。我们还努力实现交互式图形显示,使我们能够直接操纵底层数据。本章解释了从图形数据渲染图像的过程。我们首先看一下光线、摄像机和物体(或演员)在我们周围的世界中是如何相互作用的。基于这一基础,我们解释了如何在计算机上模拟这个过程。
图3-1展示了我们看物体(比如一个立方体)时发生的简化过程。光线从光源向各个方向发射。(在这个例子中,我们假设光源是太阳。)一些光线碰巧击中了立方体,其表面吸收了部分入射光并反射了剩余的光。一部分反射光可能朝向我们并进入我们的眼睛。如果这样发生,那么我们就“看到”了这个物体。同样,太阳的一些光线会照射到地面,其中一小部分会反射进入我们的眼睛。
可以想象,一束光线从太阳穿过空间击中一个相对较小的行星上的一个小物体的几率是很低的。这种情况又受到光线反射到我们的眼睛的几率很低的影响。我们之所以能看到物体,只是因为太阳产生了如此巨大的光量,以至于它压倒了这些几率。虽然在现实生活中这种情况可以成立,但尝试用计算机模拟它可能会很困难。幸运的是,有其他方法来解决这个问题。
一种常见且有效的3D计算机图形技术叫做光线追踪或光线投射。光线追踪通过跟踪每条光线的路径来模拟光线与物体的相互作用。通常情况下,我们从观察者的眼睛反向跟踪光线,直到确定光线击中了什么物体。光线的方向是朝向我们所看的方向(即视线方向),包括透视效果(如果需要的话)。当一条光线与一个物体相交时,我们可以确定该点是否被我们的光源照亮。这是通过从交点处向光源追踪一条光线来实现的。如果光线与光源相交,那么该点就被照亮。如果在到达光源之前光线与其他物体相交,那么该光源就不会对该点产生照明效果。对于多个光源,我们只需为每个光源重复这个过程。所有光源的总贡献,再加上任何环境散射光,将决定该点的总照明或阴影。通过反向跟踪光线的路径,光线追踪只关注最终进入观察者眼睛的光线。这极大地减少了模拟程序需要计算的光线数量。
尽管我们将光线追踪描述为一种渲染过程,但令人惊讶的是,许多图形界的成员并不使用它。这是因为光线追踪是一种相对缓慢的图像生成方法,因为它通常是通过软件实现的。其他图形技术已经发展出来,使用专用计算机硬件生成图像。要理解为什么会出现这种情况,我们需要简要了解计算机图形的分类和历史。
图像顺序和物体顺序方法
渲染过程可以分为两类:图像顺序和物体顺序。光线追踪是一种图像顺序过程。它通过逐个确定每条光线的行为来工作。物体顺序过程则是逐个渲染每个物体。在上面的例子中,物体顺序技术首先会渲染地面,然后再渲染立方体。
换个角度考虑绘制一幅谷仓的图片。使用图像顺序算法,你会从画布的左上角开始放下正确颜色的油漆滴(每个油漆滴被称为像素)。然后你会向右移动一点,放下另一滴油漆。你会一直持续到达画布的右边,然后你会向下移动一点,开始下一行。每次放下油漆滴,你都要确保它是画布上每个像素的正确颜色。完成后,你会得到一幅谷仓的画。
一种替代方法是基于更自然(至少对许多人来说)的物体顺序过程。我们通过绘制场景中的不同物体来工作,与物体实际位置无关。我们可能从后到前、从前到后或以任意顺序绘制。例如,我们可以先绘制天空,然后再加入地面。在这两个物体绘制完成后,我们再加入谷仓。在图像顺序过程中,我们以非常有条不紊的方式在画布上工作,从左到右,从上到下。而在物体顺序过程中,我们往往会根据正在绘制的物体跳跃到画布的另一部分。
计算机图形学领域最初使用物体顺序过程。早期的工作大部分与硬件显示设备密切相关,最初是矢量显示器。这不过是一种示波器,但它鼓励将图形数据绘制为一系列线段。随着最初的矢量显示器被目前无处不在的光栅显示器所取代,将图形数据表示为一系列要绘制的物体的概念得以保留。IBM的Bresenham [Bresenham65] 在早期的工作中主要关注如何将线段正确地转换为适合于线绘图仪的形式。同样的工作也应用于将线段渲染到取代示波器的光栅显示器上。从那时起,硬件变得更加强大,能够显示比线段更复杂的基元。
直到20世纪80年代初,Turner Whitted [Whitted80] 的一篇论文促使许多人从更物理的角度来考虑渲染。最终,光线追踪成为传统物体顺序渲染技术的一个严肃竞争者,部分原因是它能够产生高度逼真的图像。物体顺序渲染因为有大量专门设计用于快速渲染物体的图形硬件而保持其流行。光线追踪往往是在没有任何专门的硬件支持下进行的,因此是一个耗时的过程。
表面渲染与体积渲染
到目前为止,本文的讨论在默许的情况下假设,当我们渲染一个物体时,我们看到的是物体的表面以及它们与光的相互作用。然而,常见的物体,如云、水和雾,是半透明的,或者散射通过它们的光。这样的物体不能使用仅基于表面相互作用的模型来渲染。相反,我们需要考虑物体内部的变化特性才能正确地渲染它们。我们将这两种渲染模型称为表面渲染(即渲染物体的表面)和体积渲染(即渲染物体的表面和内部)。
一般来说,当我们使用表面渲染技术渲染一个物体时,我们会用表面描述(如点、线、三角形、多边形或2D和3D样条线)对物体进行数学建模。物体的内部没有被描述,或者只是从表面表示中隐含地表示(即表面是体积的边界)。尽管存在一些允许我们使表面透明或半透明的技术,仍然有许多现象不能仅通过表面渲染技术来模拟(例如散射或光的发射)。特别是当我们试图渲染物体内部的数据,如来自CT扫描的X射线强度时,情况尤其如此。
体积渲染技术允许我们看到物体内部的不均匀性。在先前的CT示例中,我们可以通过考虑数据的表面和内部的强度值来实现真实地再现X射线图像。虽然在本文的这一点上描述这个过程为时尚早,但你可以想象将我们在前一节中的光线追踪示例扩展。因此,光线不仅与物体的表面相互作用,还与内部相互作用。
在本章中,我们将重点介绍表面渲染技术。虽然没有体积渲染强大,但表面渲染被广泛使用,因为它相对于体积技术来说速度比较快,并且允许我们为各种数据和物体创建图像。第7章 - 高级计算机图形更详细地描述了体积渲染。
可视化而非图形学
尽管作者很乐意提供一份关于计算机图形的全面论述,但这样的讨论超出了本文的范围。相反,我们区分了可视化(探索、转换和映射数据)和计算机图形(映射和渲染)。重点将放在可视化的原则和实践上,而不是3D计算机图形。在本章和第7章 - 高级计算机图形中,我们介绍了基本概念,并提供了对3D计算机图形的实用知识。对于那些对这个领域更感兴趣的人,我们建议您参考本章末尾的“参考文献注”中推荐的书籍。
我们对这种立场的一个遗憾是,某些渲染技术本质上是可视化技术。我们在前一段中可以看到这一点的暗示,那里我们使用“映射”这个术语来描述可视化和计算机图形。目前并且很可能永远不会有一个明确的可视化和图形之间的界限。例如,许多研究人员认为体积渲染完全属于可视化领域,因为它涉及到了最重要的可视化数据形式之一。我们的区分主要是为了我们自己的方便,并为我们提供了完成本文的机会。我们建议认真学习可视化的学生用更深入的计算机图形和体积渲染书籍来补充本文提供的材料。
接下来的几页中,我们将更详细地描述渲染过程。我们首先描述了几种颜色模型。接下来,我们将检查渲染过程的主要组成部分。有光源,如太阳,我们希望渲染的物体,如立方体或球体(我们将这些物体称为演员),还有一个看向世界的摄像机。这些术语来自电影行业,大多数人都比较熟悉。演员代表图形数据或物体,光源照亮演员,摄像机通过将演员投影到视图平面上构建图像。我们将光源、摄像机和演员的组合称为场景,并将渲染过程称为渲染场景。
3.2 颜色
对于人类可见的电磁波谱,包含了从大约400到700纳米的波长。进入我们眼睛的光由这些波长的不同强度组成,如图3-2所示的一个例子。这种强度图定义了光的颜色,因此不同的图导致了不同的颜色。不幸的是,我们可能察觉不到这种差异,因为人眼会丢弃大部分这些信息。人眼中有三种颜色感受器,称为锥体。每种类型对应400到700纳米波长范围的一个子集,如图3-3所示。我们看到的任何颜色都被我们的眼睛编码为这三种重叠的响应。这是从实际进入我们眼睛的信息量大大减少。结果,人眼无法识别出任何颜色的不同,其响应曲线应用于人眼响应曲线时,产生相同的三重响应。这也意味着我们可以使用简化形式在计算机中存储和表示颜色,而人眼无法识别出其中的差异。
我们用来描述颜色的两个简化的组件系统是RGB和HSV颜色系统。RGB系统根据红、绿和蓝的强度表示颜色。这可以被认为是一个三维空间,其轴是红、绿和蓝。一些常见的颜色及其RGB分量如图3-4所示。
HSV系统根据色调、饱和度和亮度表示颜色。亮度分量也称为亮度或强度分量,表示颜色中有多少光。0.0的值将始终给你黑色,而1.0的值将给你一些明亮的东西。色调表示颜色的主导波长,并且通常使用一个圆圈来进行说明,如图3-5所示。这个圆圈上的每个位置表示一个不同的色调,可以使用一个角度来指定。当我们指定一个色调时,我们使用从零到一的范围,其中零对应于色调圈上的零度,而一对应于360度。饱和度表示色调在颜色中的混合程度。例如,我们可以将值设置为1,这将给我们一个明亮的颜色,将色调设置为0.66,这将给我们一个主导波长为蓝色的颜色。现在,如果我们将饱和度设置为1,颜色将是一个明亮的原色蓝。如果我们将饱和度设置为0.5,颜色将是天蓝色,一种混入更多白色的蓝色。如果我们将饱和度设置为零,这表示颜色中没有主导波长(色调)比其他波长多。结果,最终颜色将是白色(无论色调值如何)。图3-4列出了一些常见颜色的HSV值。
Color | RGB | HSV |
---|---|---|
Black | 0,0,0 | ,,0 |
White | 1,1,1 | *,0,1 |
Red | 1,0,0 | 0,1,1 |
Green | 0,1,0 | 1/3,1,1 |
Blue | 0,0,1 | 2/3,1,1 |
Yellow | 1,1,0 | 1/6,1,1 |
Cyan | 0,1,1 | 1/2,1,1 |
Magenta | 1,0,1 | 5/6,1,1 |
Sky Blue | 1/2,1/2,1 | 2/3,1/2,1 |
3.3 灯光
控制渲染过程的重要因素之一是光与场景中的角色的相互作用。如果没有灯光,最终的图像将是黑色且缺乏信息。在很大程度上,发射光线与场景中角色的表面(有时还包括内部)的相互作用定义了我们所看到的东西。一旦光线与场景中的角色相互作用,我们就有了相机可以观看的东西。
在计算机图形中使用的许多不同类型的灯光中,我们将讨论最简单的一种,即无限远的点光源。与我们在家里和工作中使用的灯光相比,这是一个简化的模型。我们习惯使用的灯光通常是从空间中的一个区域辐射出来的(白炽灯泡中的灯丝,或者荧光灯中的发光气体)。点光源照明模型假定光是从空间中的一个点向所有方向发射的。对于无限远的光源,我们假设它位于被照亮的物体的无限远处。这是很重要的,因为这意味着来自这样一个光源的入射光线将彼此平行。而本地光源(例如房间中的灯)的发射光线则不是平行的。图3-6说明了有限体积的本地光源与无限点光源之间的差异。我们的无限光源发出的光的强度在传播过程中也保持恒定,与物理光实际上遵循的1/距离平方关系形成对比。正如你所看到的,这是一个很大的简化,这将使我们能够使用更简单的光照方程。
相关文章:
《vtk9 book》 官方web版 第3章 - 计算机图形基础 (1 / 6)
计算机图形是数据可视化的基础。从实际角度来看,可视化是将数据转换为一组图形基元的过程。然后使用计算机图形的方法将这些基元转换为图片或动画。本章讨论了基本的计算机图形原理。我们首先描述了光线和物体如何相互作用形成我们所看到的景象。接下来,…...
负载均衡是什么,负载均衡有什么作用
一、什么是负载均衡 负载均衡是一种在计算机网络和系统架构中使用的技术,用于均衡分发工作负载到多个资源,比如:服务器、计算节点或存储设备上,以提高系统的性能、可伸缩性。 在传统的单个服务器架构中,当请求量增加…...
Leetcode 3020. Find the Maximum Number of Elements in Subset
Leetcode 3020. Find the Maximum Number of Elements in Subset 1. 解题思路2. 代码实现 题目链接:3020. Find the Maximum Number of Elements in Subset 1. 解题思路 这一题我做的是比较水的,首先就是统计下array当中各个元素出现的频次࿰…...

【Vue2 + ElementUI】更改el-select的自带的下拉图标为倒三角,并设置相关文字颜色和大小
效果图 实现 <template><div class"search_resources"><div class"search-content"><el-select class"search-select" v-model"query.channel" placeholder"请选择" change"handleResource&q…...

TensorFlow2实战-系列教程5:猫狗识别任务数据增强实例
🧡💛💚TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、猫狗识别任务 import os import warnings warnings.filterwarnings("ignore&…...

Unity中URP下额外灯角度衰减
文章目录 前言一、额外灯中聚光灯的角度衰减二、AngleAttenuation函数的传入参数1、参数:spotDirection.xyz2、_AdditionalLightsSpotDir3、参数:lightDirection4、参数:distanceAndSpotAttenuation.zw5、_AdditionalLightsAttenuation 三、A…...

BKP备份寄存器、RTC实时时钟
目录 1. BKP (Backup Registers)备份寄存器 2. RTC (Real Time Clock)实时时钟 1. BKP (Backup Registers)备份寄存器 BKP可用于存储用户应用程序数据。当VDD (2.0-3.6V)电源被切断,他们仍然由VBAT (1.8-3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或…...

k8s 进阶实战笔记 | Scheduler 调度策略总结
文章目录 Scheduler 调度策略总结调度原理和过程调度策略nodeSelect亲和性和反亲和性NodeAffinify亲和验证PodAffinity 亲和验证PodAntiAffinity 反亲和验证污点与容忍跳过 Scheduler 调度策略 调度策略场景总结 Scheduler 调度策略总结 调度原理和过程 Scheduler 一直监听着…...

微服务-微服务Spring-cloud-open-feign
1. LoadBalancerRestTemplate的缺陷 LoadBalancerRestTemplate进行微服务调用 BeanLoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}//调用方式String url "http://mall-order/order/findOrderByUserId/"id;R result restTemplate.…...

分类预测 | Matlab实现DT决策树多特征分类预测
分类预测 | Matlab实现DT决策树多特征分类预测 目录 分类预测 | Matlab实现DT决策树多特征分类预测分类效果基本描述程序设计参考资料分类效果...

随机点名--好玩哦
大屏滚动,随机点名,可刺激哦 想屏幕名字滚动得快一点,sleep时间就小一点 效果图 代码 #!/bin/bash namefile"/opt/name.txt" linenum$(sed -n $ $namefile) while : docleartmp$(sed -n "$[RANDOM%linenum1]p" $namefi…...

Linux下的进程操作
进程概念 ps -elf:查看操作系统的所有进程(Linux命令) ctrl z:把进程切换到后台 crtl c:结束进程 fg:把进程切换到前台 获取进程进程号和父进程号 函数原型: pid_t getpid(void); //pid_t…...

uniapp scroll-view用法[下拉刷新,触底事件等等...](4)
前言:可滚动视图区域。用于区域滚动 话不多说 直接上官网属性 官网示例 讲一下常用的几个 scroll 滚动时触发 scrolltoupper 滚动到顶部或左边,会触发 scrolltoupper 事件 scrolltolower 滚动到底部或右边,会触发 scrolltolower 事件 1.纵向滚动…...

聊聊大模型 RAG 探索之路的血泪史,一周出Demo,半年用不好
大家好,今天我们来继续看看 RAG 落地的一些有趣的事儿,从技术社群早上的讨论开始,喜欢技术交流的可以文末加入我们 一、从一周出Demo、半年用不好说起 最近读了读2024-傅盛开年AI大课,其中有讲到RAG环节,三张片子比较…...
UniApp 生命周期详解
UniApp 是一个使用 Vue.js 开发所有前端应用的框架,它可以编译到 iOS、Android、H5、小程序等多个平台。在 UniApp 中,生命周期是指应用或页面从创建到销毁的过程中所经历的一系列阶段。了解生命周期可以帮助开发者更好地管理资源、优化性能和提升用户体…...

用大模型训练实体机器人,谷歌推出机器人代理模型
谷歌DeepMind的研究人员推出了一款,通过视觉语言模型进行场景理解,并使用大语言模型来发出指令控制实体机器人的模型——AutoRT AutoRT可有效地推理自主权和安全性,并扩大实体机器人学习的数据收集规模。在实验中,AutoRT指导超过…...

HCIA-HarmonyOS设备开发认证-2.设备开发入门
目录 HarmonyOS设备开发学习路径一、开发项目与工具介绍1.1、设备开发环境准备1.2、设备开发流程1.3、Huawei DevEco Device Tool 二、OpenHarmony介绍OpenHarmony目录结构详细介绍applications目录详解base目录详解foundation目录详解 OpenHarmony接口分层介绍CMSIS 和 POSIX …...

2. HarmonyOS 应用开发 DevEco Studio 准备-2
2. HarmonyOS 应用开发 DevEco Studio 准备-2 首选项设置 中文设置 主题 字体 插件安装和使用 保存时操作 编辑器 工程树管理 代码树管理 标记 字符串可视化编辑 参考文档 常用快捷键 编辑 查找或替换 编译与运行 调试 其他 预览 页面预览 自定义组件预览 预览…...

【K8S 云原生】K8S的图形化工具——Rancher
目录 一、rancher概述 1、rancher概念 2、rancher和K8S的区别: 二、实验 1、安装部署 2、给集群添加监控: 3、创建命名空间: 4、创建deployment: 5、创建service: 6、创建ingress: 7、创建hpa 8…...

3. SQL 语言
重点: MySQL 的 三种安装方式:包安装,二进制安装,源码编译安装。 MySQL 的 基本使用 MySQL 多实例 DDLcreate alter drop DML insert update delete DQL select 3)SQL 语言 3.1)关系型数据库的常见…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...