先来个宏观上的理解:

其实这块逻辑是个标准流程,而且其他地方介绍的也很多了,这里简单提下。

坐标转换,其实是不同坐标系之间的变换,一个渲染顶点,要想让它呈现在屏幕上的某个位置,是需要让这个顶点经过一个个坐标系的变换来进行的,每经过一个坐标系,它的坐标就会使用矩阵来执行变化一次,最终变化成为屏幕上的位置。

第一个Object Coordinates,这个比较好理解,就是模型的局部坐标系。这种坐标一般是美术建模的时候就会设定的,当然使用程序代码绘制出来的坐标自然是代码指定的。

比方说,一个坦克,美术在设计时,模型的几何中心点就作为了整个模型的坐标原点,那么炮管上某个顶点的位置就是相对于几何中心的一个偏移,假定为(0,1,1)。

第二个World Coordinates。还是坦克的例子,当游戏运行时,显然是会把坦克摆放在场景里的某个出生点位置,假定为(500,500,1000)的位置,这个位置是相对于整个关卡的原点的。这一步的坐标变换,就是要计算出指定顶点相对于这个关卡原点的坐标。这个就是世界坐标了。

第三个Eye Coordinates。到这一步,坐标原点变成了摄像机的位置,以摄像机为原点,计算出指定顶点的坐标。

第四个Clip Coordinates。这一步最重要的是投影矩阵的构建,这个矩阵的推导过程,在这里,是应该要仔细研究下。重要的是带了个w参数,用来计算下一步的NDC

所谓投影,就是投到了近裁剪面上。

第五个,Normal Device Coordinates.

这个图仅供参考。其实就是把上一步计算出来的坐标,映射成一个比例关系的坐标,这个比例是这样对应的,假设视锥体的四个面为Left,Right,Bottom,Top,Near,Far

X域的值,从 [Left,Right] 映射到 [-1,1]

Y域的值,从 [Bottom,Top] 映射到 [-1,1]

Z域的值,从 [Near,Far] 映射到 [-1,1]

如果指定的顶点在视锥体里,就会被映射到这个Cube里,这个坐标系的中心点是(0 ,0, 0)。

第六个,windon coordinates.其实就是窗口坐标转换了。

梳理 Opengl ES 3.0 (三)顶点坐标变换的更多相关文章

  1. OpenGL ES 3.0之顶点缓冲

    所谓顶点缓冲就是直接将顶点数据存储在gpu的一段缓冲区,不需要从cpu拷贝到gpu.提高了程序的运行效率. 操作步骤 1.创建顶点缓冲对象 GLuint vertexBufferID; 2.分配空间 ...

  2. 梳理 Opengl ES 3.0 (二)剖析一个GLSL程序

    OpenGL ES shading language 3.0 也被称作 GLSL,是个 C风格的编程语言. Opengl ES 3.0内部有两种可编程处理单元,即Vertex processor和Fr ...

  3. 梳理 Opengl ES 3.0 (一)宏观着眼

    Opengl ES 可以理解为是在嵌入式设备上工作的一层用于处理图形显示的软件,是Opengl 的缩水版本. 下图是它的工作流程示意图: 注意图中手机左边的EGL Layer Opengl ES是跨平 ...

  4. 梳理 Opengl ES 3.0 (五)shader运行原理

    先来看看一张图 shader都是在运行时编译和执行的,每个shader都有一个main函数作为它的入口. vertex shader的功能有两个:一个是计算顶点坐标变换,另一个就是为片元shader计 ...

  5. 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)

    在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...

  6. 【Android 应用开发】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解

    最近开始关注OpenGL ES 2.0 这是真正意义上的理解的第一个3D程序 , 从零开始学习 . 案例下载地址 : http://download.csdn.net/detail/han120201 ...

  7. OpenGL ES 3.0顶点着色器(一)

    OpenGL ES 3.0流程图 1.Vertex Shader(顶点着色器) 顶点着色实现了一种通用的可编程方法操作顶点. 顶点着色器的输入包括以下几个: • Shader program.程序的顶 ...

  8. OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解

    最近开始关注OpenGL ES 2.0 这是真正意义上的理解的第一个3D程序 , 从零开始学习 . 案例下载地址 : http://download.csdn.net/detail/han120201 ...

  9. OpenGL ES 3.0 点,线,三角形绘制形式总结

    OpenGL ES 3.0 顶点     -1,  1, 0, -0.5f,  0, 0,     0, -1, 0,    -1,  0, 0, 0.5f,   0, 0,     1, -1,   ...

随机推荐

  1. java 枚举类型enum

    简单介绍 Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先打开jdk 中的Enum 类简单读一下,这个类 ...

  2. 卸载由源码编译安装的软件(如OpenCV)

    看安装软件的时候有没有使用--prefix这个参数,如果有那就把你指定的文件给删除了就行了. 如果没有用这个参数就麻烦一点了,那就进入到软件解压后的目录,执行sudo make uninstall看能 ...

  3. Webpack2入门

    webpack 2 将在其文档完成之后正式发布.但这并不意味着不可以开始使用它,如果你知道怎么配置的话. 什么是 Webpack? 简单来说,Webpack 就是一个针对 JavaScript 代码的 ...

  4. 【luogu P3384 树链剖分】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3384 诶又给自己留了个坑..不想写线段树一大理由之前的模板变量名太长 #include <cstdio ...

  5. EJB 配置多个数据源

    1.修改jboss-6.simple\server\default\deploy\transaction-jboss-beans.xml 配置文件 <bean name="CoreEn ...

  6. js点赞效果图

    点赞时点赞图标会发生变化. html部分: <img src="img/icon_thumb_up.png" id="imgs1" style=" ...

  7. c++stl应用入门

    在这篇中,我会讲几个简单易懂且比较常用的stl函数,这些函数在noip系列考试中往往被允许使用(既然让用我们自然不用手码了...) (末尾有惊喜!) 1.sort 绝大部分刚入门的oier第一个接触的 ...

  8. (转)redis是什么

    1. 什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...

  9. 编程 - Python - 框架 - Django

    一.Django简介 百度百科:一个开放源代码的Web框架,由Python语言编写...... 重点:一个大而全的框架,啥都替你考虑好了. 1. web框架介绍 具体介绍Django之前,必须先介绍W ...

  10. HTML5—— 你肯定会用到的新知识

    HTML5 简介 语义化标签 新增结构标签 表单 多媒体 HTML5 简介 XML是更加严格的语言 是HTML和XHTML的结合 语义化标签 新增的语义化标签 header nav section a ...