OpenGL ES之路01-GLSL语言(上)

一 初识OpenGL

1.OpenGL是什么?有什么用途?

OpenGL是一个开放的图形库,可用于视频、图片、图形处理,2D/3D游戏开发,科学可视化,医学软件开发,CAD(计算机辅助技术),虚拟实境(AR VR),AI人工智能等领域。

2.OpenGL和OpenGL ES是什么关系?

OpenGL ES是OpenGL的子集,OpenGL ES即一个在移动平台上能够支持OpenGL最基本功能的精简规范。

3.为什么要用OpenGL ES?

让我们看一下常规的CPU与GPU交互流程:

CUP与GPU交互流程示意图

CPU与GPU之间是不能直接交互的,需要通过内存区传递数据,速度较慢,而且在内存复制过程中CPU和GPU为避免数据错误都不能操作此块内存,因此造成了所谓的“数据饥饿”。OpenGL为了提升渲染的性能,为两个内存区域间的数据交换定义了缓存。缓存是值GPU能够控制和管理的连续的RAM(Random-Access Memory(随机存取存储器))。程序从CPU的内存复制数据到OpenGL ES的缓存。通过独占内存,GPU能够尽可能以有效的方式读写内存。GPU把它处理数据的能力异步地应用在缓存上,意味着GPU使用缓存中的数据工作的同时,运行在CPU中的程序可以继续执行。


OpenGl对交互流程的优化示意图



二 着色器语言

1.名词解释

1)图元

图形软件中用来描述各种图形元素的函数,简单来说就是组成图像的基本单元。

2)OpenGL渲染管线(重点)

通俗来讲叫渲染流水线:显示芯片内部处理图形信号互相独立的并行处理单元,简单来说就是一系列有序的处理阶段的序列,用于把我们应用中的数据转化到OpenGL生成一个最终图像的过程。


OpenGL渲染流水线示意图

3)简单分析顶点着色器

#version 330 code//版本

in vec4 vPosition; //in:输入  vec4:向量  vPosition 变量名

in vec4 vColor;

//Unifrom的作用:从宿主语言中通过OpenGl的函数给GLSL传值

Unifrom mat4 ModelViewProjectionMatrix;

void main(){

glPosition=modelViewProjectionMatrix*vPosition;

}

4) 基本语法

1.注释:单行注释"//“,多行注释”/*。。。*/“

2.main函数没有返回值

3.每条语句结尾都要加一个分号


2.GLSL变量认识

1)GLSL支持的基本数据类型


GLSL支持的基本数据类型

Android上OpenGL ES2.0中的基本数据类型:浮点型float,布尔型bool,整型int,矩阵型matrix以及向量型vec2等。总体来说,这些数据类型可以分为标量、向量、矩阵、采样器以及数组等几种分类。

2)什么是标量

只有大小没有方向

3)变量命名规范

组成方式:字母、数字、下划线

注意:

1.数字和下划线不能作为变量名第一个字符

2.变量名不能包含连续的下划线

3.系统内变量名都是以"gl"开头,因此不允许使用"gl"作为变量名、类名、常量、方法名开头

4.起名需见名知意

4)变量的初始化

int i=150;

float g=9.0; (必须包含小数点,否则计算会出错)

bool: true或false(0或1)

3.聚合类型——向量

1)什么是向量

有大小有方向的量叫做向量,OpenGL ES着色语言中,向量可以看做是同样类型的标量组成的,其基本类型也分为int float bool三种,每个向量可以由2个、3个、4个标量组成

2)向量在着色器中的作用

可以很方便的存储和操作颜色、位置、纹理、坐标等不仅仅包含一个组成部分的量。

开发中有时候可能会需要单独获取某向量中的单个分量,基本语法为:"<向量名>.<分量名>"


基本类型示意图

3)向量的初始化

1.常规初始化:

vec3 xyz=vec3(0.0,1.0,2.0);

vec4 rgba=vec4(0.1,0.5,0.7,1.0);

vec3 xyz=vec3(1.0)和vec3 xyz=(1.0,1.0,1.0)语义相同。

2.加长操作:

vec3 xyz=vec3(0.0,1.0,2.0);

vec4 rgba=vec4(xyz,1.0);

3.取短操作:

vec4 rgba=vec4(0.1,0.5,0.7,1.0);

vec3 xyz=rgba.rgb;或vec3 xyz=rgba.xyz; (即后面的名称与取短无关,只代表了取几位,例如vec2 xy=rgba.xy意思即取向量rgba的前两个分量)



4 聚合类型——矩阵

1.矩阵在3D开发中的作用

在现实世界里存在三维空间的问题,比如当一架飞机从地面起飞,就会有平移、旋转等动作,如果要描述这架飞机上所有点的坐标变化,需要引入三维空间坐标,这样每一点的变化就需在三个维度上描述,引入线性变换的线性方程组,而处理这些线性方程组,就需要计算系数与三个变量的关系,再加上空间方向引入,就刚好是三维矩阵来处理了。由此可见,矩阵在描述三维物体的运动的变化是一个很合适的工具。

2.矩阵类型


矩阵类型示意图

3.矩阵初始化

mat4*4是什么意思?第一个4表示4列,第二个4表示4行

单位矩阵:主对角线的分量均为1个单位,其余分量为0

规则:传入的数据首先填充列,然后填充行。


矩阵初始化常规示例图

矩阵的其他初始化方法

例1:

vec3 v1=vec3(1.0,2.0,3.0);

vec3 v2=vec3(4.0,5.0,6.0);

vec3 v3=vec3(7.0,8.0,9.0);

mat3 m=mat3(v1,v2,v3);

例2:

vec2 v1=vec2(1.0,2.0);

vec2 v2=vec2(4.0,5.0);

vec2 v3=vec2(7.0,8.0);

mat3 m=mat3(v1,3.0,v2,6.0,v3,9.0);



附:矩阵计算

矩阵的加减:矩阵内对应位置分量的加减(两矩阵行列数必须相等)

矩阵乘标量:矩阵内每一个分量乘以标量值

矩阵间相乘:第i行乘以第j列(A矩阵的行数必须等于B矩阵的列数,例:A:mat2*3,B:mat3*2)

矩阵相乘例:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容