OpenglES 3.0基础知识

一、Opengles特性

1.对Opengl的简化,比如OGL指定网格数据,可以用立即模式,可以显示列表,和顶点数组;但是Opengl es上 只能用顶点数组方式传递几何数据
2.对Opengl兼容,尽量定义为一个精简的opengl子集,也能够在Opengl中运行。
3.为了降低耗电和提高shader性能, 引入了类型精度限定符
4.确保实现图像质量的最小功能集,符合openglel图像质量,正确性和稳定性。

OES3.0兼容2.0,但是也有一些少量改变,OES3.0可以在帧缓冲区对象在各个 content之间共享,cube texture总是使用无缝过滤,有符号定点数转换为浮点数也有小修改。单OES3.0/2.0和OES1.0不兼容,因为有了可编程管线就可以放弃固定管线,因为同时兼容可编程和固定管线内存占用会大得多。在一个进程中支持多个Opengl es渲染上下文对象,在一个进程中跨opengl es渲染上下文对象共享对象(例如顶点或纹理缓冲区)。

OES渲染所用的窗口系统是EGL,只有IOS不支持EGL,EGL负责初始化显示器,创建渲染表面(帧缓冲区,颜色,深度,模板缓存区,以及他们的格式),创建OES实例(必须要链接到合适的渲染表面才能创建成功),OES可以和其它图形API或窗口的原生绘图命令之间同步渲染。OES还管理纹理贴图等资源。Apple有自己的实现叫EAGL。
OES程序的头文件和库:
#ifdef __APPLE__
#include <OpenGLES/ES3/gl.h>
#else
#include <GLES3/gl3.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>
#endif
基本状态管理,可以用glEnable(GLenum cap)开启; glDisable(GLenum cap)关闭;除了GL_DITHER抖动是默认开启的,其它都是默认关闭的,可以用glIsEnabled(GLenum cap)来查询。错误可以用GLenum glGetError()来查询。

二、OpenglES3.0新特性

OES1.0版本是基于固定管线的,OES2.0全面引入了顶点着色器和像素着色器渲染模式,OES3.0在2.0基础上添加了更丰富的最新图形学技术实现,例如: 阴影贴图,体渲染(将三维场景数据直接生成二维纹理技术,体纹理就是3D texture),GPU粒子动画,几何形状实例化,纹理压缩和Gamma校正等新技术。

1.纹理处理上的改进:

1).sRGB的gamma校正纹理和帧缓存区:
存储时可以时gamma校验的纹理(在纹理缓冲区中),读取到着色器时候需要反gamma校正到线性空间,在线性空间进行光照等计算(线性空间计算图像质量更好),输出到帧换缓存区是转换为sRGB伽马校正空间。
2).2D纹理数组,OES2.0只有单个纹理,用2D纹理数组做帧动画更加方便,不用修改纹理坐标。
3).3D纹理,医学成像中直接执行三维数据文件进行体渲染。
4).深度纹理和阴影比较,深度纹理是从光源位置作为观察点,将深度值写入深度纹理值在[0,1]内,对现有物体的纹理使用 纹理堆栈自动计算纹理贴图的(s,t,r,q)坐标,r值缩放到[0,1]内。再从正常视角渲染场景,当场景中物体的纹理r值小于深度纹理中的值时候渲染,大于深度纹理值时候写入0黑色。OES2.0也有深度纹理,3.0增加了阴影比较,可以对2个深度纹理进行线性插值,完成双线性过滤。
5).无缝cube texture,面之间无缝.
6).浮点纹理,拓展了支持的纹理格式,16浮点可以过滤,支持32浮点但是不能过滤。
7).ETC2/EAC纹理压缩,格式为:RGB888,RGB8888,以及单通道双通道的int unsign int数据。可以更好的利用纹理缓存,减少GPU内存占用。
8).整数纹理或其它纹理格式处理能力,对未规范化的整数(8,16,32)纹理,进行直接渲染或读取的能力。
9).非2次方纹理支持,OES2.0要求是2次方的纹理存储。
10).纹理LOD功能,可以手动设置应用的mipmap级别,和设置mipmap范围。
11).纹理调配,引入新的纹理对象状态,允许独立控制每个纹理通道(RGBA)在着色器中的映射。
12).不可变纹理,加载纹理数据之前手动指定纹理的格式和大小,这样纹理的格式不可变,OGLES预先执行所有的一致性检查,在绘制物体时候设置跳过一致性检查,可以提高性能。
13).最小尺寸增大,OES3.0最大纹理支持为2048.

2.着色器改进:

