一、坐标系

  • 2D 笛卡尔坐标系(由 x、y 决定)
  • 3D 笛卡尔坐标系(由 x、y、z 决定)

二、视口

  • glViewport(GLint x,GLint y,GLsizei width,GLsizei height),对应屏幕区域的范围;
  • 如下所示,对应全屏幕:

  • 如下所示,对应屏幕一部分:

三、投影

  • 概念
    • 光源的出发点为投影中心;
    • 投影中心与物体上各点的连线称为投影线;
    • 接受投影的面,称为投影面;
    • 过物体上各点的投影线与投影面的交点称为这些点的投影。
  • 投影分为中心投影和平行投影两大类:
    • 所有投影线都交于投影中心点的投影称为中心投影,透视图就是用这种投影方法绘制成的。
    • 所有的投影线都互相平行的投影称为平行投影,平行投影又分为斜投影和正投影两种,当投影线倾斜于投影面时,称斜投影。
  • 正投影是指平行投射线垂直于投影面。透视投影属于中心投影,透视投影图简称为透视图或透视,它是从某个投射中心将物体投射到单一投影面上所得到的图形。透视图与人们观看物体时所产生的视觉效果非常接近,透视图以渲染、配景,使之成为形象逼真的效果图。
  • 如下所示:透视投影(左)和正投影(右)

四、OpenGL 的坐标系

① 左手坐标系与右手坐标系

  • 在世界、物体、照相机空间是右手坐标系。
  • 在规范化设备坐标系用的是左手坐标系。

② 视窗坐标系

  • 视窗坐标也就是手机窗口对应的坐标系统,以左上角为原点,右下角对应手机的最大像素值的集合,如下图是一个像素为 320*480 的手机,那他右下角的坐标就是 (320, 480)。

③ 规格化设备坐标系

  • 规格化设备坐标是以屏幕中心为原点,X 轴朝右,Y 轴朝上,所以左下角的坐标为(-1, -1),右上角的坐标为(1,1)。当然这是 z 轴为 0 时的显示,实际上规格化设备坐标系统是要考虑 z 轴,所以由平面要转换成一个正方体,原点坐标为(0,0,0),也就是这个立方体的中心,而它左上角离最近的那个顶点的坐标就是(1,1,1),右下角离最远的那个顶点的坐标就是(-1,-1,-1)。

④ 裁剪坐标系

  • 裁剪坐标是执行矩阵变换和透视投影之后,但在执行透视除法之前的坐标,超出裁剪空间的坐标会被丢弃。

⑤ 视觉坐标系

  • 视觉坐标系是观察者的眼睛出发,朝手机设备看过去所能看到的,会有一个 z 轴的最近距离和最远距离,也就是 zNear 和 zFar,只有在这两者之间并且也满足 x 轴和 y 轴坐标在屏幕当中的坐标才会显示出来,越远的东西会显示得越小,产生透视的效果;

⑥ 世界坐标系

  • 世界坐标系就是由用户构造的固定坐标系,方便描述这个坐标系下各种物体相对于原点的位置;

⑦ 惯性坐标系

  • 惯性坐标系是指世界坐标系和物体坐标系转换的中间产物。惯性坐标系的原点和物体坐标系的原点重合,但惯性坐标系的轴和世界坐标系的轴平行;

⑧ 物体坐标系

  • 物体坐标系:物体自己独有的坐标系;当物体旋转和移动的时候,这个坐标系也会发生相应的变化。


  • 惯性坐标系是指世界坐标系和物体坐标系转换的中间产物。惯性坐标系的原点和物体坐标系的原点重合,但惯性坐标系的轴和世界坐标系的轴平行。
  • 为什么要引入惯性坐标系?因为物体坐标系转换到惯性坐标系只需要旋转,从惯性坐标系转换到世界坐标系只需要平移。

五、坐标变换

  • OpenGL 最终渲染到屏幕上是 2D 的,所以只需要将 3D 坐标进行一系列的变换为 2D 坐标,整个过程如下图所示:

  • OpenGL 中只定义了裁剪坐标系、规范化设备坐标系和屏幕坐标系。而局部坐标系(模型坐标系)、世界坐标系和摄像机坐标系都是为了方便用户设计而自定义的坐标系,它们的关系如下图所示:

  • 模型变换、视变换、投影变换由用户在顶点着色器中完成。
  • 透视除法、视口变换由 OpenGL 在顶点着色器处理之后完成。

