摄像机矩阵和投影矩阵推导
透视投影矩阵推导

透视投影矩阵推导 计算机图形学中,建模⾃⼩孔成像原理的透视摄像机是常⽤的摄像机模型。
然⽽,由于光栅化渲染中的⼏何变换多基于四阶⽅阵与齐次坐标表⽰的向量的乘法,⽽四阶⽅阵只能表⽰仿射变换,⽆法实现透视摄像机“近⼤远⼩”的特性(仿射变换维持平⾏线相互平⾏,⽽“近⼤远⼩”不具有该性质),因此透视摄像机模型的实现要多费⼀番功夫。
1. 基本原理 ⼩孔成像是⼤多数⼈所熟知的最简单的成像原理之⼀,⽽常⽤的透视摄像机就是把⼩孔和屏幕(成像平⾯)的顺序交换,维持相似关系不变,因⽽这⼀模型达到了拟真的效果⽽被⼴泛应⽤。
⼩孔成像与简单的透视摄像机模型 透视摄像机模型⽤在光栅化渲染管线的结果,就是透视投影过程。
考虑简图—— 图中从e点(原点)发出的⼀条射线上所有在view plane之后的点都被投影到view plane与该射线的交点。
由相似关系显然有这就得到了所需的映射关系: 显然并⾮仿射变换,也就不能直接借助四阶⽅阵乘法来实现。
这时齐次坐标表⽰的另⼀个作⽤就表现出来了,设齐次坐标表⽰点,定义全体的齐次坐标上的等价关系:当且仅当,则有,该式的右边正是常⽤的齐次坐标中点的表⽰⽅法()。
这样⼀来,这⼀等价关系为我们提供了“除法”的能⼒,也扩充了仿射变换的能⼒。
注意到,仿射变换可以将、、中的任意⼀个分量设置为,⽽该⽅法允许这样的变换形式——注意到透视投影需要的变换是(假设viewing transform后摄像机⾯向+z⽅向)⽽要将映射为是很容易的,只需要矩阵乘法——然后使化为即可,这⼀过程称为齐次化。
这就是齐次坐标投影的基本原理。
2. 完整的投影矩阵推导 现实中使⽤的投影矩阵因为考虑了摄像机视截体,形式更加复杂。
考虑下图中的透视投影变换—— 显然该变换把近平⾯(near plane)区域投影到xOy平⾯上的单位正⽅形。
在这⾥可以把该变换过程拆分成三个⼦过程:完成“透视”投影、把near plane上的视窗变换为单位正⽅形、把near plane的z坐标变换为0。
单应矩阵和投影矩阵

单应矩阵和投影矩阵单应矩阵和投影矩阵一、单应矩阵单应矩阵是在计算机视觉、模式识别和计算机图形学等领域中广泛应用的一种数学工具。
它用于描述在二维或三维空间中的平面或立体物体之间的映射关系。
单应矩阵可以将一个空间中的点映射到另一个空间中的点,从而实现图像处理和计算机图形学中的许多应用。
列表一:单应矩阵的定义和表示1.1 定义单应矩阵,也称为齐次变换矩阵或投影矩阵,是指将一个空间中的点映射到另一个空间中的点的线性变换。
1.2 表示单应矩阵可以用一个矩阵来表示,形如H = [h1, h2, h3],其中hi表示单应矩阵的每一列。
列表二:单应矩阵的应用2.1 相机校正在计算机视觉中,相机校正是一项重要任务。
通过计算相机的单应矩阵,可以校正相机的畸变,提高图像的质量。
2.2 特征匹配在图像处理中,特征匹配是一项基本任务。
通过计算两幅图像的单应矩阵,可以找到两幅图像中相同特征点的对应关系,从而实现图像拼接、图像配准等算法。
2.3 三维重建在计算机图形学中,三维重建是一项核心技术。
通过计算多幅图像的单应矩阵,可以恢复出物体的三维结构,实现三维重建和虚拟现实等应用。
列表三:单应矩阵的计算方法3.1 最小二乘法最小二乘法是求解单应矩阵的一种常用方法。
它通过最小化残差的平方和,找到使得映射误差最小的单应矩阵。
3.2 直接线性变换法直接线性变换法是求解单应矩阵的另一种方法。
它通过对标定点的坐标进行线性变换,得到标定点在图像中的坐标,从而求解出单应矩阵。
二、投影矩阵投影矩阵是一种线性变换矩阵,用于将物体映射到一个较小的维度的空间中。
它在计算机图形学和机器学习等领域中有广泛的应用。
列表四:投影矩阵的定义和表示4.1 定义投影矩阵是指将一个空间中的点映射到另一个较小维度的空间中的线性变换。
4.2 表示投影矩阵可以用一个矩阵来表示,形如P = [p1, p2, p3],其中pi表示投影矩阵的每一列。
列表五:投影矩阵的应用5.1 降维在机器学习中,降维是一项重要任务。
视频矩阵的工作原理.docx

