OpenGL ES基础(二)

(八)类型修饰符
1,类型修饰符作用
作用:数据类型可以通过一些修饰符来改变自己的行为
attribute 一般用于每个顶点都各不同的量,例如:顶点,颜色
1,属于属性限定符
2,修饰的变量,用来接收渲染流水线传递进顶点着色器的当前待处理顶点的各个属性,(用来描述顶点特征)例如:顶点坐标,法向量,颜色,纹理坐标
3,只用于顶点着色器
4,只能用来修饰浮点数的标量,向量,以及矩阵变量!
uniform 一致变量修饰符
(什么是一致变量:一致变量是指 对同一组顶点组成的单个3D物体中所有顶点都相同的量)

1,可以用在顶点和片段着色器中
2,可以修饰所有的基本数据类型
3,在顶点着色器中正确使用的方法
unifrom mat4 modelViewProjectionMAtrix ;
4,怎么将一致变量的值从宿主语言(java语言)传递到着色器
//得到着色器的值
int glHMatrix = GLES20.glGetUniformLocation(mProgram, "vMatrix");
//给着色器的值复赋值
GLES20.gluniformMatrix4fv(glHMatrix ,1,矩阵 ,0)
例子:ndk上获取
//得到着色器的值
GLint timeLoc=glGetUniformLocation(着色器程序,“着色器里面Uniform变量的名字”)
//给着色器里面的变量赋值
Gluniform1f(timeLoc,要付的值)

varying 在顶点着色器和片元着色器中都有,而且变量名一样!(可以有多个)
作用:从顶点着色器传递到片元着色器的量
(只要你想要从顶点着色器传递信息到片元着色器中,就得使用vaying)
const 修饰的变量的值不可变(编译时常量:声明的时候就必须要初始化)
例子:
const float pi=3.14;

in
out
inout in:设置这个变量为着色器的输入变量
out:设置这个变量为着色器的输出变量
inout:用来修饰的参数为输入输出参数,具有输入输出两种功能
(九)语句
1.GLSL操作符与优先级
操作符 描述
() 用于表达式组合,函数调用,构造
[] 数组下标,向量或矩阵的选择器
. 结构体和向量的成员选择
++ – 前缀或后缀的自增自减操作符

  • – ! 一元操作符,表示正 负 逻辑非
  • / 乘 除操作符
    • 二元操作符 表示加 减操作
      <> <= >= == != 小于,大于,小于等于, 大于等于,等于,不等于 判断符
      && || ^^ 逻辑与 ,或, 异或
      ?: 条件判断符
      = += –= *= /= 赋值操作符
      , 表示序列

2.操作符重载
GLSL里大部分操作符都是经过重载的,也就是说他们可以用作多种数据类型操作
1.向量和矩阵相乘
例如:vec3 xyz;
mat3 m;
vec3 xyz1 = xyz*m;
注意:要求向量的维度和矩阵的维度必须匹配!

2向量相乘:逐个分量相乘
vec2 a,b,c;
c=ab;//计算 c=( a.xb.x , a.y*b.y );
3矩阵相乘: 得到是通常矩阵相乘的结果;

矩形相乘.png

例如:mat2 m,u,v;
m=uv;
//m=(u00
v00+u01v10 u00v01+u01v11
u01
v00+u11v10 u10v01+u11*v11);

3.控制流
if(){}else{}
switch(){}
4.循环语句
for(){}
while(){}
do{}while()
5.流控制语句
语句 · 描述
brake 终止循环体的运行,并且继续执行循环体外的内容
continue 种植循环体内当前迭代过程的执行,跳转到代码块开始的部分并继续执行下一次迭代的内容
return 从当前例程返回,可以带有一个函数的返回值(返回值必须与函数声明的返回类型相符合)
discard
丢弃当前片元,终止片元着色器执行(只能在片元着色器中使用,运行到该语句位置上时 片元着色器会立即终止)
6.函数声明
注意:
1.函数声明,变量名需要添加访问修饰符
2.GLSL支持用户自定义函数,同时它定义了一些内置函数
3.函数名称可以是任何字符、数字、下划线,但是不能使用数字,连续下划线或者gl_作为函数的开始
4.返回值可以是任何内置的GLSL类型,或者用户定义的结构体和数组类型。
5.返回值是数组时,必须现实的指定大小。函数返回类型是void则没有返回值
6.函数的参数也可以是任何类型的函数,包括数组(这里数组必须设置大小)
7.在使用一个函数前必须声明他的原型或者直接给出函数体。
8.GLSL的编译器在使用函数前必须找到函数的声明,否则会产生错误
9.函数原型只是给出了函数的形式,但是并没有给出具体的实现内容
例如:
float HornerEvalPolynomial(float coeeff[10] ,float x);

(十)程序的基本结构
1.程序基本组成

  1. 案例分析
    ====================案例Start==========================
    uinfrom mat4 uMVPMatrix;
    attruibte vec3 aPosition;
    attruibte vec2 aTexCoor;
    varying vec2 vTextureCoord;

void positionShift(){
gl_Position = uMVPMatrix * vec4(aPosition,1.0);
}

void main(){
positionShift();
vTextureCoord = aTexCoor;
}
====================案例End==========================
(十一)内建变量


image.png

image.png

image.png

image.png

2】片元着色器
片元着色器中的内建变量分为输入变量以及输出变量。
一】输入变量
片元着色器中的内建输入变量主要有 gl_FragCoord 和 gl_FrontFacing。这两个内建变量都是只读的,由渲染管线中片元着色器之前阶段生成。


image.png
image.png

image.png

image.png

image.png

(十二)内建函数
与其他高级语言类似,为了方便开发,OpenGL ES着色语言也提供了很多的内置函数。
这些函数大都已经被重载,一般具有4种变体,分别用来接收和返回float、vec2、vec3以及vec4类型的值。
为什么使用内置函数:
1.内置函数都是以最优的方式实现的,有部分函数甚至由硬件直接支持,大大提高了执行效率!
注意:大部分内置函数同时适用于顶点作色器与片元着色器,但也有部分内置函数只适合顶点着色器或者片元着色器的
内置函数按照设计目的分为3个类型:


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

推荐阅读更多精彩内容