计算机图形学(三维观察投影线、视图变换、投影变换)

2023-05-16

一、三维观察流水线
概念:将建立的三维场景显示在二维视口的过程称为三维观察流水线。
在三维观察流水线中,也就是在将三维场景显示在二维视口的过程中,需要在不同坐标系下进行不同的操作,这些坐标系包括:
在这里插入图片描述
建模坐标系需要建立几何模型,通常将坐标系原点与几何模型的特殊点相对应,如球体的球心等,然后将在建模坐标系中建立的多个模型变换位置统一显示到世界坐标系中(该过程称为模型变换)。
观察坐标系是确定的是观察者的位置和方向,可以观察场景的不同视角:
在这里插入图片描述
场景从世界坐标系到观察坐标系的变换称为视图变换。
裁剪坐标系确定了视见体,三维裁剪窗体称为视见体,确定观察坐标系的可见范围。由观察坐标系到裁剪坐标系的变换称为投影变换。投影变换还包括三维图像到二维图像的变换,可以采用不同的投影模式,包括正交投影和透视投影两种。采用正交投影时,视见体通常被定义为平行六面体,采用透视投影时,视见体被定义为棱台,透视投影的观察结果与人眼观察结果更相符。视见体的大小由用户完成,用户可以根据投影模式的不同将视见体定义为任意大小的长方体或棱台:
在这里插入图片描述
用户定义的视见体的随机性不利于计算机进行统一的处理,更不利于设备无关性的实现,因此,图形学中通常将用户定义的视见体进行规范化,即将视见体统一规范化为[-1,1]的立方体,这种规范化的变换过程称为裁剪与规范化变换,实现的是裁剪坐标系到规范化设备坐标系之间的变换。场景被规范化到立方体内的视见体后,就可以通过视口变换在显示屏幕中某个窗体的视口区域显示出来。需要注意的是,若视见体的纵横比与视口的纵横比不同,也会影响到场景的最终显示比例:
在这里插入图片描述
坐标变化与坐标系之间的关系:
在这里插入图片描述

二、视图变换(又称观察变换、视点变换、照相机变换)
视图变换实现的是世界坐标系到观察坐标系的变换。
世界坐标系通常是由x,y,z确定的笛卡尔坐标系,观察坐标系可有用户自己定义,例如将观察坐标系定义为用uvn表示的笛卡尔直角坐标系
在这里插入图片描述
在这里插入图片描述
两个三维坐标系间的复合变换过程难以避免使用旋转变换,为方便界定旋转角度,可以考虑将世界坐标系表示为球面坐标系,笛卡尔之间坐标系一点(x,y,z)与球面坐标系的点的关系:
在这里插入图片描述
世界坐标系与观察坐标系的位置关系为:
在这里插入图片描述
世界坐标系定义为os(x,y,z),观察坐标系定义为os(xs,ys,zs),观察坐标系的原点(视点Os)在世界坐标系下的坐标为(a,b,c),观察坐标系z轴为视点Os指向世界坐标系原点O的方向(即Zs在OsO直线上),给定世界坐标系向上的Ys方向,通过左手定理可确定Xs方向。
接下来考虑如何实现世界坐标系到视觉坐标系的变换(视图变换):
通过基础几何变换实现世界坐标系到视觉坐标系的重合。
(1)将世界坐标系的原点O移动到视觉坐标系的原点Os,得到临时坐标系x1y1z1,变换矩阵为:
在这里插入图片描述
在这里插入图片描述

(2)将x1y1z1的z1坐标轴与视觉坐标系的Zs坐标轴重合。这一步需经过两步旋转变换。
做O1到平面xoy的投影P。
第一步旋转:实现x1与O1OP平面的重合
第二部旋转:分两步进行,首先绕Z1顺时针旋转以下角度,使得y1轴旋转到O1OP平面内
得到临时坐标系x2y2z2,此时的y2z2均位于O2OP平面内,x2垂直于O2OP平面
在这里插入图片描述在这里插入图片描述
旋转矩阵为:
在这里插入图片描述
第二部旋转将坐标轴z2绕坐标轴x2逆时针旋转以下角度,使得坐标轴z2轴与视觉坐标系的z坐标轴(即O1O重合),得到临时坐标系x3y3z3:
在这里插入图片描述
变换矩阵为:
在这里插入图片描述
(3)将x3y3z3的x轴做反射变换,即将x值取反,变换矩阵M4为:
在这里插入图片描述
将变换中的四个变换矩阵自右向左相乘:
在这里插入图片描述
此时就可以实现世界坐标系下的坐标到视觉坐标系下的坐标的变换。

