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,我们称这种矩阵为单位矩阵. 它是个方阵,除左上角到右下角的对角线(称为主对角线)上的元素 ...
随机推荐
- C++中的自定义内存管理
1,问题: 1,new 关键字创建出来的对象位于什么地方? 1,位于堆空间: 2,有没有可能位于其它地方? 1,有: 2,通过一些方式可以使动态创建的对象位于静态存储区: 3,这个存储区在程序结束后释 ...
- JavaScript数组知识
JavaScript数组知识 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- 根据ip获取地理信息.php
根据ip获取地理信息.php <?php function getIPLoc_sina($queryIP){ $url = 'http://int.dpool.sina.com.cn/iploo ...
- day 17 模块
模块是什么? 抖音: 20万行代码全部放在一个py文件中? 为什么不行? 1. 代码太多,读取代码耗时太长. 代码不容易维护. 所以我们怎么样? 一个py文件拆分100文件,100个py文件又有相似相 ...
- Java Web开发技术教程入门-JSP基本语法和九大内置对象
这两天气温逐渐升高,好想把自己泡在冰块里······ 恩嗯摁蒽恩嗯摁蒽恩嗯摁蒽恩嗯摁蒽.......今天阅读到了这本书的第四章-JSP基本语法.经过第一天的阅读,我们明白JSP技术是Java Web开 ...
- java springmvc poi 导出Excel,先简单记录,后期会详细描写
POI jar包下载 : http://poi.apache.org/download.html jsp代码 <%@ page language="java" content ...
- git 本地tag和远程tag对应不上 vscode里pull不下代码
vscode拉取代码是用 git pull --tags origin saas-xxx > git pull --tags origin saas-base From 172.16.0.xx ...
- css3 伪类以及伪元素的特效
菱形
- cobbler装机系统部署
1.cobbler安装 [root@linux-node1 ~]# cp /etc/cobbler/settings{,.ori} # 备份 # server,Cobbler服务器的IP. sed - ...
- linux 下 SpiderMonkey 1.7.0 编译和安装
wget http://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz tar xf js-1.7.0.tar.gz cd js/src make ...