第二节—OpenGL中的坐标系

本文为L_Ares个人写作,包括图片皆为个人亲自操作,以任何形式转载请表明原文出处。

OpenGL既然要完成2D和3D的绘图,那么从绘图到显示的过程中一定需要各种坐标系的辅助才可以完成,所以本节主要介绍OpenGL中和坐标系相关的部分。

一、基础坐标系

1、2D笛卡尔坐标系

这是最常见的坐标系,所以不做过多无用描述。

2D笛卡尔坐标系的组成:原点,X轴,Y轴。

2D笛卡尔坐标系中确定点的位置是由x,y两个值来确定的。

2D笛卡尔坐标系是用来描述二维图形的坐标系,无法完成三位图形的描述。


图1.1.1 2D笛卡尔坐标系描述a点
2、3D笛卡尔坐标系

3D笛卡尔坐标系是用来完成对三维图形的描述的坐标系。

3D笛卡尔坐标系的组成:原点,X轴,Y轴,Z轴。

3D笛卡尔坐标系中的图形上的点都由x,y,z三个值来确定。

z值是深度值。

图1.2.1 3D笛卡尔坐标系描述b点

二、视口和投影

1、视口

什么是视口呢?视口的解释其实很直观,视口其实就是可视窗口的一个简称。在OpenGL中还有一个窗口,窗口并不代表可视区域。在OpenGL中使用glViewPort()函数进行设置。

举个例子,看视频的时候,视频的四周存在黑色的留白,视口是视频内容显示的部分,窗口只是外边框,也就是可以让用户看的到影像的部分。

注意:

(1)图形超过了视口的大小是无法显示在视口中的。
(2)视口的大小可以不等于窗口大小。但是一般情况下,更倾向于设置成等比关系。

图2.1.1 视口和窗口
2、投影

投影是一种图形转换的方式。在OpenGL中我们常用的投影方式有两种。

  1. 正投影(平行投影)
  2. 透视投影
图2.2.1 两种投影方式

1、正投影(平行投影)

在中学的立体几何中曾经出现过这个概念。在数学中,正投影是平行投影的子集,但是在OpenGL中我们可以认为,平行投影就是正投影,所以在OpenGL中如果提到这两者,暂时可以认为是相同的。

特点:

(1)无论物体距离Camera的距离远近,都不会发生大小偏差,投影后的物体尺寸不会发生改变。
(2)根据上一点,正投影更适合用于平面图形

2、透视投影

透视投影更符合人类视觉习惯,远处的物体是小的,近处的物体是大的,越远越小,越近越大。

特点:

(1)远小近大。
(2)立体图形更适合使用透视投影。

三、OpenGL坐标系

1. 摄像机坐标系(Camera坐标系)

摄像机坐标系也被叫做照相机坐标系,总之是从Camera坐标系翻译过来的。

它表示的是一个观察者视角的坐标系。也就是说,当观察者的视角发生改变的时候,物体在摄像机坐标系中的位置也会发生改变。

图3.1.1 观察者视角1

当观察者的视角发生了移动之后。

图3.1.2 观察者视角2

这时候的摄像机坐标系是不相同的。

2. 世界坐标系、惯性坐标系、物体坐标系

这三个OpenGL的坐标系其实记住就可以,在理解上:

世界坐标系:

这是系统的绝对的坐标系,在用户自己的坐标系没有建立起之前,在系统画面上的任何一点都可以在世界坐标系中找到属于他的坐标,根据坐标来确定该点的位置。世界坐标系是始终恒定不变的。

物体坐标系:

也有叫对象坐标系,模型坐标系。物体坐标系是相对的坐标系,它专属于物体本身。当物体发生旋转,移动等行为的时候,物体坐标系也会随之发生相同的旋转,移动。

例如:“请向前走”,这就是向你的物体坐标系发出指令。“而请向东走”,这是向世界坐标系发出指令,因为物体坐标系会随物体的行为改变而改变,所以是不具备定向性方向的。

