关于坐标系系统

在图形渲染管线中,坐标系系统扮演了一个非常重要的角色,他们并不是很复杂。当我们在学校学习几何的时候,第一个接触到的就是坐标。不过,还是让我们来先见识一下这些东西,这将使得我们更容易理解矩阵的概念。

前一篇文章中我们讨论了关于点、向量的概念。在那里,点和向量都是由三个实数来表示的,但是那些数字到底有什么意义呢?每个一个实数表示一个他们到原点的距离。比如,我们画一条直线,并且在线的正中间标记一个点,我们说这个点就是原点。此时这个点就是用于我们去衡量距离的一个参考点。如果一个点在原点的右边,我们把它的距离表示为大于0的数,如果一个点在原点的左边,我们把它的距离用小于0的数来表示。

我们假设一条线,向原点的两边无限延伸,这样一来,两个端点的距离就是无穷大。在数学上,这并没有什么问题,但是在计算机的世界里,这就有问题了。一般而言,我们只能计算有限范围内的东西。不过,这有限的大小其实已经足够我们去创建复杂的3D世界了,所以这并不会对我们产生什么实质的影响。

现在我们在这条线上画上刻度,这样一来,这条线就可以用来丈量长度。于是我们可以用它来衡量一个点的坐标位置到底是多少。在计算机里,这个刻度尺我们管它叫坐标轴

如果某一个点不在坐标轴上,我们依然可以把它的位置投影到坐标轴上去。投影点与原点的距离就是我们这个点相对于原点的坐标位置了。

我们已经在不经意之间说完了在一条坐标轴上定义一个点的坐标位置了。

维度和笛卡尔坐标系

让我们把水平的那条线当成是x轴。我们可以接着绘制第二条坐标轴,这条坐标轴穿过原点垂直于x轴。我们叫这条坐标轴为y轴。从此刻开始,对于任意一个点,我们可以将他们分别投影到x和y轴上,然后计算投影点到原点的距离,并用用此来表示该点的坐标位置了。这样的位置包含两个数,两个数分别表示x轴坐标和y轴坐标。所以,我们可以说,我们用两个坐标轴,就可以定义一个二维空间。

比如,在一张纸上画上一堆点。这张纸占据了一个二维空间。可以看成是一个平面。我们可以为每个维度画一个坐标轴。如果我们再次使用x和y轴来衡量每个点的位置,这俩坐标轴就构成了一个坐标系统。如果这两个坐标轴是互相垂直的,那么我们管它叫:笛卡尔坐标系

我们一般用一组有着明确先后顺序的申明来表示一个点的坐标。这两个记号用逗号隔开。对于笛卡尔坐标系来说,我们一般的把x轴的坐标写在前面,y轴的坐标卸载后面。比如,我们会将一个x坐标为2.5,y坐标为2.25的点记做(2.5,2.25)。但是你也别被这两个东西吓着了,他们只是标记了这个点到原点的位置关系。

到现在为止,我们已经搞懂了,如何制作一个2D坐标系,并且在这个坐标系中定义2D的点。你还需要明确的是,这些点的2D坐标是唯一的。意思就是说,在同一个坐标系下同一个坐标所表示的点不可能出现在不同的位置上。你还需要知道的是,世界上不止有标准坐标系,坐标系的坐标轴不一定非得是水平和垂直的,你爱怎么摆放你的坐标系都行。

事实上,我们可以在一个平面上定义无数多个坐标系。为了简单,我们假设,我们在纸上画了两个笛卡尔坐标系。并且,我们在这个纸上放了一个点。此时点的坐标会因为参考坐标系的不一样而变得不一样,虽然他们的物理位置是不变的。比如说:

点P在A坐标系下的坐标是(-1,3),在B坐标系下的坐标却是(2,4)。然而他们表达的是同一个点。是不是想起来OpenGL中的那些坐标了?对OpenGL矩阵在干嘛是不是又增进了一丢丢理解?

所以,如果我们知道B坐标系下点P的坐标,我们需要什么样的东西来求得B坐标系下,该点的坐标呢?这个原理在我们的计算机图形学里尤为重要。我们将很快会学到,如何将一个点的坐标从一个坐标系系统映射到另一个坐标系系统。

现在,我们来考量前面的例子。我们可以通过将坐标(-1,3)加上(3,1)来达到将P点的坐标从A坐标系映射到B坐标系的效果。并且给坐标(2,4)加上(-3,-1)可以将P点的坐标从B坐标系映射到A坐标系。我们这里要注意的是,(-3,-1)和(3,1)刚好是互逆的。也就是关键字:inverse。

另一个比较常见的操作就是讲一个点从坐标系的一个位置移动到另一个位置,此时参考坐标系并没有改变。这种操作叫做平移操作。这也是最基本的操作。其实其他的所有线性变换也是可以应用到点上去的。给点的坐标乘上一个常数,会对点的坐标产生缩放的影响。对点进行缩放,在空间上会表现为,点会沿着连接它与原点的直线进行运动。

另外请学习引擎课程的同学务必看完我们提供的全套所有文字资源,虽然有些枯燥,但是会时时刻刻体现在引擎课程的代码中。真正开课的时候,你将不必为这些琐碎的知识点而蛋疼菊紧。