OpenGL之深入解析坐标系相关推荐

  1. Android OpenGL ES 学习(九) – 坐标系统和实现3D效果

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  2. OpenGL之鼠标控制坐标系旋转、缩放、移动

    OpenGL之鼠标控制坐标系旋转.缩放.移动 1.实现代码 void CMyStatic::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加 ...

  3. OpenGL笔记:观察坐标系(模型视图矩阵)、投影变换

    观察坐标系参数 说明:其中观察方向与+Zview相反. 观察平面法向量 观察方向通常沿着Zview轴,因此观察平面,有时也称投影平面一般假设为与该轴垂直.这样,观察平面的方向 及正Zview轴可定义为 ...

  4. 现代opengl 设计入门,坐标系统和立方体的纹理贴图

    本文在 现代opengl 设计入门,纹理贴图 一文的基础上,引入opengl坐标系统,实现立方体的纹理贴图.介绍了opengl 的5个空间,3个变换矩阵.如果看这部分介绍比较繁琐,可以直接看看效果图, ...

  5. OpenGL常用术语解析

    目录 1. 什么是OpenGL 2. OpenGL状态机 3. OpenGL上下文 4. 渲染 5. 管线 6. 固定管线/存储着色器 7. 着色器程序(Shader) 7.1 顶点着色器(Verte ...

  6. OpenGL之深入解析渲染架构和数据传递

    渲染架构如图所示 架构解读 Client与Server Client是指常见的iOS代码和OpenGL API方法,这部分是在CPU中运行的,与我们平常开发所说的前端iOS或者android开发不一样 ...

  7. openGL纹理映射参数解析

    GLuinttexture[1]; AUX_RGBImageRec *TextureImage[1]; Status=TRUE; // Set The Status To TRUE glGenText ...

  8. OpenGL之深入解析纹理的渲染使用

    什么是纹理(Texture)? 概念 通常说的纹理,指的是一张二维的图片,把它像贴纸一样贴在图元上面,让图元看起来像贴纸所要表现的效果那样: 艺术家和程序员更喜欢使用纹理(Texture).纹理是一个 ...

  9. OpenGL之深入解析屏幕成像和渲染原理

    一.CPU 与 GPU CPU 内部组成: GPU 内部组成(ALU:算术逻辑单元,是能实现多组算术运算和逻辑运算的组合逻辑电路): CPU 和 GPU 因为设计之初需求就不一样,所以它们的组成不同, ...

最新文章

  1. java se 7u67_Linux下安装jdk-7u67-linux-x64.rpm
  2. 张亚勤:对于产业来讲,深度学习的黄金时代刚刚开始
  3. 力扣(LeetCode):字符串转换整数 (atoi)
  4. java实现自动收红包功能_Java实现抢红包功能
  5. [C入门 - 游戏编程系列] 贪吃蛇篇(四) - 食物实现
  6. mysql-odbc的zip安装方法_win10环境下mysql-odbc的zip安装方法
  7. 不同设备屏幕尺寸和DPR适配
  8. 模块导入以及书写规则
  9. 系统间数据传输,产品经理视角的9千字总结:接口、otter、log4j、SFTP、MQ……...
  10. linux内核实验教程答案,20199310《Linux内核原理与分析》第十五周作业 Linux安全实验...
  11. HTML怎么把文字分栏_html代码怎样优化更利于SEO排名
  12. Unity背包系统(二)背包UI设计
  13. 笔记本独显无输出_双显卡笔记本独显消失怎么回事|笔记本双显卡独显没了怎么解决|笔记本双显卡切换独显方法...
  14. 原生JS制作缤纷色彩板
  15. android打印动画,Android实用View系列------TextView实现打印机效果
  16. Java实现Excel操作的方式
  17. Node.js + Web Socket 打造即时聊天程序嗨聊(1)
  18. 【Atlas500】入门到放弃(六)——【DVPP】浅析HFBC格式数据存在的意义
  19. mysql服务器默认使用用户_在Windows下配置MySql服务器默认使用的用户是
  20. python selenium爬取去哪儿网的酒店信息——详细步骤及代码实现

热门文章

  1. 随手记录自动化常用的一些事情
  2. [转帖]TLS 版本问题
  3. Jenkins 中如何一次构建多个项目
  4. 解决 Ubuntu Software (Software Center) Crash 问题
  5. Java堆栈的应用2----------中缀表达式转为后缀表达式的计算Java实现
  6. python回归方程系数计算_线性回归中的正规方程将θ系数返回为“NaN”
  7. Java黑皮书课后题第5章:*5.14(计算最大公约数)下面是求两个整数n1和n2的最大公约数的程序清单5-9的另一种解法:...提示用户输入两个正整数,然后显示最大公约数
  8. 全面解读php-面向对象
  9. 尚学python课程---11、linux环境下安装python注意
  10. Python之面向对象四