视频矩阵的工作原理在一个完整的安防电视监控系统中,一般由摄像机、监视器等设备组成,如何实现视频信息资源的共享分配、切换和显示,如何实现摄像机对监视器的顺序切换显示或分组切换显示,完成这个切换功能的设备就是视频矩阵切换器。
矩阵切换系统的作用、分类和使用场合一个完整的安防电视监控系统通常由摄像机、监视器等设备组成,如何实现视频信息资源的共享分配、切换和显示,如何实现摄像机对监视器的顺序切换显示或分组切换显示,完成这个切换功能的设备就是视频矩阵切换器。
如在会议室中,一般输入设备很多:有摄像机、 DVD、VCR、实物展台、台式电脑,以及笔记本电脑等等,而显示终端则较少,包括投影机、等离子、大屏幕显示器等,若想共享和分配这些输入设备的显示信息,矩阵即可发挥重要的作用。
其可将信号源设备的任意一路的信号传输至任一路显示终端上,并可以做到音频和视频的同步切换,使用方便。
在安防行业,通过视频矩阵和电视墙的配合,操作人员可以在电视墙或者任何一个分控点看到任意一个摄像机的图像。
矩阵主机即是通过交叉开关切换的方法,将 X 路视频输入信号任意输出至 Y 路监看设备或其它的电子装置(设备)。
一般情况下矩阵的输入通道数大于输出通道数即 X>Y,当然也有 X<Y 的矩阵主机。
有一些视频矩阵带有音频切换功能,能将视频和音频信号进行同步切换,这种矩阵也被称为视音频同步切换矩阵。
视频矩阵可以运用在很多场合,如安防行业的监控中心,教育行业的多媒体教室、会议室等,相对来说,监控行业使用的视频矩阵较多。
矩阵种类很多,根据接口类型可分为VGA矩阵、AV 矩阵、光矩阵等;根据接口数量来划分,则包括 8 进 2 出、 128 进 32 出、 1024 进 64 出等;还可根据处理的信号类型划分为模拟矩阵与数字矩阵,当然还有混合矩阵。
混合型视频矩阵的概念比较广,既可以是模拟和数字和混合,也可以是CVBS和 RGB矩阵的混合等;根据档次分有电信广播级的同步切换矩阵和普通的视频矩阵,广播级的矩阵主机切换图像的时候利用在视频信号的场消隐信号期间进行,切换过的图像没有闪烁非常平稳。
投影矩阵的推导