新特性:
1).二进制shader文件支持,编译后不用再编译,编译链接后不用再编译链接。
2).OES2.0不一定有shader编译器,3.0要求存在。
3).非方矩阵支持。
4).全整数支持,之前是浮点数。
5).质心采样,可以用质心采样声明顶点着色器的输出变量,避免多重采样产生伪命像。
6).光栅化时平面平滑插值支持,2.0在光栅化时候都是 默认线性插值。
7).统一变量块,可以高效
OpenGL ES 3.0 英文版 第1章——OpenGL ES 3.0简介   第1章简单介绍OpenGL ES,概述了OpenGL ES 3.0图形管线,讨论了OpenGL ES 3.0的设计理念和限制,最后介绍了OpenGL ES 3.0中使用的一些约定和类型。   第2章——你好,三角形:一个OpenGL ES 3.0示例   第2章介绍绘制三角形的一个简单OpenGL ES 3.0示例。我们的目的是说明OpenGL ES 3.0程序的样子,向读者介绍一些API概念,并说明如何构建和运行OpenGL ES 3.0示例程序。   第3章——EGL简介   第3章介绍EGL——为OpenGL ES 3.0创建表面和渲染上下文的API。我们说明与原生窗口系统通信、选择配置和创建EGL渲染上下文及表面的方法,传授足够多的EGL知识,你可以了解到启动OpenGL ES 3.0进行渲染所需的所有知识。   第4章——着色器和程序   着色器对象和程序对象是OpenGL ES 3.0中最基本的对象。第4章介绍创建着色器对象、编译着色器和检查编译错误的方法。这一章还说明如何创建程序对象、将着色器对象连接到程序对象以及链接最终程序对象的方法。我们讨论如何查询程序对象的信息以及加载统一变量(uniform)的方法。此外,你将学习有关源着色器和程序二进制代码之间的差别以及它们的使用方法。   第5章——OpenGL ES着色语言   第5章介绍编写着色器所需的着色语言的基础知识。这些着色语言基础知识包括变量和类型、构造器、结构、数组、统一变量、统一变量块(uniform block)和输入/输出变量。该章还描述着色语言的某些更细微的部分,例如精度限定符和不变性。   第6章——顶点属性、顶点数组和缓冲区对象   从第6章开始(到第11章为止),我们将详细介绍管线,教授设置和编程图形管线各个部分的方法。这一旅程从介绍几何形状输入图形管线的方法开始,包含了对顶点属性、顶点数组和缓冲区对象的讨论。   第7章——图元装配和光栅化   在前一章讨论几何形状输入图形管线的方法之后,第7章将讨论几何形状如何装配成图元,介绍OpenGL ES 3.0中所有可用的图元类型,包括点精灵、直线、三角形、三角形条带和三角扇形。此外,我们还说明了在顶点上进行坐标变换的方法,并简单介绍了OpenGL ES 3.0管线的光栅化阶段。   第8章——顶点着色器   我们所介绍的管线的下一部分是顶点着色器。第8章概述了顶点着色器如何融入管线以及OpenGL ES 着色语言中可用于顶点着色器的特殊变量,介绍了多个顶点着色器的示例,包括逐像素照明和蒙皮(skinning)。我们还给出了用顶点着色器实现OpenGL ES 1.0(和1.1)固定功能管线的示例。   第9章——纹理   第9章开始介绍片段着色器,描述OpenGL ES 3.0中所有可用的纹理功能。该章提供了创建纹理、加载纹理数据以及纹理渲染的细节,描述了纹理包装模式、纹理过滤、纹理格式、压缩纹理、采样器对象、不可变纹理、像素解包缓冲区对象和Mip贴图。该章介绍了OpenGL ES 3.0支持的所有纹理类型:2D纹理、立方图、2D纹理数组和3D纹理。   第10章——片段着色器   第9章的重点是如何在片段着色器中使用纹理,第10章介绍编写片段着色器所需知道的其他知识。该章概述了片段着色器和所有可用的特殊内建变量,还演示了用片段着色器实现OpenGL ES 1.1中所有固定功能技术的方法。多重纹理、雾化、Alpha测试和用户裁剪平面的例子都使用片段着色器实现。   第11章——片段操作   第11章讨论可以适用于整个帧缓冲区或者在OpenGL ES 3.0片段管线中执行片段着色器后适用于单个片段的操作。这些操作包括剪裁测试、模板测试、深度测试、多重采样、混合和抖动。本章介绍OpenGL ES 3.0图形管线的最后阶段。   第12章——帧缓冲区对象   第12章讨论使用帧缓冲区对象渲染屏幕外表面。帧缓冲区对象有多种用法,最常见的是渲染到一个纹理。本章提供API帧缓冲区对象部分的完整概述。理解帧缓冲区对象对于实现许多高级特效(如反射、阴影贴图和后处理)至关重要。   第13章——同步对象和栅栏   第13章概述同步对象和栅栏,它们是在OpenGL ES 3.0主机应用和GPU执行中同步的有效图元。我们讨论同步对象和栅栏的使用方法,并以一个示例作为结束。   第14章——OpenGL ES 3.0高级编程   第14章是核心章节,将本书介绍的许多主题串联在一起。我们已经选择了高级渲染技术的一个样本,并展示了实现这些功能的示例。该章包含使用法线贴图的逐像素照明、环境贴图、粒子系统、图像后处理、程序纹理、阴影贴图、地形渲染
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值