图形学基础——PC手机图形API介绍

基础概念

应用端:
	OpenGL,、OpenGL ES、DirectX都是应用端
图元:
	要渲染的几何物体,或者形状。比如渲染一个正方形的图片,是一个图元,渲染两条直线,这两条直线也是图元
纹理:
	可以理解为一张图片,在 OpenGL ES 中纹理就是图片的另外一种叫法
纹素:
	纹素是纹理的基础单位,但并不是像素,图像时由像素排列而成,纹理时由纹素排列表示的,两个具有本质上的区别
顶点数组:
	顶点指的是组成图元的各个顶点的坐标数据(在3D低价埃尔坐标中即 x,y,z 坐标),这些坐标数据可以一起存到一个内存数组中,这个数据叫做顶点数组
顶点缓冲区:
	在显存中专门分配一块显存来存储这个顶点数组,这个显存就称为顶点缓冲区

DirectX、OpenGL、OpenGL ES 发展史

Khronos 定义了 OpenGL ,微软自己定义了 DirectX 。
目前手机,不管是 IOS 还是 Android,都是支持 OpenGL ES
Windows 系统支持 DirectX 和 OpenGL,Linux/Mac(Unix)系统支持 OpenGL

在这里插入图片描述

OpenGL的发展过程中,从1.0开始有一个分支,一个是OpenGL ES1.1 ,一个是 OpenGL 2.0,最后都是 OpenGL ES 2.0。
在 2.0 中都是增加了一些片元着色器,替代了一些原先的方法。
20世纪90年代,OpenGL 开放。
2000年,OpenGL ES开放,直到现在,OpenGL ES已经到了3.2版本。
2005年,OpenGL SC开放。
2008年,开放基层更高效计算的OpenCL。
2014年,开放SPIR。
2015年,Vulkan开放,更加高效的GPU使用效率。

OpenGL ES

相同点:

	相比于 OpenGL ES 1.x 系列的古董功能管线,OpenGL ES 2.0 和 OpenGL ES 3.0 都是可编程图形管线。开发者可以自己编写图形
管线中的 顶点着色器 和 片元着色器 两个阶段的代码

OpenGL ES 渲染流程

2.0版本:
	首先是模型准备,然后由顶点着色器去编辑,然后把这些点面进行图元重组,然后进行光栅化,然后经过片元着色器的编写,最后通过三种测试,最后输出到 Frame Buffer 中
3.1版本:
	拿到这些 Buffer 缓存,然后传到顶点池,然后传给顶点着色器,然后顶点着色器进行分布 Transform 的 Feedback,进行一个返回,让我们去了解一些数据给下一阶段是使用,下一阶段拿到这些数据使用,之后要去进行光栅化,光栅化之后就是片元着色器的计算,之后进行逐片元渲染,然后输入到 Frame Buffer 中

不同点:

兼容性:
	OpenGL ES 3.0 是向后兼容 OpenGL ES 2.0的。也就是说使用 2.0 编写的应用程序可以在 3.0 中继续使用的
新特性:
	采用阴影贴图,体渲染(volume rendering),基于 GPU 的例子动画,几何形状实例化,纹理压缩和伽马校正等技术的重要功能在 2.0 都不具备。3.0 将这些功能引入,同时继续适应嵌入系统的局限性。
渲染管线:
	3.0 中移除了 Alpha 测试 和 逻辑操作(LogincOp)两部分,这两部分存在于 OpenGL ES 2.0 和 OpenGL ES 1.x 中移除 Alpha 测试是因为片元着色器可能抛弃片段,因此 Alpha 测试可以在片段着色器 中进行,移除 逻辑操作(LogicOp)是因为它很少被使用
着色器脚本编写:
	着色器脚本的辨析发生了比较大的变化,其中几点为:
	1)版本声明
		必须在着色器脚本中使用 #version 300 es 声明为指定使用 OpenGL ES 3.0 版本而不添加脚本声明或者使用 #version 100 es 声名版本则指定使用 OpenGL ES 2.0 
	2)输入输出
		3.0 中新增了 in ,out,inout 关键字,用来取代 attribute 和 varying 关键字。同时 gl_FragColor 和 gl_FragData也删除了,片段着色器可以使用 out 声明字段输出
	3)变量赋值
		3.0 中可以直接使用 layout 对指定位置的变量赋值。例如:
		#shader 脚本
		layout(location = 1 ) uniform float a;
		代码中,直接写上对应的 layout 的值就可以赋值
		GLES30.glUniformlf(1,1f);
		而 2.0 中必须使用如下形式赋值
		GLES20.glUniformlf(GLES20.glGetAttribLocation(program,"a"),1f)

骁龙Adreno 对应的 OpenGL ES 版本

Adreno 是骁龙手机端的 GPU 框架。
从 Adreno 302 开始,支持 OpenGL ES 3.0。
从 Adreno 405 开始,支持 OpenGL ES 3.1。
从 Adreno 420 开始,支持 OpenGL ES 3.2。
Adreno 305、306、320、330、405、420 支持 OpenGL ES 3.0 版本
Adreno 320 开始支持 OpenGL ES 3.0 是指的稳定支持

关于Vulkan

	Vulkan 被视作是 OpenGL 的后续产品。 它是一种多平台 API,可支持开发人员准备游戏、CAD 工具、性能基准测试等高性能图形应用。
它可在不同的操作系统(比如 Windows*、Linux* 或 Android*)上使用
	是新一代的 API ,但是相对 OpenGL 来说,在复杂度和维护难度上,Vulkan 的门槛很高,虽然有更高效的计算性能,作为新兴的具有
生命力的 Vulkan ,相信在以后的运用中更加广泛

作业——说出支持OPenGL ES3.2的骁龙GPU型号有哪些

Adreno 420 以后的都支持

作业——怎么看待Valken

	跨平台,基本上支持了除苹果以外的平台
	Vulkan支持的比OPenGL做得事情多
	更倾向于一个“类平台”的概念,深入硬件底层,上手难度大
	OpenGL 当时声称是跨平台的图形学API,却在移动平台上裁剪搞出 OpenGL ES,如今移动平台硬件性能强悍起来了,统一的 API 又浮出
水面了。AMD 捐献出铺路的 Mantle,成了后来的 Vulkan
	主要的短板在于驱动支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值