投影矩阵的推导(OpenGL D3D)OpenGL矩阵推导——模型视图变化在三维编程中,模型视图变换是从三维世界到二维屏幕中一个很重要的变换,但是这个变换往往很多人都不太理解,要么是事而非。
而这方面的文章不是太少就是讲的太浅没有真正的理解模型视图变换,本人在这个过程中曾经走过很多歪路,不过好在最终在自己的不懈努力下终于降伏了这只猛虎。
本人就以自己的理解,通过矩阵推导过程一步一步来了解模型视图变化,最后通过两个OpenGl的程序来进一步理解模型视图矩阵。
先从一个基本的模型视图—透视投影变换讲起。
透射投影是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume 以下简称CVV)中,待裁剪完毕后进行透视除法的行为。
透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷惑乃至神秘的一个图形技术。
其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦对它们中的任何地方感到陌生,立刻导致理解停止不前。
主流的3D APIs 都把透射投影的具体细节进行了封装,从而只需一个函数便可生成一个透射投影矩阵比如gluPerspective(),使得我们不需要了解其算法便可实现三维到二维的转化,然而实事是,一些三维图形或游戏开发人员遇到一些视图矩阵的问题往往会不知所措,比如视景体裁剪。
以下部分内容是从别处那转过来的,主要感谢Twinsen和一个叫丁欧南的高中生。
透视投影变换是在齐次坐标下进行的,而齐次坐标本身就是一个令人迷惑的概念,这里我们先把它理解清楚。
齐次坐标对于一个向量v以及基oabc,可以找到一组坐标(v1,v2,v3),使得v = v1 a + v2 b + v3 c (1)而对于一个点p,则可以找到一组坐标(p1,p2,p3),使得p–o = p1 a + p2 b + p3 c (2)从上面对向量和点的表达,我们可以看出为了在坐标系中表示一个点(如p),我们把点的位置看作是对这个基的原点o所进行的一个位移,即一个向量——p –o(有的书中把这样的向量叫做位置向量——起始于坐标原点的特殊向量),我们在表达这个向量的同时用等价的方式表达出了点p:p = o + p1 a + p2 b + p3 c (3)(1)(3)是坐标系下表达一个向量和点的不同表达方式。
投影矩阵的计算过程

投影矩阵的计算过程投影矩阵是一种线性变换矩阵,用于将三维空间中的点投影到二维平面上。
投影矩阵在计算机图形学和计算机视觉中经常被使用,例如生成透视投影效果或者在三维场景中进行物体检测。
在计算过程中,首先需要确定投影平面。
常见的投影平面有平行投影平面和透视投影平面两种。
平行投影平面与三维空间平行,通常用于绘制平行投影效果。
透视投影平面通过一个视点与投影平面的插值方式计算投影效果,模拟真实世界中的透视效果。
下面分别介绍平行投影矩阵和透视投影矩阵的计算过程。
1.平行投影矩阵计算过程:平行投影矩阵使用一个正交投影矩阵生成,平行投影矩阵的计算过程如下:1.1确定投影平面的尺寸:根据需要确定投影平面的长度和宽度。
1.2计算投影矩阵的元素:在平行投影矩阵中,x、y、z三个坐标轴的长度比例通常是相同的。
首先,需要确定x和y方向上的比例系数,通常是投影平面的长度和宽度的倒数。
然后,z方向上的比例系数由投影平面的远近关系决定,如果投影平面的远近关系与三维场景的z方向相同,则比例系数为正,否则为负。
最后,将这三个比例系数填入平行投影矩阵的对角线位置上,其他位置上的元素为0。
1.3平移投影平面:平行投影矩阵只能将点投影到位于原点的平面上,如果需要将投影平面平移至指定的位置,可以通过在平行投影矩阵中添加平移矩阵来实现。
平移矩阵的计算过程可以参考矩阵乘法操作。
2.透视投影矩阵计算过程:透视投影矩阵将三维空间中的点投影到一个透视投影平面上,通常通过一个视点与投影平面的插值方式计算投影效果。
2.1确定投影平面的尺寸:根据需要确定投影平面的长度和宽度。
2.2确定视点的位置:根据需要确定视点在三维空间中的位置,常见的视点位置是位于投影平面后方的一些点。
2.3计算透视投影矩阵的元素:透视投影矩阵的元素计算与平行投影矩阵类似,首先需要确定x和y方向上的比例系数,通常是投影平面的长度和宽度的倒数。
然后,z方向上的比例系数由视点与投影平面的插值方式计算,可以根据视点的位置和投影平面的位置来计算出比例系数。
视频矩阵的工作原理

