OpenGL ES 3.0 简介
转载请以链接形式标明出处:
本文出自:103style的博客
OpenGL ES 3.0学习汇总
- OpenGL ES 3.0 学习记录汇总
简介
OpenGL ES (OpenGL for Emberdded Systems)是以 手持 和 嵌入式设备 为目标的高级3D图形应用编程接口(API)。
Android 4.3 + 和 iPhone 5s + 已经支持OpenGL ES 3.0。
OpenGL ES 3.0 向后兼容 OpenGL ES 2.0。
OpenGL ES 3.0 是从 OpenGL 3.3规范 衍生而来。
OpenGL ES 3.0 图形管线
OpenGL ES 3.0实现了具有 可编程着色功能 的图形管线,由 OpenGL ES 3.0 API 和 OpenGL ES 着色语言3.0规范 组成。
下图中深色背景的 顶点着色器 和 片段着色器 为可编程阶段。
顶点着色器
顶点着色器 实现了顶点操作的通用可编程方法。
顶点着色器的输入包括:
- 着色器程序一一描述顶点上执行操作的顶点着色器程序源代码或者可执行文件。
- 顶点着色器输人(或者属性)一一用顶点数组提供的每个顶点的数据。
- 统一变量(uniform)一一顶点(或者片段)着色器使用的不变数据。
- 采样器一一代表顶点着色器使用纹理的特殊统一变量类型。
下图是顶点着色器的输入输出模型。
顶点着色器取得一个位置及相关的颜色数据作为输入属性,用一个 4x4矩阵变换位置,并输出变换后的位置和颜色。
以下为顶点着色器示例:
#version 300 es //提供着色语言的版本 必须出现在第一行
uniform mat4 u_mvpMatrix; # 统一变量 储存组合的模型视图和投影矩阵in vec4 a_postion; # 顶点着色器输入的位置属性
in vec4 a_color; # 顶点着色器输入的颜色属性out vec4 v_color; # 顶点着色器输出的颜色属性
void main(){v_color = a_color; # 读取输入属性并写入输出属性上# 内建变量gl_Position 是自动声明的gl_Position = u_mvpMatrix * a_postion; # 变换后的位置写入gl_Positon输出
}
mat4
: 基本类型, 4 * 4浮点矩阵
vec4
: 基本类型,4分量浮点向量
uniform
: 储存限定符,在图元处理中值不改变,统一变量组成了着色器、OpenGL ES 和 应用程序的链接。
in
: 参数限定符,用于传入函数的函数参数
out
: 参数限定符,用于传出函数,但是传入时没有初始化的参数
图元装配
OpenGL ES 3.0 图形管线,在 顶点着色器 之后就是 图元装配 了。
图元是 三角形、直线 或者 点精灵 等几何对象。
图元的每个顶点被发送到顶点着色器的不同拷贝,在图元装配期间,这些顶点被组合成图元。
对于每个图元,会抛弃图元不在 视锥体(屏幕可见的区域
)内的部分,在视锥体内的区域的部分经过裁剪之后,将顶点位置转换为屏幕坐标。然后传递到管线的下一阶段 —— 光栅化阶段。
光栅化
光栅化阶段 会绘制对应的 图元。
光栅化 是将 图元 转化为 二维片段 的过程,然后这些片段再由 片段着色器 处理。这些二维片段代表可在屏幕上绘制的像素。
下图为光栅化流程:
片段着色器
为 片段上的操作 实现了通用的可编程方法。
采用 如下输入 对每个光栅化阶段的片段执行这个着色器。
- 着色器程序——描述片段上所执行操作的片段着色器程序源代码或者可执行文件。
- 输入变量——光栅化单元用插值为每个片段生成的顶点着色器输出。
- 统一变量——片段(或者顶点)着色器使用的不变数据。
- 采样器——代表片段着色器所用纹理的特殊统一变量类型。
片段着色器可以抛弃片段,也可以生成一个或多个颜色值作为输出。
片段着色器一般只输出一个颜色值,在 渲染多重目标 的时候会为每一个渲染目标输出一个颜色值。
光栅化阶段 生成的 颜色、深度、模板 和 屏幕坐标位置(Xw,Yw) 变成 OpenGL ES 3.0管线 逐片段操作 阶段的输入。
片段着色器示例:
#version 300 es //提供着色语言的版本
precision mediump float; # 默认的精度限定符in vec4 v_color; # 片段着色器的输入,即顶点着色器的输出out vec4 fragColor; # 片段着色器的输出变量, 即传递到逐片段操作的颜色
void main()
{fragColor = v_color; # 输出颜色设置为输入颜色 片段着色器的输入在图元之间进行线性插值 然后传递给片段着色器
}
precision precision-qualifier type;
precision
: 可以用来确定默认精度修饰符,type
可以是int
或float
或采样器类型
,precision-qualifier
可以是lowp
,mediump
, 或者highp
。任何其他类型和修饰符都会引起错误。包括全局变量声明,函数返回值声明,函数参数声明,和本地变量声明等。没有声明精度修饰符的变量将使用和它最近的precision语句中的精度。
highp
: 精度和精度限定符,满足顶点语言的最低需求。
lowp
: 精度和精度限定符,范围和精度低于mediump
,但是任然能够表现所有颜色通道的所有颜色值。
mediump
: 精度和精度限定符,范围和精度介于highp
和lowp
之间。
FP = 浮点
FP范围 | FP幅值范围 | FP精度 |
整数范围 有符号
|
整数范围 无符号
|
|
---|---|---|---|---|---|
highp
|
(2-126,2127) | 0.0, (2-126,2127) | 2-24 | (2-31,231-1) | (0,232-1) |
mediump
|
(2-14,214) | (2-14,214) | 2-10 | (2-15,215-1) | (0,216-1) |
lowp
|
(-2,2) | (2-8,2) | 2-8 | (2-7,27-1) | (0,28-1) |
逐片段操作
光栅化阶段生成的屏幕坐标为(Xw,Yw)的片段只能修改 帧缓冲区 中位置为(Xw,Yw)的像素。
下图描述了OpenGL ES 3.0 逐片段操作阶段。
- 像素归属测试——确定帧缓区中的位置(Xw,Yw)的像素是不是归OpenGL ES 所有。被遮挡的像素则不属于OpenGL ES 的上下文,从而不显示这些像素。此过程在OpenGL ES 内部处理,不由开发人员控制。
- 剪裁测试—— 确定(Xw,Yw)是否位于OpenGL ES 状态的一部分的裁剪矩形范围内,抛弃范围之外的片段。
- 模板测试、深度测试—— 这些测试在输入片段的 模板 和 深度值 上进行 ,以确定片段是都该被拒绝。
- 混合——将新生成的颜色和保存在帧缓冲区(Xw,Yw)位置的颜色值组合起来。
- 抖动——用于最小化 因为使用有限精度在帧缓冲区中保存颜色值而产生的伪像。
在逐片段操作阶段的最后,片段 被拒绝 或者 在帧缓冲区(Xw,Yw)位置写入片段的颜色、深度或者模板值。
写入片段的颜色、深度或者模板值 取决于 启用的相应写入掩码。写入掩码可以更精细的控制写入的值。例如,可以设置颜色缓冲区的写入掩码 使得 任何红色值都不被写入到颜色缓冲区
。
OpenGL ES 3.0 简介相关推荐
- 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》.(吴亚峰).[PDF]ckook
图书作者: 吴亚峰 图书编号: 9787115277701 图书格式: PDF 出 版 社: 人民邮电出版社 出版年份: 2012 图书页数: 700-800 [内容简介] 随着智能手机移动嵌入式平台 ...
- Android音视频学习系列(六) — 掌握视频基础知识并使用OpenGL ES 2.0渲染YUV数据
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
1. 打开Eclipse,File-->New-->Project--->Android-->AndroidApplication Projec ...
- cocos2d-x 2.X for Android中需要使用OpenGL ES 2.0
cocos2d-x 2.X for Android中需要使用OpenGL ES 2.0 到了2.X版本中,cocos2d-x for Android已经不再支持(或者说放弃支持)opengl es 1 ...
- OpenGL ES 3.0 基础知识
首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...
- LINUX 下构建OpenGL ES 3.0
Ubuntu LINUX 下构建OpenGL ES 3.0 Category : OpenGL LINUX 下构建OpenGL ES 3.0 软件:PowerVRSDKSetup-4.0.run-x6 ...
- 《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》一6.6 本章小结
本节书摘来异步社区<OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例>一书中的第6章,第6.6节,作者: 吴亚峰 责编: 张涛,更多章节内容可以访问云栖社区"异步社 ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- android opengl es 纹理 不同设备 白色,android – OpenGL ES 2.0纹理没有在某些设备上显示...
早上好,这是2个纹理非幂的典型例子. 由于多种原因,纹理在分辨率上需要2的幂,这是一个非常常见的错误,每个人都碰巧陷入这个陷阱:)我也是. 2个纹理的非功率在某些设备/ GPU上运行平稳的事实,仅仅取 ...
最新文章
- php exchange,PHP SDK for digital currency exchange
- android studio差异化,productFlavors + buildTypes + signingConfigs 构建差异化 Android 应用
- java 富文本编辑器的标签处理数据 从数据库中取出 并返回前台
- 奥运加油,中国加油!!!
- 打包指令_Linux系统常用指令总结
- 【5G落地】首批5G商用牌照正式颁发!5G和AI并肩前行,会带来下一次的工业革命吗?...
- 随想录(嵌入式工程师的出路)
- Flex代码整理插件——FlexPrettyPrintCommand
- 重磅预告!企业上云的正确姿势
- C语言--冒泡排序法(详细注释)
- 什么是炎症(inflammation)?抗生素?//2021-2-12
- cookie基础知识
- 数学竞赛书单该怎么选?金牌牛娃用的书都在这里了!
- PHP+MySQL实现简单的登录注册
- linux中浏览器安装flash player
- illustrator字体设计教程 刘兵克Illustratorai字体设计日记
- 蓝牙麦克风 android,带蓝牙麦克风的Android语音识别器
- 用Python3爬取知乎上好看的壁纸
- 【机械臂优化】基于粒子群算法实现考虑关节限位约束下的冗余机械臂求逆解附Matlab代码)
- 21计算机考研408复习经验帖
热门文章
- html5 气泡文字提示框,css实现气泡文字提示框代码教程
- 计算机维修员周记300字,计算机实习周记300字.doc
- python中的eof错误_python – 解析器YACC中的EOF错误
- vs2008 创建对话框MFC应用程序调试c++代码
- 高级计算机体系结构知识点,高级计算机体系结构知识点.pdf
- Parallels Desktop 网络初始化失败解决方法
- Python Selenium 抖音直播平台实现自动发送评论
- 51单片机:直流电机与步进电机
- 这个 Chrome 插件,让你的 ChatGPT 不再报错
- Java打印个人基本信息