Opengl入门之着色器

  • 着色器(Shader)是用来替代固定渲染管线(实现图像渲染)的可编辑程序。

着色器分为顶点着色Vertex Shader(程序中有多少顶点就调用多少次顶点着色器片元着色器Pixel Shader(程序中片元着色器通常比顶点着色器调用的次数多得多两种

(注:两种着色器在不同的实现中略有不同)。

其中Vertex Shader主要负责顶点的几何关系等的运算,Pixel Shader主要负责片元颜色等的计算。

小知识:当今主流的GPU中都配置了不只一套顶点着色器,片元着色器要更多的多


  • 着色语言基于C/C++的语法,但与C/C++并不完全相同。


着色语言中有许多内建的原生数据类型以及构建数据类型,如

1. 标量

 浮点型(float)、布尔型(bool)、整形(int)  


2.向量型

基本语法,向量名.分量名。

rgba指颜色,xyzw指坐标,stpq指纹理坐标

vec2 : 包含了2个浮点数的向量         vec3 : 包含了3个浮点数的向量        vec4 : 包含了4个浮点数的向量

ivec2 : 包含了2个整数的向量          ivec3 : 包含了3个整数的向量         ivec4 : 包含了4个整数的向量

bvec2 : 包含了2个布尔数的向量        bvec3 : 包含了3个布尔数的向量       bvec4 : 包含了4个布尔数的向量

                     

3.矩阵型(matrix) 

3D场景中的移位、旋转、缩放等变换都是由矩阵的运算来实现的(矩阵的访问可以作为数组来访问)

mat2 :2*2的浮点数矩阵              mat3 : 3*3的浮点数矩阵               mat4 : 4*4的浮点数矩阵  

   

4.采样器

专门用来进行纹理采样的相关操作,一般情况下,一个纹理采样器变量代表一幅或一套纹理贴图,采样器变量不能在着色器中

初始化,一般情况下,纹理采样器变量都用uniform限定符来修饰,从宿主语言(如JAVA)接收传递进着色器的值。

sampler2D :用于访问二维纹理         sampler3D :用于访问三维纹理      samplerCube :用于访问立方贴图纹理 


5.结构体、数组、空类型等。



着色器语言的限定符:

主要的有:attribute属性限定符、uniform一致变量限定符、varying易变变量限定符、const常量限定符


注:  

因着色器语言中的内建变量大部分都以gl_开头的原因,用户自定义变量命名不允许使用gl_开头。


-------------------------------------------------------------------------------------------------------------------
     着色器语言的变量运算注意点:

着色语言中属性变量、一致变量以及易变变量在声明的时候一定不能进行初始化。  

通过运算符“.”可以进行混合选择操作

    (例:vec4 color = vec4(0.3,0.7,0.5,0.6);  vec3 t1= color.aabg 或 vec3 t2;t2.grb =color.aab

在矩阵上使用加减乘除运算时满足线性代数定义。

着色语言的赋值没有自动类型转换。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值