三、投影变换
投影变换是把三维物体投影到投影面上得到二维平面图形的变换。其中投影面为平面的投影称为平面几何投影变换,接下来讨论的就是平面几何投影变换。
在这里插入图片描述
平面几何投影又分为平行投影和透视投影,平行投影的投影中心距离投影面无穷远,投影线是平行的,而透视投影的投影中心与投影面间有有限的距离,投影线间不平行:
在这里插入图片描述
平行投影的物体大小不变,多用于工程制图,透视投影的物体相关比例会发生变化,形成一种近大远小的效果(例如平行的两条火车轨道在远处相较于一点),更符合人眼自身的观察结果。
平行投影又分为正平行投影(投影线与投影面垂直,又称正交投影)和斜平行投影(投影线与投影面不垂直),还可再细分。
在这里插入图片描述
1.正交投影
正交投影的视见体通常为平行六面体,将平行六面体的前平面作为投影平面,正交投影将平行六面体内可见的三维形体投影到平行六面体的前平面,完成将三维形体投影到二维平面的过程。
在这里插入图片描述
正交投影中,当投影面与某一坐标轴垂直时,得到的投影是三视图:
在这里插入图片描述
当投影面与三个坐标轴都不垂直时,得到的投影为正轴测图:
在这里插入图片描述
常见的正交投影是三视图,生成的投影图为主视图(投影到xoz平面)、俯视图(投影到xoy平面)、侧视图(投影到yoz平面)。
在这里插入图片描述
三视图的投影变换矩阵:
主视图变换矩阵(将y坐标变为0):
在这里插入图片描述
得到的三个投影面不在同一平面内,可将其移到同一平面内。
例如,将xoy平面内生成的俯视图绕x轴旋转90度变换到xoz平面进行显示,为了拉开一定距离,再将其沿z轴负方向平移一段位移,这个复合变换的变换矩阵为:
在这里插入图片描述
仍以同样的方法得到xoz平面的侧视图:将yoz面得到的侧视图绕z轴正转90度到xoz平面,再将其沿负x方向平移一段距离。
投影矩阵为:
在这里插入图片描述
2.正轴测投影
在这里插入图片描述
3.透视投影
通常定义的视见体是棱台:
在这里插入图片描述
透视投影的投影线从与投影面相距有限远的空间一点投射,该点称为视点或投影中心。将眼睛所在的位置称为视点,视线称为投影线,垂直于屏幕的视线与屏幕的交点称为视心,视点到视心的距离称为视距。通常可以设定视点是视觉坐标系的坐标原点,视心是屏幕坐标系的坐标原点。透视投影有近大远小的特点,当投影小到极点会消失,这个极点被称为灭点。
以视觉坐标系的点变换到屏幕坐标系来讨论投射投影:
在这里插入图片描述
假设视觉坐标系XvYvZv一点为(xv,yx,zv),投影到屏幕坐标系中投影平面设定为z=d,投影平面垂直于视觉坐标系的z轴,视觉坐标系投影到屏幕坐标系的投影平面中的点为(xs,ys,zs),(xs,ys,zs)可以通过相似三角形来求解。
在这里插入图片描述
在这里插入图片描述
点的透视矩阵为:
在这里插入图片描述
注意,在透视投影过程中平行线之间的关系是否发生变化,规律是:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述规律对于视点在x轴、y轴同样适用。
透视投影改变平行线间的平行关系:
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机图形学(三维观察投影线、视图变换、投影变换) 的相关文章

  • MFC计算机图形学(1)

    这学期上了计算机图形学 xff0c 用MFC来绘制简单的图形 下面就简单介绍一下用cv 43 43 来绘制图形 VC 43 43 安装 VC 43 43 我基本不用的 xff0c 平时写C C 43 43 的代码都用Code Blocks
  • 计算机图形学

    上课时间 xff1a 2 12周周二上午1 2 3节 Lesson1 9月15日 这堂课讲了第1 2 3章节 第一章 概述第二章 计算机图形硬件系统第三章 图形标准 第一章 概述 1 1 定义 计算机图形学是研究怎样用计算机生成 处理和显示
  • 计算机图形学(三维观察投影线、视图变换、投影变换)

    一 三维观察流水线 概念 xff1a 将建立的三维场景显示在二维视口的过程称为三维观察流水线 在三维观察流水线中 xff0c 也就是在将三维场景显示在二维视口的过程中 xff0c 需要在不同坐标系下进行不同的操作 xff0c 这些坐标系包括
  • 计算机图形学期刊影响因子,计算机图形学 | CCF推荐期刊专刊信息2条

    原标题 xff1a 计算机图形学 CCF推荐期刊专刊信息2条 图形学与多媒体 Computers amp Graphics Call for papers Shape Modelling International SMI 2019 全文截
  • 计算机图形学(Computer Graphics)有哪些SCI期刊推荐? - 易智编译EaseEditing

    以下是计算机图形学领域的几个重要SCI期刊 xff1a ACM Transactions on Graphics TOG xff1a 是计算机图形学领域最重要的SCI期刊之一 xff0c 由ACM xff08 Association for
  • C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自定义光标,QQ截图时的光标

    本实例全部文章目录 一 功能概览 二 创建项目 注册热键 显示截图主窗口 三 托盘图标及菜单的实现 四 基本截图功能实现 五 针对拖拽时闪烁卡顿现象的优化 六 添加配置管理功能 七 添加放大镜的功能 八 添加键盘操作截图的功能 九 使用自定
  • 用Sutherland-Hodgman算法实现裁剪任意凸多边形

    一 实验目的 用Sutherland Hodgman算法实现裁剪任意凸多边形 二 实验工具 VC6 0 三 实验步骤 思想 每次用窗口的一条边界以及其延长线来裁剪多边形 裁剪得到的多边形的顶点由两部分组成 落在可见一侧的原多边形顶点 多边形
  • 光线追踪(ray tracing)介绍与细节推导

    背景 最近因为找到关于光线追踪相关不错的教程 所以边学习边做记录并希望将相关资料进行分享 光线追踪作为计算机图形学中一种可以获得良好的效果的渲染算法 有着非常广泛的应用 历史背景相关的介绍可参考百度百科或者维基百科 本文中的参考资料来自于P
  • error C2872: “Font”: 不明确的符号

    在VS2010中调用GDI 时 Font font fontFamily 24 FontStyleRegular UnitPixel 会提示提示 Font 不明确的符号的问题 1 gt 可能是 c program files microso
  • 路径追踪原理及实现

    路径追踪 Path Tracing 原理及实现 一 渲染方程 L o p w o
  • 计算机图形学-扫描转换直线段-直线方程法-DDA算法-中点算法-OPENGL实现-详解

    扫描转换直线段 说明与环境配置 环境配置 扫描转换直线段 方法一 直线方程法 代码描述 算法比较简单 暂无代码 方法二 数字差分分析DDA算法 代码描述 方法三 中点算法 代码描述 所有代码下载与效果展示 说明与环境配置 生成一个线段的方法
  • 【OpenGL】OpenGL入门之纹理(Texture)

    目录 纹理 纹理环绕方式 纹理过滤 多级渐远纹理 Mipmap 加载与创建纹理 stb image h 生成纹理 应用纹理 纹理单元 参考 纹理 在此之前 我们已经可以为每个顶点添加颜色来增加图形的细节 从而创建出有趣的图像 但是 如果想让
  • 几何检测

    概述 几何检测主要相交性检测 这里的内容大体上是根据 3D数学基础 图形与游戏开发 这本书来的 对于这本书来说 这一部分看完了后面内容就不看了 因为后面讲的太空泛了 有点像一本绝世武功的目录一样 看似很强 其实没什么卵用 1 2D隐式直线上
  • (三) 计算机图形学 之 Shader 定义 (顶点 着色器)

    shader 决定材质 跟灯光的作用 shader 属性定义的通用格式 Properties Property Property 相当于一个类的公共变量 Properties 定义一个Int name display name Int 1
  • BRDF详解(包括:irradiance,radiance,intensity,立体角)

    BRDF BRDF是双向反射分布函数 Bidirectional Reflectance Distribution Function BRDF 用来定义给定入射方向上的辐射照度 irradiance 如何影响给定出射方向上的辐射率 radi
  • OPENGL学习(二)OPENGL渲染管线

    Vertex processor 对顶点进行预处理 原始点都是三维的 最终我们看到的点都是二维的 这个映射过程和点的实际位置 和我们从哪个视角去看都有关系 需要通过一系列矩阵调整点的坐标 另外 还需要确定点的颜色 这个和点到镜头的距离和光照
  • 关于欧拉角的问题

    一 简单介绍 自己主要做一个知识记录 想着学了还是要写点东西的 首先我们可以把欧拉角看成是描述方位的一种方法 我们可以用欧拉角来表示旋转 也可以用四元数 以及用矩阵来表示旋转 欧拉角是一种常用的描述方位的方法 在这里简单的介绍下方向和方位的
  • GDI+学习笔记四-双缓冲图形类

    双缓冲图形 问题 当在窗体中绘制较为复杂的图形对象时 常会出现闪烁的问题 NET Framework解决方案 提供了双缓冲功能 原理是 当启用双缓冲时 所有绘制操作首先呈现到内存缓冲区 而不是屏幕上的绘图图面 所有绘制操作完成后 内存缓冲区
  • Ray Tracing in One Weekend01无法查看ppm的问题及一个C++字符缓冲传参引发的bug

    最近在学习光线追踪的经典教程 lt
  • VS2019下的GAMES101作业环境配置

    序 很久很久以前 好像看过这个 GAMES101 现代计算机图形学入门 闫令琪 哔哩哔哩 bilibili 里面好像还有一个实验 当时只是看了看视频里的热闹 并没有写实验 现在想想 还是写一写的好 万一以后用上了呢 虽然是个24K纯小白 估

