opengl中相关的计算机图形变换矩阵之:齐次坐标 (摘编)
模型视图变换(几何变换)矩阵:
1. 齐次坐标:两条平行线也可以相交。

欧式空间对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中相关的计算机图形变换矩阵之:齐次坐标 (摘编)的更多相关文章
- opengl中相关的计算机图形变换矩阵之:模型视图几何变换
3. 二维变换矩阵 x' a11 a12 a13 x a11x a12y a13z y' = a21 a22 a23 y = a21x a22y a2 ...
- 浅谈 OpenGL 中相关阻塞问题
昨天我遇到一个问题,问题如下: 我使用了延迟渲染,我的渲染流程是:Pass1 --> CUDA并行计算 -->Pass2 CUDA并行计算中需要使用Pass1渲染生成的两张纹理,然而我在G ...
- OpenGL中glPushMatrix和glPopMatrix的原理
glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...
- OpenGL中坐标系的理解(一)
在OpenGL中,存在着至少存在着三种矩阵,对应着函数glMatrixMode()的三个参数:GL_MODELVIEW,GL_PROJECTION,GL_TEXTURE. 以下主要描述GL_MODEL ...
- Bullet物理引擎在OpenGL中的应用
Bullet物理引擎在OpenGL中的应用 在开发OpenGL的应用之时, 难免要遇到使用物理来模拟OpenGL中的场景内容. 由于OpenGL仅仅是一个关于图形的开发接口, 因此需要通过第三方库来实 ...
- OpenGL中平移、旋转、缩放矩阵堆栈操作
在OpenGL中,图元的几何变换均为线性变换,通过矩阵变换实现.OpenGL中的坐标用齐次坐标表示,即(x,y,z)表示成(x',y',z',h),其中x=x'/h; y=y'/h; z=z'/h. ...
- OpenGL中各种坐标系的理解[转]
OPENGL坐标系可分为:世界坐标系和当前绘图坐标系. 世界坐标系:在OpenGL中,世界坐标系是以屏幕中心为原点(0, 0, 0),且是始终不变的.你面对 屏幕,你的右边是x正轴,上面是y正轴,屏幕 ...
- (转)思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,...
转自:http://www.cnblogs.com/soroman/archive/2008/03/21/1115571.html 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用1. ...
- 计算机图形学OpenGL中的glLoadIdentity、glTranslatef、glRotatef原理,用法 .(转)
单位矩阵 对角线上都是1,其余元素皆为0的矩阵. 在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,我们称这种矩阵为单位矩阵. 它是个方阵,除左上角到右下角的对角线(称为主对角线)上的元素 ...
随机推荐
- TIDB学习资料
TiDB 源码阅读系列文章(一)序 TiDB 源码阅读系列文章(二)初识 TiDB 源码 TiDB 源码阅读系列文章(三)SQL 的一生 TiDB 源码阅读系列文章(四)Insert 语句概览 TiD ...
- C++:string操作函数
要想使用标准C++中string类,必须要包含 #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 ...
- E - 卿学姐与城堡的墙(树状数组求逆序数)
卿学姐与城堡的墙 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- a页面通过url传值,b页面如何接收(jquery.params.js实现)
用于两个html页面之间的传值 我的应用场景是:用echarts在a页面做完中国地图后,点击某个省份在b页面显示某个省份的地图.(在b页面显示点击了的那个省份的地图,等于说b页面是个“容器”页) 假设 ...
- YOLOv3训练过程笔记
本人使用的是linux平台,按照YOLO网页0https://pjreddie.com/darknet/yolo/的步骤操作进行下载darkenet程序包以及编译,之后可尝试用VOC2007的数据集测 ...
- ubuntu中apache的ssl证书配置及url重写
一.https原理 借用网上的图(图片来源: https://www.cnblogs.com/xiohao/p/9054355.html ),用到了对称加密和非对称加密. 二.ubuntu的ap ...
- go依赖包管理工具vendor基础
go依赖包管理工具vendor基础 vendor是go的依赖包管理工具,主要用于管理项目中使用到的一些依赖. 它将项目依赖的包,特指外部包,复制到当前工程下的vendor目录下,这样go build的 ...
- Action访问Servlet的API
Action访问Servlet的API_,主要访问如下: 1.>获取request对象 2.>获取请求参数 3.>获取response对象,可用于传递cookie 3.>获取作 ...
- 请求转发forward()和URL重定向redirect()的区别
- java线程中的同步锁和互斥锁有什么区别?
两者都包括对资源的独占. 区别是 1:互斥是通过竞争对资源的独占使用,彼此没有什么关系,也没有固定的执行顺序. 2:同步是线程通过一定的逻辑顺序占有资源,有一定的合作关系去完成任务.