视频矩阵的工作原理视频矩阵是一种用于视频信号切换和分发的设备,它可以将多个视频源信号切换、分发到多个显示设备上。
视频矩阵通常用于监控系统、会议室、演播室等场合,以实现多路视频信号的灵活切换和分发。
一、视频矩阵的基本组成1. 视频输入端口:视频矩阵通常具有多个视频输入端口,用于连接各种视频源设备,如摄像机、DVD播放器等。
每个视频输入端口通常支持各种视频接口,如HDMI、VGA、DVI等。
2. 视频输出端口:视频矩阵通常具有多个视频输出端口,用于连接显示设备,如显示器、投影仪等。
每个视频输出端口通常也支持各种视频接口。
3. 控制接口:视频矩阵通常具有各种控制接口,如RS-232串口、RS-485串口、TCP/IP网络接口等。
通过这些控制接口,用户可以远程控制视频矩阵的工作状态和切换操作。
4. 中央处理器:视频矩阵通常内置中央处理器,用于处理视频信号的切换和分发。
中央处理器负责接收来自各个视频输入端口的信号,并根据用户的控制指令,将选定的视频信号切换到指定的视频输出端口上。
5. 存储器:视频矩阵通常具有一定的存储器容量,用于存储用户定义的切换方案。
用户可以预先设置多个切换方案,并在需要时通过控制接口选择相应的切换方案。
二、视频矩阵的工作原理1. 视频信号输入:用户将各种视频源设备通过视频输入端口连接到视频矩阵。
视频矩阵会自动识别并接收各个视频输入端口的信号。
2. 切换操作:用户可以通过控制接口发送切换指令,选择要切换的视频信号源和目标显示设备。
视频矩阵会根据用户的指令,将选定的视频信号切换到指定的视频输出端口上。
3. 视频信号分发:视频矩阵将选定的视频信号分发到指定的视频输出端口上,以供显示设备显示。
用户可以通过控制接口选择单个输出端口,也可以选择多个输出端口同时显示。
4. 切换方案存储与调用:视频矩阵通常具有存储器,用户可以预先设置多个切换方案,并将其存储在存储器中。
当需要切换到某个预设的方案时,用户只需通过控制接口选择相应的方案即可。
投影矩阵
视锥就是场景中的一个三维空间,它的位置由视口的摄像机来决定。
这个空间的形状决定了摄像机空间中的模型将被如何投影到屏幕上。
透视投影是最常用的一种投影类型,使用这种投影,会使近处的对象看起来比远处的大一些。
对于透视投影,视锥可以被初始化成金字塔形,将摄像机放在顶端。
这个金字塔再经过前、后两个剪切面的分割,位于这两个面之间的部分就是视锥。
只有位于视锥内的对象才可见。
视锥由凹视野(在上图中,变量投影矩阵是一个典型的缩放和透视矩阵。
投影变换将视锥变换成一个直平行六面体的形状。
因为视锥的近处比远处小,这样就会对靠近摄像机的对象起到放大的作用,也就将透视应用到了场景当中。
在视锥中,摄像机与空间原点间的距离被定义为变量视矩阵将摄像机放置在场景的原点。
又因为投影矩阵需要将摄像机放在将两个矩阵相乘,得到下面的矩阵:下图显示了透视变换如何将一个视锥变换成一个新的坐标空间。
注意:锥形体变成了直平行六面体,原点从场景的右上角移到了中心。
在透视变换中,这个矩阵基于一定的距离(这个距离是从摄像机到邻近的剪切面)对对象进行平移和旋转,但是它没有考虑到视野(在这个矩阵中,在程序中,使用视野角度来定义x和y缩放系数比使用视口的水平和垂直尺寸(在摄像机空间中)并不方便多少。
下面两式使用了视口的尺寸,并且与上面的公式相等:在这些公式中,Zn表示邻近的剪切面的位置,变量Vw和Vh表示视口的高和宽。
这两个参数与D3DVIEWPORT2结构中的dwWidth和dwHeight成员相关。
不管你使用那个公式,将同世界和视变换一样,可以调用下面的D3DMATRIX ProjectionMatrix(const float near_plane,// distance to near clipping planeconst float far_plane,// distance to far clipping planeconst float fov_horiz,// horizontal field of view angle, in radiansconst float fov_vert)// vertical field of view angle, in radians {float h, w, Q;w = (float)cot(fov_horiz*0.5);h = (float)cot(fov_vert*0.5);Q = far_plane/(far_plane - near_plane);D3DMATRIX ret = ZeroMatrix();ret(0, 0) = w;ret(1, 1) = h;ret(2, 2) = Q;ret(3, 2) = -Q*near_plane;ret(2, 3) = 1;return ret;} // end of ProjectionMatrix()一旦创建完了矩阵,你需要调用一个顶点经过世界、观察和投影变换之后,下图展示了一个不适合的投影矩阵,和一个经过缩放的适合的矩阵:在前面的矩阵中,所有的变量都被假定为非零。
空间点投影到相机的公式
空间点投影到相机的公式
假设空间点的坐标为(X, Y, Z),相机的内参矩阵为K,外参矩阵为[R|t],其中R是旋转矩阵,t是平移向量。
空间点投影到相机图像平面上的坐标为(u, v),投影方程可以表示为:
s [u, v, 1]^T = K [R|t] [X, Y, Z, 1]^T.
其中s是尺度因子,通常情况下可以忽略。
K是相机的内参矩阵,[R|t]是相机的外参矩阵,[X, Y, Z, 1]^T是空间点的齐次坐标,[u, v, 1]^T是投影到图像平面上的齐次坐标。
具体来说,K是一个3x3的矩阵,包括焦距和主点的信息,[R|t]是一个3x4的矩阵,包括相机的旋转和平移信息。
通过这个投影方程,可以将空间点的三维坐标映射到相机图像平面上的二维坐标,从而实现三维重建和相机定位等应用。
需要注意的是,在实际应用中,还需要考虑相机的畸变参数,比如径向畸变和切向畸变,这些参数也会对投影结果产生影响,因此在实际使用时需要将它们考虑进去。
视频矩阵的工作原理
视频矩阵的工作原理视频矩阵是一种用于实现多个视频源切换和分配的设备。
它可以将多个视频源连接到多个显示设备上,通过切换和分配视频信号,实现不同视频源在不同显示设备上的显示。
视频矩阵通常应用于会议室、监控中心、演播室等场所,以满足多种视频源的切换和分配需求。
一、视频矩阵的基本组成视频矩阵由以下几个基本组件组成:1. 视频输入端口:用于连接各种视频源设备,如摄像机、DVD播放器、电视盒等。
每个视频输入端口通常具有一个视频输入接口和相应的音频输入接口。
2. 视频输出端口:用于连接显示设备,如显示器、投影仪等。
每个视频输出端口通常具有一个视频输出接口和相应的音频输出接口。
3. 交换矩阵:用于实现视频信号的切换和分配。
交换矩阵通常由多个视频输入端口和多个视频输出端口组成,可以通过控制信号来选择将哪个视频输入端口的信号输出到哪个视频输出端口。
4. 控制器:用于控制视频矩阵的工作,包括切换视频输入端口、选择视频输出端口等操作。
控制器通常具有一个用户界面,可以通过按钮、遥控器、电脑等方式进行操作。
二、视频矩阵的工作原理视频矩阵的工作原理可以分为以下几个步骤:1. 视频输入:将各种视频源设备连接到视频矩阵的视频输入端口上。
每个视频输入端口通常具有一个视频输入接口和相应的音频输入接口,用于接收视频源设备的视频信号和音频信号。
2. 视频切换:通过控制信号,选择将哪个视频输入端口的信号输出到哪个视频输出端口。
控制信号可以来自于控制器,可以通过按钮、遥控器、电脑等方式进行操作。
视频切换通常是实时的,可以在不影响视频信号质量的情况下进行切换。
3. 视频分配:将选定的视频输入端口的信号分配到对应的视频输出端口上。
视频分配可以根据需求进行灵活配置,可以将一个视频源的信号分配到多个显示设备上,也可以将多个视频源的信号分配到一个显示设备上。
4. 视频输出:将分配好的视频信号输出到对应的显示设备上。
每个视频输出端口通常具有一个视频输出接口和相应的音频输出接口,用于输出视频信号和音频信号。
透视变换矩阵和相机参数
透视变换矩阵和相机参数全文共四篇示例,供读者参考第一篇示例:透视变换矩阵和相机参数是计算机图形学中重要的概念,它们在虚拟现实、游戏开发和计算机辅助设计等领域起着重要作用。
透视变换矩阵用于将三维场景投影到二维屏幕上,而相机参数则决定了场景在屏幕上的具体表现方式。
本文将深入探讨透视变换矩阵和相机参数的原理及应用。
我们来介绍透视变换矩阵。
在计算机图形学中,透视变换矩阵是用来将三维空间中的点投影到二维平面上的矩阵。
它是由一个透视投影矩阵和一个视点矩阵组合而成。
透视投影矩阵包含了观察者的视点、视角和透视投影平面的参数,而视点矩阵则包含了场景中物体的位置、旋转和缩放等信息。
透视投影矩阵的计算方法包括了将物体坐标系中的点转换到相机坐标系中,再把相机坐标系中的点转换到裁剪坐标系中,最后再将裁剪坐标系中的点进行透视变换得到最终的屏幕坐标。
透视变换矩阵的计算涉及到矩阵乘法和坐标变换等数学知识,需要深入理解线性代数和几何变换的原理才能准确地进行计算。
相机参数也是影响场景表现的重要因素。
相机参数包括了视角、焦距、光圈和感光度等参数。
视角决定了场景在屏幕上的大小和比例,焦距和光圈决定了景深和景别,而感光度则影响了场景的曝光和对比度。
在计算机图形学中,调整相机参数可以使场景更加真实和逼真,符合人类眼睛的观察方式。
在虚拟现实和游戏开发领域,透视变换矩阵和相机参数的选择对于场景的表现至关重要。
合理的透视变换矩阵和相机参数可以让人们感受到身临其境的虚拟体验,增强沉浸感和真实感。
在计算机辅助设计领域,透视变换矩阵和相机参数则可以帮助设计师更准确地展示自己的设计作品,提高设计效率和质量。
第二篇示例:透视变换矩阵和相机参数是计算机图形学领域中非常重要的概念,它们能够帮助我们将三维世界中的物体投影到二维屏幕上,从而实现真实感的渲染效果。
本文将从透视变换矩阵和相机参数的定义、原理、应用以及优化等方面进行详细介绍。
透视变换矩阵是一种用来描述透视投影的数学工具,它可以将三维空间中的物体投影到二维屏幕上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
向量 C
x
(位移)向量
虽然多数时候向量纯粹表达方向,但事实上它还带有
长度的信息,向量{x,y,x}在3D空间的长度 是 。故,可以把向量理解为在一个方向 上长度为 的位移。 例如两点之间的距离向量,就是一个典型的位移向量。
我们通常结合上下文,来判断向量是纯粹方向的还是
位移的向量。
向量的基本运算:加法
坐标系的转换和矩阵
后续的内容主要记录World坐标系转换之后的Camera
坐标系,Projection坐标系的转换。
接下来记录的转换矩阵推导,是用DirectX来举例。事
实上,这些推导过程在OpenGL上也是一样的,如果 有差别,也是一些数值上的细微差别,例如DirectX的 远近裁剪面定为[0~1],而OpenGL的定为[-1~1]。
太少了,列举不出来呀。
坐标系的转换
抄录自MSDN,Transform pipeline
Wiki
Transform pipeline,/en-
us/library/windows/desktop/ee418867(v=vs.85).aspx
达两者,但它们在数值层面是一致的。 因方向向量的核心是方向,故两个方向向量的x,y,z数 值可能不同,但方向却是一样的,我们认为这两个方 向向量等价。
点和(方向)向量
方向向量C和B
等价,因它们表达 的方向是相同的。 数值上点A和向量 B相等,但物理意义 不同
y
z
点A{5,2,6} 向量B {5,2,6}
注意到上式左边是叉乘结果向量的模的平方,所以对
等式两边开平方,即得:
上式便是关于叉乘的模的等式。至此,我们知道叉乘
会得到一个垂直于原来两个向量(以及它们所在平面) 的向量,且这个向量的长度满足上述等式。但仍有一 个问题:这个垂直向量朝向那个方向呢?
叉乘
y z
向量C
向量A 向量B x
叉乘向量的方向
DirectX View Matrix推导
运算过程:
注意运算时采用的是齐次坐标,
各个分量取值 是基于Camera坐标系的,它们相对的原点是Camera 坐标系的原点,也即是观察者眼睛的位置。 下面我们推导View 矩阵。
DirectX View Matrix推导
推导View矩阵分两步,首先确立Camera坐标系,也即
x
向量的基本运算:减法
向量的减法法则定义为:
减法结果还是一个向量,从数值上看,结果向量的每
一个分量均“变小”了(严格来说这取决于b的符 号)。
减法
向量A减向量B,先把A
y z
或者B平移(在A和B所确 定的平面上平移),使得 A和B成首首相接
向量B
向量A
x
减法
• 平移向量A到 y 向量A’,由于是 A-B,所以连接B 向量A’ 的尾部到A’的尾部, 向量B 使得结果向量指向 被减数,所得的向量 即是A-B • 平移向量B也能得到同样的结果
可以用xyzzy方法记忆叉乘公式:其中xyz表示3个轴的
坐标值, 简单起见设左边第一个向量为A,第二个为B, 右边的结果向量为C,依照xyzzy:
接着求
,需要按照x->y->z->x的规则变换xyzzy成 yzxxz,得: 同样可以求得
叉乘
和点乘比较,点乘得到的结果是一个标量,但叉乘得
顶点P
Camera坐标系
Camera坐标系是人眼观察World坐标系时,以人眼为
原点,视线方向为Z轴建立的新坐标系,这个坐标系 以观察者(眼睛)为中心,为视野裁剪和投影等做好 铺垫。随着观察者眼睛位置的变化,或者视线方向的 变化,Camera坐标系也同时变换。
Projection坐标系
Projection即投影坐标系基于Camera坐标系变换而来
向量的加法法则定义为:
加法结果还是一个向量,从数值上看,结果向量的每
一个分量均“变大”了(严格来说这取决于b的符 号)。
加法
向量A加向量B,先把A
y z
或者B平移(在A和B所确 定的平面上平移),使得 A和B成首尾相接
向量A 向量B x
加法
平移向量A得到
y
z 向量C 向量A’
向量A’,这样向量B 向量A 和向量A’首尾相接, 向量B 连接向量B的起点 和向量A’的终点, 即可得到结果: 向量C。 平移向量B也会得到同样 的结果。
z
向量C 向量A
x
向量的基本运算:点乘
Dot Product,又叫点乘或点积,定义为:
如上式所示,点乘的结果是一个标量。后面我们将要
证明该标量和 相关,其中 是这两个向量的夹角, 也即是说,从两个向量点乘的结果能得出它们之间的 夹角。这就是点乘的价值所在。
点乘的证明
y z 向量A 向量B x 向量C
左手和右手坐标系
坐标系和坐标系转换
3D模型从建模到渲染最后阶段——输出到屏幕需要经
历多个坐标系,从一个坐标系到另一个坐标系则需要 一个转换过程。这个过程是由一个转换矩阵来实施的。
本节简要记录一些关键坐标系(坐标空间),和相应
的转换说明,然后以DirectX为例,记录和推导几个重 要的转换矩阵。
向量和矩阵变换
Linguohua 2012/7/11
说明
主要是为了备忘,本文记录了我学习向量和矩阵过程
中遇到的一些基础知识以及数学证明。
数学证明大多是我自己的想法,所以一些过程并不是
最简的,原因之一是我在空间和微分几何方面的知识 积累甚少。如果你有更简单的方法,请让我知道。
说明
先记录向量和向量的运算,以及点乘和叉乘的证明。 然后简要记录若干个重要的坐标空间。 接着详细推导View矩阵和Projection矩阵。 最后是记录DirectX的一个旋转立方体的Tutorial。
别求三个向量的模并代入余弦定理得:
等式的|A|和|B|表示向量的模。 化简等式即可得到直观的结果,见下页
点乘的证明
化简前面等式得到:
上式左边即是点乘的定义。至此,我们看出点乘和
成正比, 可用下式表示:
其中
是向量A和向量B的点乘,而 量的模的乘积。
是两个向
点乘的证明
因此,如果两个向量的点乘结果是零,可知它们相互
左手和右手坐标系
在3D空间中存在这样的两种坐标系,不管怎么翻转,
都不能从一种坐标系变换到另一种坐标系。这两种坐 标系我们用左手坐标系和右手坐标系来称呼和区分它 们。 DirectX常用左手坐标系,OpenGL则惯用右手坐标系。 不要担心,事实上他们的x,y坐标轴完全一样,只是z 轴一个向里,一个向外。如下图所示:
坐标系的转换和矩阵
任意两个坐标系的转换都经由一个转换矩阵完成。例
如从Model坐标系到World坐标系,需要经过World转 换矩阵进行变换。 World矩阵主要用于伸缩,平移,和旋转。伸缩/平移 较为直观,而旋转会有几种方式,例如构造矩阵旋转, 或欧拉角旋转,或四元数旋转。限于篇幅就不详细记 录了。将来如有需要,再单独记录。
DirectX View Matrix推导
从World坐标系转换到Camera坐标系需要一个转换矩
阵帮忙,这个矩阵叫View矩阵。
DirectX View Matrix推导
View矩阵是一个4X4的矩阵,作用是将顶点从World
坐标系转换到Camera坐标系。 Camera坐标系是一个这样的坐标系:以眼睛的位置为 原点,视线方向为Z轴的一个坐标系。新坐标系的X轴 朝向观察者的右手方向,Y轴朝向观察者头顶方向。 在World坐标系的顶点 经过View矩阵转换后, 得到一个位于Camera坐标系的新坐标。
由上面两式和点乘的性质,得知叉乘的结果向量和原
来的两个向量都垂直。我们知道原来的两个向量确定 了一个平面,也即是说叉乘的结果向量垂直于这个平 面。这就是叉乘的重要几何意义。 下面我们分析叉乘结果向量的模。
叉乘结果向量的模
由点乘公式: 等式两边平方,然后用三角等式
代换后
并整理得到:
叉乘结果向量的模
一起组成一张场景,场景的坐标系就是World坐标系, 这就像我们现实世界一样。一个模型放置到World坐 标系之后,它的顶点坐标值就需要从Model坐标系转 换为World坐标系中的值。如下页图示:
World坐标系
Model坐标系和World坐标系 顶点P在Model坐标系
中的值和在World坐标系 中的值是不同的
DirectX View Matrix推导
我们知道叉乘得到一个垂直于原来两个向量的新向量,
3D图形学中常用这种方式求垂直于平面/三角面/多边 形等的向量。例如法线(凹凸)贴图时,需要求出垂 直于顶点的法线。
Wiki
叉乘和点乘都是由Josiah Willard Gibbs在1881年提出
的。 Dot product: Scalar product, /wiki/Dot_product Cross product: Vector product, /wiki/Cross_product
如上图所示,向量C方向朝上还是朝下(注意:不管
朝向如何,它终归都会垂直于原来的两个向量)?
一个简单的判断方法,见下页的图示。注意如果是左
手坐标系,就用左手,如果是右手坐标系,那么需要 用右手。
叉乘向量的方向
点乘和叉乘用途
至此,我们知道点乘得到一个标量,这个标量跟原来
两个向量的夹角相关。所以,在3D图形学中常通过两 个向量的点乘得到它们之间的夹角。
说明
写记录最艰难莫过于公式编辑了,每一个数学式子,
都是从Word里面用公式编辑器编辑好,再复制过来, 更悲剧的事情是PPT貌似不支持公式,它把复制过来 的公式直接变成图片了。 可见我是多用心。