惯性坐标系:

(1)惯性坐标系是一个中间点,在物体从本身坐标系的坐标转换为世界坐标系的坐标的途中,先要将物体坐标转换为惯性坐标系的坐标,再转换为世界坐标系的坐标。
(2)惯性坐标系的x,y轴分别平行于世界坐标系的x轴,y轴。
(3)惯性坐标系的原点与物体坐标系的原点重合。

图3.2.1 OpenGL坐标系

如图3.2.1所示,三个坐标系的图解。

图形从物体坐标系到惯性坐标系,实际上是坐标发生了旋转。
图形从惯性坐标系到世界坐标系,实际上是发生了平移。

为什么要引入一个惯性坐标系呢?

因为物体从物体坐标系转换到惯性坐标系只需要发生旋转,物体从惯性坐标系转换到世界坐标系只需要发生平移。

3. 规范化设备坐标(NDC)

英文全称:Normal Device Coordinate

概念:

坐标系的区间范围是[-1,1],也就是说,所有点的坐标都会被转换到-1到1这个坐标范围内。超过这个范围的顶点将是不可见的。

4. 左右手坐标系。
图3.4.1 左右手坐标系

左右手坐标系的判断方法如图所示。

按照约定,OpenGL是右手坐标系,Dx是左手坐标系,NDC是左手坐标系。所以OpenGL坐标系是属于右手坐标系的。

四、坐标变换

因为图像最后是在设备屏幕上成像,而屏幕是2D的,但是很多物体是3D的,所以当碰到3D物体显示的时候,我们需要将3D的场景经过一系列的变换,最终呈现在2D的屏幕上,这也就是坐标变换的需求。

将一个物体显示到屏幕上经过的坐标变换的流程,

(1)将物体的物体坐标(对象坐标)经过模型转换,变成世界坐标。
(2)通过视变换,将世界坐标转化成观察者坐标。
(3)通过投影变换,将世界坐标转化成剪裁坐标系坐标。
(4)利用透视除法,转化成标准的NDC([-1,1])。
(5)通过视口变换,转化为屏幕坐标。

坐标变换的流程则如图4.1.1所示。

图4.1.1 坐标变换及权限

OpenGL只定义了裁剪坐标系、规范化设备坐标系(NDC)和屏幕坐标系。

用户可以自定义模型坐标系、世界坐标系和摄像机坐标系。

图4.1.1中

  • 虚线左侧,“用户可以自定义”的栏中,全是用户可以定义的坐标系和变换动作。
  • 虚线右侧,“OpenGL定义,用户不可自定义”的栏中,则全是不可自定义的坐标系和变换动作。
  • 模型变换、视变换、投影变换也就是MVP。这三者由用户自定义,最终在顶点着色器中完成。
  • 透视除法和视口变换,则是OpenGL自己定义,在顶点着色器处理之后再完成。

在上述对应的每一个步骤中,我们都创建一个矩阵与之对应:

模型转换:模型矩阵。
视变换:观察矩阵。
投影变换:投影矩阵。

模型变换的意义:

通过变换将图形的顶点属性定义或者3D模型软件建立的模型可以按照需要,通过缩放、平移等操作放置到世界坐标系中,而世界坐标系是所有物体交互的坐标系,这样可以完成物体间的交互准备。

视变换的意义:

为什么不直接从世界坐标系转换到裁剪坐标系呢?因为物体在世界坐标系中的位置是绝对的,但是当观察者从不同的角度观察物体的时候,往往观察到的物体在观察者的角度是相对的。所以需要一个动作和一个坐标系来动态的描述物体在实际情况下观察者观看到的情况。这个动作就是视变换,这个解释了物体在世界坐标系中位置的坐标系就是摄像机坐标系。

至此本节OpenGL中的坐标系的理解全部结束,希望看到文章的小伙伴如果发现了文章中不适合的地方可以留言指正,谢谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容