OPenGL ES 3.0 简介

bancheng发布

新买的《OpenGL ES 3.0》 编程指南的书到了,以后学习OpenGL ES 会跟着这本书走

OPenGL ES 3.0简介

OpenGL 3.0实现了具有可编程着色功能的图形管线,由两个规范组成:OpenGL ES 3.0 API规范和OpenGL ES 着色语言3.0规范,下图展示了OpenGL ES 3.0图形管线
E601B53DFF00893CB0119EEA02B0983E.jpg
本章节主要讲这张上的各个概念

顶点着色起

顶点着色器实现了顶点操作的通用可编程方法,主要包括:
* 着色器程序——描述定点上执行操作的顶点着色程序源代码或者可执行文件
* 顶点着色器输入(或者属性)——用顶点数组提供的每个顶点的数据
* 同意变量(iniform)——顶点(或者片段)着色器使用的不变数据
* 采样器——代表顶点着色器使用纹理的特殊统一变量类型
* 采样器——代表着顶点着色器使用纹理的特殊统一变量类型

注意
1、顶点着色器的输入在OPenGL ES 2.0中称作可变(varying)变量,在3.0版本中改名为顶点着色器输出变量。
2、OpenGL ES 3.0增加了一个新的功能:变量反馈,是定点着色器输出可以选择性地写入一个输出缓冲区(除了传递给片段着色器之外,也可能代替这种传递)

顶点着色器的输入和输出如图1-2所示:
BFD1002AF772303F36149CB3DB885D98.jpg

顶点着色器可以用于通过矩阵变换位置,计算照明公式来生成逐顶点颜色以及生成或者变换纹理坐标等基于顶点的传统操作。此外由于顶点着色器由应用程序规定,所以它可以用于执行自定义计算,实施新的变换照明或者比较传统的固定功能管线所不允许的基于定点的效果。

### 图元装配

顶点着色器后,OpenGL ES 3.0的图形管线的下一阶段就是图元装配。图元(Primitive)是三角形、直线或者点灯几何对象。

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

### 光栅化
光栅化会将图元转换成一组二位片段的过程,然后,这些片段有片段着色器处理。这些二位换的片段代表着可在屏幕上绘制的像素。

### 片段着色器

片段着色器韦片段上的操作实现了通用的可编程的方法。如下图所示,对光栅化阶段生成的每个片段执行这个着色器,采用如下输入:

  • 着色器程序——描述片段上所执行操作的片段着色器程序源代码或者可执行文件
  • 输入变量——光栅化单元用插值韦每个片段生成的顶点着色器输出
  • 统一变量——片段(或者顶点)着色器使用的不变数据
  • 采样器——待变片段着色器所用纹理的特殊统一变量类型

片段着色器可以抛弃片段,也可以生成一个或者多个颜色值作为输入。一般来说,除了渲染到剁成渲染目标之外,片段着色器只输出一个颜色值;在多重渲染目标的情况下,唯美个渲染目标输出一个颜色值。光栅化阶段生成的颜色、深度、模板和屏幕坐标位置编程OpenGL ES 3.0管线逐片段操作阶段的输入。
片段着色器的输入在图元之间进行线性插值,然后传递给片段着色器。

逐片段操作

片段着色器之后,下一个简短是逐片段操作。光栅化生成的屏幕坐标为(X,Y)的片段只能修改帧缓冲区中位置为(X,Y)的像素,下图描述了OpenGL ES 3.0 逐片段操作阶段


* 像素归属测试——这个测试确定帧缓冲区中心位置(x,y)的像素目前是不是归OpenGL ES 3.0所有。这个测试窗口系统能够控制帧缓冲区中的那些像素属于当前的OpenGL ES 上下文。例如:如果一个显示OpenGL ES帧缓冲区窗口的窗口被另一个窗口所遮蔽,泽这个窗口系统可以确定被遮蔽的像素不属于OpenGL ES 上下文,从而完全不显示这些像素。
* 裁剪测测试——裁剪测试确定(x,y)是否作为OpenGL ES状态的一部分的剪裁矩形范围内。如果钙片短位于裁剪区域的范围外,则被被抛弃
* 模板和深度测试——这些测试在输入片段的模板和胜读值上进行,已确定片段是否该被拒绝。
* 混合——混合讲新生的片段颜色值与保存在帧缓冲区(x,y)位置的颜色组合起来。
* 抖动——可用于最小化因为使用有限精度在帧缓冲区中保存颜色值而产生的伪像。

分类: OpenGL ES

bancheng

iOS开发者一枚,现就职中国北京。在这里记录自己开发遇到的问题和学习记录的笔记。喜欢学习、摄影。

发表评论

电子邮件地址不会被公开。 必填项已用*标注