首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系;

管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区。其中顶点着色器和片段着色器是管线的可编程阶段。

  1. 顶点着色器

    其实现了顶点操作的通用可编程方法,其的输入包括了如下:

    着色器程序-描述顶点上执行操作的顶点着色器程序源代码或者可执行程序么,其实就是那个glsl的文件。

    顶点着色器输入(或者属性)-用顶点数组提供的每个顶点的数据,应该是着色器程序语言中的那个attribute语句。

    统一变量(uniform)-顶点(或者片段)着色器使用的不变数据。应该是使用了uniform的语句。

    采样器-代表顶点着色器使用纹理的特殊统一变量类型。应该是使用了sample的语句。

有个注意的地方,在OpenGL ES 2.0中,顶点着色器的输出称作可变变量,也就是varying的语句,但是在3.0中改名为顶点着色器输出变量。

图元光栅化阶段,可以将每个生成的片段计算顶点着色器输出值并作为输出传递给片段着色器。在3.0中,增加一个新的功能,变换反馈,可以使顶点着色器的输出可以选择性的写入到一个输出缓冲区,而不一定会传送到片段着色器。

其中,统一变量uniform,存储组合的模型视图喝投影矩阵。顶点着色器的输入in,顶点着色器的输出out;

  1. 图元装配

顶点着色器之后,下一阶段就是图元装配,图元是三角形、直线或者精灵等几何对象,图元的每个顶点被发送到顶点着色器的不同拷贝。在图元装配期间,这些顶点被组合成图元。

对于每个图元,必须确定图元是否位于视锥体(屏幕上可见的3D空间区域)内,如果图元没有完全在视锥体之内,则可能需要进行裁剪,如果图元完全在该区域之外,它就会被抛弃,裁剪之后,顶点位置被转换成屏幕坐标,或者进行一次淘汰操作,根据图元面向前方或者后方来抛弃它们。接下来就可以进入到管线的下一阶段-光栅化阶段。

  1. 光栅化

此时,绘制的图元仍是点精灵或者直线或者三角形精灵等等。其实光栅化就是将这些图元转化成一组二维片段的过程,每个片段的输出包括了屏幕坐标,颜色等属性和纹理坐标等。然后,这些片段由片段着色器来处理。

  1. 片段着色器

在光栅化阶段对于每个图元生成的每个片段都会去执行这个片段着色器的程序。采用如下的输入:

着色器程序,描述片段上所执行操作的片段着色器源代码或者可执行程序。

输入变量,光栅化单元用插值为每个片段生成的顶点着色器输出,也就是顶点着色器中的输出值作为其的输入变量。

统一变量,片段(或者顶点)着色器使用的不变数据。

采样器,代表片段着色器所用纹理的特殊统一变量类型。

片段着色器可以抛弃片段,也可以生成一个或者多个颜色值作为输出。一般来说,除了渲染到多重渲染之外,片段着色器只输出一个颜色值,在多重渲染目标的情况下,为每个渲染目标输出一个颜色值。光栅化阶段生成的颜色、深度、模版和屏幕坐标位置变成管线逐片段的输入。

注意的是,顶点着色器必须输出和片段着色器读入的同一组变量。

  1. 逐片段操作

其中,逐片段的操作包括很多的操作,包括了

片段数据,像素归属测试,裁剪测试,模版测试,深度测试,混合,抖动。

其中片段的数据也就是执行了片段着色器的操作后的数据。

像素归宿测试,确定帧缓冲区中位置的像素目前是不是归OpenGL es所有。这个测试能够使窗口系统能够控制帧缓冲区中的哪些像素属于当前OpenGL es的上下文。比如一个显示OpenGL es帧缓冲区窗口的窗口被另一个窗口所遮蔽,则窗口系统可以确定被遮蔽的像素不属于OpenGL es上下文,从而完全不显示这些像素,这个由OpenGL es内部进行,不受人的控制。

裁剪测试,确定是否位于作为OpenGL es状态的一部分的裁剪矩形范围内。

模版和深度测试,这些测试将在输入片段的模版和深度值上进行,以确定片段是否应该被拒绝。