最后,同志们呐,求转发,求推广。集齐200阅读量,隔日,更多文章立马吐血加工赶制出来。

opengl绘制刻度坐标系_OpenGL中的坐标系-2D相关推荐

  1. ios 图像坐标系_iOS中理解坐标系 - Megan_zhou的个人空间 - OSCHINA - 中文开源技术交流社区...

    坐标.点和像素之间的微妙转换也可能降低绘制性能,导致线条和文字模糊.观察以下代码: CGContextSetLineWidth(context, 3.); // 绘制从坐标{10, 100}到{200 ...

  2. opengl绘制长方体线框_OpenGL绘图实例十之绘制3D机器人

    综述 通过上一节说的绘制3D图形基础,我们应该对绘制3D图形有了基本的认识,接下来我们就进行一个实例,绘制一个3D机器人. 本节我们要完成的任务有: 1.绘制一个仿真3D机器人(样式自选,参考例图), ...

  3. opengl绘制长方体线框_OpenGL绘制长方体

    #include   //引用相关包 void display(void) { glClear(GL_COLOR_BUFFER_BIT);  //清空颜色缓冲区 glColor3f(0,1,1);   ...

  4. opengl绘制长方体线框_OpenGL 绘制长方体 计算机图形学

    不同面填充模式显示出不同的效果,如下面三幅截图: 上图通过glPolygonMode(GL_FRONT, GL_LINE);函数的调用,实现了显示前面面上的边线,而下面的面显示为默认的面填充,显示效果 ...

  5. opengl 深度详解_OpenGL中的深度测试

    什么是深度测试? 深度是指该像素点在3D世界中距离摄像机位置的Z值.深度测试就是将距离观察者最近(当观察者在Z轴的正面,z值越大越靠近观察者,当观察者在Z轴的负面,z值越小越靠近观察者)的值和其对应的 ...

  6. 如何在ArcGIS中自定义坐标系与投影转换

    ARCGIS种通过三参数和其参数进行精确投影转换 坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正确的显示其位置.方向和距离,缺 ...

  7. BIGEMAP教您如何在ArcGIS中自定义坐标系与投影转换

    坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正确的显示其位置.方向和距离,缺少坐标系统的GIS数据是不完善的,因此在ArcGI ...

  8. 理解计算机3D图形学中的坐标系变换

    要谈坐标系变换,那么坐标系有哪些呢?依次有:物体坐标系,世界坐标系,相机坐标系,投影坐标系以及屏幕坐标系.我要讨论的就是这些坐标系间的转换.      这些坐标系不是凭空而来,他们都是为了完成计算机3 ...

  9. SVG中的坐标系统和坐标变换

    视野和世界 2D绘图中很多人会有一个误区,就是我绘图的区域是一个矩形区域.无论新建一个画布还是创建了一个容器,心里都想象里面有一个矩形区域.其实,在SVG当中,矩形区域只是视野,是我们看到的部分.实际 ...

最新文章

  1. python增加一列数据计算年龄_无法使用python中的条件计算年龄。得到一个价值
  2. 数字孪生智慧城市建设加速5G+产业AI的应用,全流程数据透明化及实时可控成为升级的大方向,构建智慧城市生态圈在路上!...
  3. POJ 2255 Tree Recovery 二叉树恢复
  4. bash、dash(/bin/bash和/bin/sh)
  5. ABAP中的Table Control编程
  6. linux常见命令_Linux系统常见命令
  7. php文件多上传文件,php文件上传(多文件上传)
  8. easyUI-combotree的本地数据导入
  9. innodb_file_per_table参数
  10. python程序设计实践教程答案江苏_《Python程序设计》习题与答案python教材答案
  11. 各个操作系统中怎样设置电脑的颜色保护眼睛
  12. 周围剃光头顶留长发型_四周都剃光,头顶留在发的那叫什么发型
  13. IIS 发生意外错误 0x8ffe2740
  14. 通过docker部署一个简单的web服务
  15. 戴口罩的这一年,AI产业如何“重启、重塑、重构”?
  16. Python的编码解码
  17. SAP 远程连接登录配置(SAP Router)
  18. JLOI 2013 卡牌游戏 bzoj3191
  19. “发送至Onenote”惹来的小麻烦
  20. python 爬取西刺ip代理池

热门文章

  1. 西安python后端招聘_有大佬招 Python 后端初级人员吗?
  2. 小米互联通信服务_时隔六年,小米NFC碰碰贴复活,碰一下自动亮灯、联网、投屏...
  3. 【爬虫剑谱】三卷4章 拾遗篇-关于lxml库下etree模块中Xpath表达式的使用小结
  4. 第四章 ---- 事务RedisTemplate
  5. ftp ---- 本地用户登录(实例配置1:)
  6. rabbitmq中的队列transient和durable的区别
  7. Android开发笔记(一百七十二)第二代翻页视图ViewPager2
  8. Android开发笔记(七十三)代码混淆与反破解
  9. 定积分在计算机中的应用,计算机模拟定积分的定义
  10. java cglib map转bean_Java工具集-Bean对象与Map集合相互转换工具