3D开发学习-着色语言 Shading Language基础(二) 使用
来源:互联网 发布:淘宝宠爱之名是真的吗 编辑:程序博客网 时间:2024/06/12 01:45
第一:在上一篇博客中,写了shading language的基础类型,现在说一下shading language的基础类型的声明,初始化和作用域问题.
1.声明,作用域及初始化:
变量的声明及作用域与C++语法类似,可以在任何需要的地方声明,同时作用域也与C++类似,分为局部变量和全局变量.如下:
int a , b; //全局变量a和bvec3 aPosition = vec3(1.0 , 2.0 ,3.0); //全局变量并赋值void myFunchtion(){ int c = 14;//局部变量c a = 4;//全局变量赋值 b = a*c;}向量和矩阵的初始化还有一些技巧,如下:
float a = 12.3;float b = 11.4;vec2 va = vec2(2.1 , 2.2); //声明二维向量并赋值vec2 vb = vec2(a , b); vec3 vc = vce3(vb , 11.1);//声明三维向量并赋值vec4 vd = vec4(va ,vb);mat3 ma = mat3(vc , vc ,vc);//3X3矩阵mat3 mb = mat3(2.1); //等同于{2.1 , 0 , 0 , 0 , 2.1 , 0 , 0 , 0 , 2.1}
2.变量初始化的规则:
a.常用初始化方式:变量可以在声明的时候就初始化;
int a = 2 , b = 3 , c ;b.限定符修饰的变量必须在声明的时候初始化:
const float k = 1.1; //常量初始化c.属性变量,一致变量,易变变量在声明的时候一定不能初始化:
attribute float angleSpan; //属性变量不可初始化uniform int l ; //一致变量不可初始化varying vec3 position; //易变变量 不可初始化
1.索引:
float array[10]; //声明一个大小为10的数组array[2];//拿到索引为2的数据vec3 position = vec3(1.0 , 2.0 , 3.0);float one = positon[1]; //拿到索引为1的数据
2.混合选择:可以通过 " . "混合选择;
vect4 color = vec4(0.3 , 0.4 , 0.5 , 0.6);vec3 temp = color.agb; //实际数据(0.4 , 0.5 , 0.6)vec4 temp1 = color.aaab;//实际数据(0.6 , 0.6 , 0.6 ,0.5)
3.算数运算符.包括(++ -- -(一元非) ! * / + -)
4.其他运算符:包括(< > <= >= == != && ^^ || ?: = += -= *= /=)
因为3和4都和常规的编程语言一样就不做多余解释了;
第三:类型转换:
着色语言没有提供类型自动提升,赋值表达式的两个操作数类型必须完全相同.另外调用的函数的参数也要完全相同.而且着色语言没有提供类型的强制转换,只能通过构造函数实现;
float a = 1.0;bool b = bool(a);
第四,限定符:着色器语言的限定符主要有如下几个:
uniform mat4 uMVPMatrix;//一致变量修饰符uniformattribute vec3 aPositon;//属性变量修饰符attributevarying vec4 aaColor;//易变变量修饰符varyingconst int con = 5 ;//常量修饰符 const
第五,流程控制.
和常规的编程语言一样,着色语言有if-else条件语句,while(do-while)循环语句和for循环语句.语法也基本一致.
第六:函数的声明与使用:
基本格式如: <返回类型> 函数名 (<参数序列>) {/*函数体*/}
需要注意的是在着色语言中有三种特定的修饰符
a. in 代表的是输入性参数
b. out 代表的是输出型参数
c . inout 代表的是输入输出型参数
第七:片元着色器中的浮点变量精度指定,从低到高分别是lowp medium highp
lowp float color;//精度级别lowpvarying medium vec2 Coord;//精度级别mediumhighp mat4 m;//精度级别medium
1 0
- 3D开发学习-着色语言 Shading Language基础(二) 使用
- 3D开发学习-着色语言 Shading Language基础(一)
- 3D开发学习-着色语言 Shading Language基础(二) 特殊内建变量
- 着色语言 Shading Language(二)
- 着色语言 Shading Language(一)
- 【OpenGL ES系列教程四】着色语言 Shading Language(二)
- OpenGL 4.0 Shading Language Cookbook - 一本关于着色语言的新书
- 【OpenGL ES系列教程三】着色语言 Shading Language(一)
- 【OpenGL ES系列教程三】着色语言 Shading Language(一)
- shading Language glsl cg 3d程序员的黑话
- 绘制语言(Shading Language)
- 学习《Android3D游戏开发技术宝典:OpenGL.ES.2.0》二:着色器语言基础
- OpenGL Shading language学习总结
- OpenGL进阶(十二) - 基础着色(Shading)
- OpenGL进阶(十二) - 基础着色(Shading)
- 着色语言(Shader Language)
- 着色语言(Shader Language)
- VRC 3D chat uses IRC, the OpenGL API and OpenGL Shading Language
- java之多态调用成员变量,成员函数,静态函数的特点
- 在UVM中添加env
- Android中动画的使用
- VS远程调试
- reboot和init 6之间的区别
- 3D开发学习-着色语言 Shading Language基础(二) 使用
- 热转印PCB板子流程
- spring mvc之 如何redirect和forward
- javascript ArrayBuffer类型化数组和视图的操作
- 让你的程序支持https以及https的抓包
- C++复习
- Sizeof与Strlen的区别与联系
- 原生APP中js怎样与Android和ios进行交互
- 深入理解 Java中的 流 (Stream)