混合,将新生成的片段颜色值和保存在帧缓冲区位置的颜色值结合起来。

抖动,可用于最小化,因为使用有限精度在帧缓冲区中保存颜色值而产生的伪像。

OpenGL ES 3.0 基础知识的更多相关文章

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

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

  2. OpenGL ES 2.0 Shader 调试新思路(二): 做一个可用的原型

    OpenGL ES 2.0 Shader 调试新思路(二): 做一个可用的原型 目录 背景介绍 请参考前文OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式 优化 ledCha ...

  3. OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式

    OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式 --是什么(答案是具体值) VS 是不是(答案是布尔值) 目录 背景介绍 问题描述 Codea 是 iPad 上的一款很方便 ...

  4. 基于Cocos2d-x学习OpenGL ES 2.0系列——纹理贴图(6)

    在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...

  5. 基于Cocos2d-x学习OpenGL ES 2.0系列——使用VBO索引(4)

    在上一篇文章中,我们介绍了uniform和模型-视图-投影变换,相信大家对于OpenGL ES 2.0应该有一点感觉了.在这篇文章中,我们不再画三角形了,改为画四边形.下篇教程,我们就可以画立方体了, ...

  6. 基于Cocos2d-x学习OpenGL ES 2.0系列——你的第一个三角形(1)

    前言 在本系列教程中,我会以当下最流行的2D引擎Cocos2d-x为基础,介绍OpenGL ES 2.0的一些基本用法.本系列教程的宗旨是OpenGL扫盲,让大家在使用Cocos2d-x过程中,知其然 ...

  7. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  8. Beginning OpenGL ES 2.0 with GLKit Part 1

    Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, ...

  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技术栈:项目概述

    学习使用java到现在也有三年多了,这三年基本是以项目驱动的方式学习,有好有坏,个人觉得好处在于,有一个清晰的目标让你解决,这会让你学习非常迅速有效.当然坏处就是片面,不成体系.这种学习方式在学校以小 ...

  2. 自定义请求头信息及cookie信息

    请求网页的时候有时候我们需要传递一些参数信息,这个时候我们可以将参数放到请求头中,具体使用如下: 这里有小问题就是请求参数的属性名好像不支持下划线,即 HTTP_UID不可用,但是HTTP-UID就可 ...

  3. Ant构建和部署项目(转)

    原文地址: http://www.blogjava.net/amigoxie/archive/2007/11/09/159413.html Ant是一个Apache基金会下的跨平台的构件工具,它可以实 ...

  4. 关于Eclipse开发插件(三)

    视图之间实现事件监听 两个视图中的组件之间的互动,在开发插件的时候是经常碰到的问题.点击视图1列表的某项时,视图2的文本框显示相应的字符. 第一种主动式: 主动式就是在视图1的代码块中获取对视图2的对 ...

  5. 并发容器之CopyOnWriteArrayList(转载)

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...

  6. 简单的ROT13码编码与解码

    ROT13码意思是将字母左移13位.如'A' ↔ 'N', 'B' ↔ 'O','V' ↔ 'I'. 下面实现ROT13码的解码. function rot13(str) { var arr = [] ...

  7. 第六章 jQuery操作表单

    1.单行文本框的应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  8. AlwaysOn实现只读路由

    1.配置只读路由 ①配置A副本的只读路由属性(ReadOnly代表‘只读意向’) ALTER AVAILABILITY GROUP [testAG] MODIFY REPLICA ON N'WIN-1 ...

  9. Exam 70-462 Administering Microsoft SQL Server 2012 Databases 复习帖

    好吧最近堕落没怎么看书,估计这个月前是考不过了,还是拖到国庆之后考试吧.想着自己复习考试顺便也写点自己的复习的概要,这样一方面的给不准备背题库的童鞋有简便的复习方法(好吧不被题库的同学和我一样看MSD ...

  10. WinForm程序中两份mdf文件问题的解决

    在项目中用程序中嵌入mdf文件的方式来进行SQLServer数据库开发非常方便,用来发布开源项目等很方便,点击就可以运行,免部署,特别是在教学中用起来更加方便,老师不用先将数据库文件detach再发给 ...