模型视图变换(几何变换)矩阵:

1. 齐次坐标:两条平行线也可以相交。

在欧几里得空间中,两条平行线是无法相交的,但是在投影空间(Projective Space)这条定理就不再适用了。
比如上图中,两条平行的铁轨由于距离我们越来越远,终于在视平线处相交了,相交点是“无限远”。

欧式空间对2D/3D空间的描述恰到好处,但是对投影空间就力不能及了(事实上,欧式空间是投影空间的一个子集)。

通常在二维空间中,我们把一个点表示为(x, y),那么如果这个点位于无限远又如何表示呢?一般是 (∞,∞),

而这样一个数学符号对我们的意义就太小了,因为它很难进行计算和变换。

为了描述“在无限远处”相交这个情景,数学家们发明了另一种坐标系,即齐次坐标系。

解决方案:齐次坐标系

简单来说,齐次坐标系就是使用N+1个数来表示N维欧式空间的方式,比如欧式空间中有一点(X,Y),那么在齐次空间中将被表示为(x,y,w),其中W为投影变量,W的作用就是把齐次空间转换回欧式空间:

X = x/w 
Y = y/w

举个例子来说,欧式空间中有一点(1, 2),在齐次空间中将被表示为(1,2,1). 如果这个点向无限远处运动变成了(∞,∞),齐次坐标就可以表示为(1,2,0),因为1/0和2/0正好也是无限大。也就是说,我们可以不使用"∞"就可以表示无限大了。

验证

回到我们最初的问题,假如在欧式空间中有两条平行线:


只要C不等于D,他们永远不会相交。

现在我们使用齐次坐标系来重写这两条线:


很容易发现,这两条线在(x, y, 0) 初相交,也就是无限远处。

齐次坐标在计算机视觉处理上非常有用,比如把3D空间投影到屏幕上(2D)。

原文:http://www.songho.ca/math/homogeneous/homogeneous.html

2. 向量与齐次坐标

一个n维向量用齐次坐标表示为一个n+1维向量。

(x1,x1,...,xn)->(wx1,wx2,...,wxn,w),齐次向量的表示不是唯一的,例如齐次坐标[8,4,2]与[4,2,1]都表示点(4,2).

3.齐次坐标的应用

利用齐次坐标可以用矩阵运算,把二维、三维或高维空间点集从一个坐标系转换到另一个坐标系,实现了方便的数学计算。

opengl中相关的计算机图形变换矩阵之:齐次坐标 (摘编)的更多相关文章

  1. opengl中相关的计算机图形变换矩阵之:模型视图几何变换

    3. 二维变换矩阵 x'      a11 a12 a13    x         a11x a12y a13z y' =  a21 a22 a23     y    =  a21x a22y a2 ...

  2. 浅谈 OpenGL 中相关阻塞问题

    昨天我遇到一个问题,问题如下: 我使用了延迟渲染,我的渲染流程是:Pass1 --> CUDA并行计算 -->Pass2 CUDA并行计算中需要使用Pass1渲染生成的两张纹理,然而我在G ...

  3. OpenGL中glPushMatrix和glPopMatrix的原理

    glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...

  4. OpenGL中坐标系的理解(一)

    在OpenGL中,存在着至少存在着三种矩阵,对应着函数glMatrixMode()的三个参数:GL_MODELVIEW,GL_PROJECTION,GL_TEXTURE. 以下主要描述GL_MODEL ...

  5. Bullet物理引擎在OpenGL中的应用

    Bullet物理引擎在OpenGL中的应用 在开发OpenGL的应用之时, 难免要遇到使用物理来模拟OpenGL中的场景内容. 由于OpenGL仅仅是一个关于图形的开发接口, 因此需要通过第三方库来实 ...

  6. OpenGL中平移、旋转、缩放矩阵堆栈操作

    在OpenGL中,图元的几何变换均为线性变换,通过矩阵变换实现.OpenGL中的坐标用齐次坐标表示,即(x,y,z)表示成(x',y',z',h),其中x=x'/h; y=y'/h; z=z'/h. ...

  7. OpenGL中各种坐标系的理解[转]

    OPENGL坐标系可分为:世界坐标系和当前绘图坐标系. 世界坐标系:在OpenGL中,世界坐标系是以屏幕中心为原点(0, 0, 0),且是始终不变的.你面对 屏幕,你的右边是x正轴,上面是y正轴,屏幕 ...

  8. (转)思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,...

    转自:http://www.cnblogs.com/soroman/archive/2008/03/21/1115571.html 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用1. ...

  9. 计算机图形学OpenGL中的glLoadIdentity、glTranslatef、glRotatef原理,用法 .(转)

    单位矩阵 对角线上都是1,其余元素皆为0的矩阵. 在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,我们称这种矩阵为单位矩阵. 它是个方阵,除左上角到右下角的对角线(称为主对角线)上的元素 ...

随机推荐

  1. Luogu P4095 [HEOI2013]Eden的新背包问题

    题目 求出从前往后的背包\(f_{i,j}\)和从后往前的背包\(F_{i,j}\). 那么对于询问\((d,e)\),答案就是\(\max\limits_{i=0}^e f_{d-1,i}+F_{d ...

  2. P1106 删数问题

    展开 题目描述 键盘输入一个高精度的正整数NN(不超过250250位) ,去掉其中任意kk个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的NN和kk,寻找一种方案使得剩下的数字组成的新 ...

  3. solve update pip 10.0.0

    The bug is found in pip 10.0.0. In linux you need to modify file: /usr/bin/pip from: from pip import ...

  4. ELK-全文检索技术-lucene

    ELK   :  ELK是ElasticSearch,LogStash以及Kibana三个产品的首字母缩写 一.倒排索引 学习elk,必须先掌握倒排索引思想, 参考文档: https://www.cn ...

  5. php 中英文混合字符串长度计算

    (strlen($string) + mb_strlen($string,'UTF8')) / 2;tw 这样计算的

  6. Verilog中的Timescale作用

    很多时候,我们拿到已有的东西理所当然的用了,其实,你真的对你所使用的东西了解吗? 再次犯下这样的错误,是因为在把代码从Altera 的CycloneV移植到Xilinx的Spartan6上,我遇到了非 ...

  7. 解决ssh登录很慢的问题以及jumpserver登录主机出现:Authentication timeout

    一.问题 登录ssh输入用户名后,等待很长时间20-30秒左右才显示输入密码提示框,从而导致通过jumpserver堡垒机登录主机时,报错:Authentication timeout Opt> ...

  8. .net中对象序列化技术

    序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据.例如,可以序列化一个对象,然后使用 HTTP 通过 Inte ...

  9. Mac下安装nginx并配置SSL实现Https的访问

    一.nginx安装 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/insta ...

  10. MySQL数据库安装和启动

    目录 一.数据库介绍 二.数据库的分类 1. 关系型数据库系统 2. 当下的关系型数据库系统 3. 当下的非关系型数据库系统 4. 关系型和非关系型数据库系统的区别 三.MySQL的架构 四.MySQ ...