3D开发学习-着色语言 Shading Language基础(一)
2016-12-20 09:12
295 查看
一:简介:
OpenGL ES 着色语言是一种高级的图形编程语言.其源自应用广泛的C语言,同时具有RenderMan以及其他编程语言的一些优良特性.
与传统的语言不同的是,他提供了更加丰富的原生类型,比如向量,矩阵等.OpenGL ES着色语言的特性如下:
1.Open GL着色语言是一种高级的过程语言(不是面向对象)
2.对于顶点着色器,片元着色器使用的是同样的语言,不区分.
3.基于C/C++的语法及流程控制
4.完美支持向量与矩阵的各种操作
5.通过类型限定符管理输入和输出
6.拥有大量的内置函数,提供的功能丰富.
有人总结说过,OpenGL ES着色语言是一种易于实现,功能强大,便于使用,完美支持硬件灵活性,并且可以高度并行处理,性能优良的高级图形编程语言.因此,3D开发的话,掌握着色语言就变得尤为重要了.
二:着色语言基础:
虽然OpenGL ES的着色语言是基于C/C++的,但是还是有很多不一样的地方的.比如说,该语言不支持双精度(double),字节型(byte),短整型(short),长整形(long),并且取消了C的联合体(union),
枚举型(enum),无符号整形(unsigned)以及位运算等特点.
1.标量:标量在着色语言中被称为是 无向量 .只有大小,没有方向.运算尊选代数运算.主要类型有三个
布尔型:bool bool b;//申明一个布尔值
整形:int
int i;//申明一个整形
浮点型:float
float f;//申明一个浮点型
2.向量:可以理解为是用同样类型的标量组成,基本类型为bool,int,float三种.每个向量是有两个,三个,四个相同的标量组成的.
vec2 : 包含两个浮点数的向量;
vec3 : 包含三个浮点数的向量;
vec4 : 包含四个浮点数的向量;
ivec2 :包含两个整形数的向量;
bvec4 : 包含四个布尔型的向量;
特殊的一个点:当把向量看作颜色的时候,可以使用r g b a 四个分量,代表红 绿 蓝 透明度,如:
aColor.r = 0.6 ; //给向量aColor指定红色分量
aColor.a = 0.6 ; //给向量aColor指定透明度分量
当把向量看作坐标位置时可以使用x y z w四个分量,用法如颜色.
当把向量看作纹理坐标时,可以使用s t p q四个分量,用法如颜色.
此处,除了使用 . 作为加分量名外,还可以使用数组的方式实现,如:
aColor[0] = 0.6; //
给向量aColor指定红色分量
需要注意的是,一次只能使用一组分量,比如使用r g b a 的时候,不能混合 x y z w.
3.矩阵:矩阵,平凡用于3D中的旋转,缩放,平移等,因此,矩阵支持就显得很必要了.
mat2 : 2 X 2 的浮点数矩阵;
mat3 : 3 X 3 的浮点数矩阵;
mat4 : 4 X 4 的浮点数矩阵;
在着色语言中,矩阵是按照顺序组织的,也就是说可以看作是几个列向量组成.比如,mat3就是由3个vec3组成的.
在取值的时候,比如matrix是一个mat3的矩阵,那么matrix[1]就渠道的是这个矩阵的第二列,为一个vec3向量.matrix[1][1]取到的是第二行第二列的数,是一个float型.
4.采样器:不同与C语言的基本数据类型,采样器专门用来进行纹理采样.一个采样器代表一副或一套纹理贴图.
sampler2D : 用于访问2维纹理;
sampler3D : 用于访问3维纹理;
samplerCube : 用于访问立方贴图纹理;
5.结构体:自定义结构体,如C语言,关键词使用struct,例如:
struct info {
vec3 color;
vec3 position;
vec2 textureCoor;
}
6.数组:
vec3 position[20] ; //申明一个包含20个vec3的数组
vec3 position[] ; //申明一个大小不固定的数组
postion[3] = vec3(3.0) ; //position的大小需要是4
7.空类型:空类型使用void,例如:
void main() { }
OpenGL ES 着色语言是一种高级的图形编程语言.其源自应用广泛的C语言,同时具有RenderMan以及其他编程语言的一些优良特性.
与传统的语言不同的是,他提供了更加丰富的原生类型,比如向量,矩阵等.OpenGL ES着色语言的特性如下:
1.Open GL着色语言是一种高级的过程语言(不是面向对象)
2.对于顶点着色器,片元着色器使用的是同样的语言,不区分.
3.基于C/C++的语法及流程控制
4.完美支持向量与矩阵的各种操作
5.通过类型限定符管理输入和输出
6.拥有大量的内置函数,提供的功能丰富.
有人总结说过,OpenGL ES着色语言是一种易于实现,功能强大,便于使用,完美支持硬件灵活性,并且可以高度并行处理,性能优良的高级图形编程语言.因此,3D开发的话,掌握着色语言就变得尤为重要了.
二:着色语言基础:
虽然OpenGL ES的着色语言是基于C/C++的,但是还是有很多不一样的地方的.比如说,该语言不支持双精度(double),字节型(byte),短整型(short),长整形(long),并且取消了C的联合体(union),
枚举型(enum),无符号整形(unsigned)以及位运算等特点.
1.标量:标量在着色语言中被称为是 无向量 .只有大小,没有方向.运算尊选代数运算.主要类型有三个
布尔型:bool bool b;//申明一个布尔值
整形:int
int i;//申明一个整形
浮点型:float
float f;//申明一个浮点型
2.向量:可以理解为是用同样类型的标量组成,基本类型为bool,int,float三种.每个向量是有两个,三个,四个相同的标量组成的.
vec2 : 包含两个浮点数的向量;
vec3 : 包含三个浮点数的向量;
vec4 : 包含四个浮点数的向量;
ivec2 :包含两个整形数的向量;
bvec4 : 包含四个布尔型的向量;
特殊的一个点:当把向量看作颜色的时候,可以使用r g b a 四个分量,代表红 绿 蓝 透明度,如:
aColor.r = 0.6 ; //给向量aColor指定红色分量
aColor.a = 0.6 ; //给向量aColor指定透明度分量
当把向量看作坐标位置时可以使用x y z w四个分量,用法如颜色.
当把向量看作纹理坐标时,可以使用s t p q四个分量,用法如颜色.
此处,除了使用 . 作为加分量名外,还可以使用数组的方式实现,如:
aColor[0] = 0.6; //
给向量aColor指定红色分量
需要注意的是,一次只能使用一组分量,比如使用r g b a 的时候,不能混合 x y z w.
3.矩阵:矩阵,平凡用于3D中的旋转,缩放,平移等,因此,矩阵支持就显得很必要了.
mat2 : 2 X 2 的浮点数矩阵;
mat3 : 3 X 3 的浮点数矩阵;
mat4 : 4 X 4 的浮点数矩阵;
在着色语言中,矩阵是按照顺序组织的,也就是说可以看作是几个列向量组成.比如,mat3就是由3个vec3组成的.
在取值的时候,比如matrix是一个mat3的矩阵,那么matrix[1]就渠道的是这个矩阵的第二列,为一个vec3向量.matrix[1][1]取到的是第二行第二列的数,是一个float型.
4.采样器:不同与C语言的基本数据类型,采样器专门用来进行纹理采样.一个采样器代表一副或一套纹理贴图.
sampler2D : 用于访问2维纹理;
sampler3D : 用于访问3维纹理;
samplerCube : 用于访问立方贴图纹理;
5.结构体:自定义结构体,如C语言,关键词使用struct,例如:
struct info {
vec3 color;
vec3 position;
vec2 textureCoor;
}
6.数组:
vec3 position[20] ; //申明一个包含20个vec3的数组
vec3 position[] ; //申明一个大小不固定的数组
postion[3] = vec3(3.0) ; //position的大小需要是4
7.空类型:空类型使用void,例如:
void main() { }
相关文章推荐
- 3D开发学习-着色语言 Shading Language基础(二) 特殊内建变量
- 3D开发学习-着色语言 Shading Language基础(二) 使用
- 【J2me3D系列学习文章之一】J2me3D开发技术和基础知识
- quick-cocos2d-x从零开始游戏开发笔记(二):Lua语言基础学习
- 电脑小白学习软件开发-C#语言基础之循环重点讲解,习题
- 对于初学者学习Java语言的建议-Java基础-Java-编程开发
- [ IOS-Cocos2d-x 游戏开发] - Lua 开发之一(Lua-基础语言学习)
- 3D数学基础 图形与游戏开发的学习 (六)[多坐标系]
- 嵌入式开发之C语言基础第三天&第四天学习笔记
- c语言学习之基础知识点介绍(九):预处理指令和多文件开发
- Java基础知识学习之路-02-第一章-Java语言概述与开发环境
- 《Directx 9.0 3D 游戏开发编程基础》学习总结2--Init例程编译错误
- 3D数学基础及图形与游戏开发的学习 (一)
- IOS App入门开发进阶 第一课 OC语言基础学习
- 【J2me3D系列学习文章之一】J2me3D开发技术和基础知识
- Direct 3D和XNA游戏开发基础(C#语言版)(奋斗的小鸟)_PDF 电子书
- 黑马程序员——零基础学习iOS开发——03 c语言基础语法:关键字、标示符、注释、数据结构、变量、变量内存分析、scanf函数
- ios开发学习笔记001-C语言基础知识
- 3D数学基础 图形与游戏开发的学习 第三章 多坐标系
- java语言学习之路之基础常识之java语言特点、开发工具、配置环境变量以及编译工具。