随机推荐

  • 结果填空:马的管辖(超详解版)

    思路 二进制枚举所有马的状态 xff0c 然后遍历所有马 xff0c 标记其管辖点 xff0c 最后判断当前方案是否合法 span class token macro property span class token directive
  • Centos7搭建KVM虚拟化平台之基于OVS网桥

    Centos7搭建KVM虚拟化平台之基于OVS网桥 文章目录 Centos7搭建KVM虚拟化平台之基于OVS网桥一 什么是虚拟化技术 xff1f 为什么要用虚拟化技术 xff1f 二 Qemu KVM基本工作原理分析三 KVM和Qemu基于
  • Js理解之路:Js常见的6中继承方式

    目录 一 JS 实现继承的几种方式 第一种 xff1a 原型链继承 二 构造函数继承 xff08 借助call方法 xff09 三 组合继承 xff08 原型链继承 43 构造函数继承 xff09 第四种 xff1a 原型式继承 xff08
  • 判断任意两台计算机的IP地址是否属于同一子网络

    子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据 最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后 xff0c 如果得出的结果是相同的 xff0c 则说明这两台计算机是处于同一个子网络上的 xff0c
  • 版本控制工具Git(Windows端)

    一 操作方式 安装完成在开始菜单可以看到 1 Git GUI 就是图形窗口控制这个比较简单 2 Git Bash 推荐使用这个 xff0c 方便以后适用其他平台的配置 配置身份 验证是否成功 xff08 方便提交代码知道是谁提交的 xff0
  • JS基础:for...in、for...of、forEach(详解)

    for in循环 for in 语句以任意顺序遍历一个对象的除 Symbol 以外的可枚举属性 for in 循环只遍历可枚举属性 像 Array和 Object 使用内置构造函数所创建的对象都会继承自Object prototype和St
  • 正则表达式语法

    量词 通过量词可以设置一个内容出现的次数量词只对前一个内容起作用 n 表示整好出现n次 m n 表示出现m到n次 m xff0c 表示出现m次以上 43 表示至少一个 xff0c 相当于 1 xff0c 例如 a 43 表示0个或多个 xf
  • 51单片机之——串口通信(含实现部分)

    目录 一 串口通信简介 二 前置知识 二 前置准备 三 实现单片机通过串口向电脑发送数据 四 实现单片机通过串口接收电脑发送数据 一 串口通信简介 本篇文章将实现两个部分 xff0c 第一部分为单片机通过串口向电脑发送数据 xff1b 第二
  • Java web速成之jsp

    一 JSP简介 1 1 jsp运行和环境搭建 1 知识目标 xff08 1 xff09 能够叙述Java web的发展历程 xff1b xff08 2 xff09 能够描述JSP引擎在JSP中的作用 xff1b xff08 3 xff09
  • 单片机学习总结

    51单片机的学习总结 经过一个学期的51单片机的学习 xff0c 对于51单片机有了很大的理解 由于我学的是汇编语言 xff0c 实验也是用的汇编语言 首先对于51单片机要了解他的内部结构 一个8位的CPU xff0c 一个片内振荡器及时钟
  • 【计算机三级网络技术】 快速求出IP地址块经聚合后的IP地址

    计算机三级 网络技术之快速求出IP地址块经聚合后的IP地址 相信大家在备考计算机三级网络技术都会遇到求多个IP地址聚合后的地址是什么的题目 xff0c 以下是一个小技巧 xff08 具体原理自己把十进制的IP地址和子网掩码换算成二进制理解一
  • Ubuntu虚拟机使用NAT连接 然后无法上网的情况

    问题描述 xff1a 以下为我的虚拟机的网络适配器配置 xff0c 使用的是NAT模式 正常连接上网络的时候虚拟机右上角会如下图所示 当网络down了以后 xff0c 就不会显示第一个 xff0c 那么这个时候就可以使用以下方法来解决 仅作
  • 【计算机网路】(3)网络层:IP地址组成、分类,子网划分

    目录 IP地址 xff08 32位 xff09 1 1 组成 1 2 分类 1 2 1 A B C三类IP地址的组成 1 2 2 私有地址 记 1 3 子网掩码 1 3 1 示例 求IP地址为192 168 1 0的网络号 1 4 DHCP
  • 【知识图谱】知识图谱入门详细介绍

    知识图谱 入门与介绍 文章目录 知识图谱 入门与介绍1 引言2 概念3 分类4 发展历程5 作用5 1 搜索5 2 问答5 3 辅助大数据分析 6 知识图谱的构建6 1 数据获取6 2 信息 xff08 知识 xff09 抽取6 3 知识融
  • vnc服务器配置—linux

    VNC服务器配置 vnc服务器是个远程控制服务器 需求 xff1a 在linux中装服务器端 xff0c 在windows中装客户端 xff0c 使得可以远程控制linux 首先下载vnc服务器 yum install tigervnc s
  • 18715 出栈序列

    18715 出栈序列 时间限制 1000MS 代码长度限制 10KB 提交次数 0 通过次数 0 题型 编程题 语言 不限定 Description 一种简洁的栈定义方法如下 int st 1000 top 61 0 以top作为栈顶指针
  • Ubuntu 打不开终端

    因为我在做python时做了应该是删除了软连接 xff0c 然后终端就打不开了 在网上寻找多个方法 xff0c 终于找到适合自己的 请注意 xff0c 这里可能会出现其他问题 xff0c 使用时请注意 因为进不去终端 xff0c 所以按ct
  • unity实现切割图片

    我们在找资源时有时候会遇到把一堆图片放进一张图片的情况 xff0c 往往需要将一块块小图片切割出来使用 xff1a 步骤 xff1a xff08 1 xff09 将Sprite Mode设置为Multiple 2 xff09 点击Sprit
  • 使用mybatis实现数据库插入数据

    xff08 1 xff09 在Dao层的实体类接口中添加相应函数 xff08 2 xff09 在相应的 xml文件中加入一个mapper标记 xff08 3 xff09 修改main 函数中的语句 xff0c 关键是修改了sqlId 修改指
  • 计算机图形学(三维观察投影线、视图变换、投影变换)

    一 三维观察流水线 概念 xff1a 将建立的三维场景显示在二维视口的过程称为三维观察流水线 在三维观察流水线中 xff0c 也就是在将三维场景显示在二维视口的过程中 xff0c 需要在不同坐标系下进行不同的操作 xff0c 这些坐标系包括