GLSL的基本语法

数据类型及其使用

基本数据类型

float,bool,int,uint

与C语言类似,定义一个变量的同时可以进行初始化

GLSL是强类型语言:必须进行显式的强势类型转换,不存在隐式的类型转换。

int b=2.0;//错误,无自动类型转换

int b=int(2.0);  //正确

向量类型(vec)

vec{2,3,4}:a vector of 2,3,or 4floats

bvec{2,3,4}:bool vector

ivec{2,3,4}:vector of integers

用例:

vec2 a=vec2(1.0,2.0);

vec2 b=vec2(3.0,4.0);

vec4 c=vec4(a,b);

vec4 color;

vec3 RGB=vec3(color);

vec4 a=vec4(1.0,2.0,3.0,4.0);

float posY=a[1];  //下标方式

float posX=a.x;//名称方式(选择子方式)

选择因子(selector)

  • x,y,z,w
  • r,g,b,a
  • s,t,p,q

向量乘法:

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

vec3 b=3.0*a;

向量的点积和叉积:用内建函数dot和cross

float NdotL=dot(normal,lightDir);

vec3 dir=cross(normal,lightDir);
矩阵类型(mat)

矩阵只有浮点型的

矩阵是列优先顺序

 mat2:2*2矩阵   mat3:3*3矩阵

mat4: 4*4矩阵   mat2x3,mat2x4 

mat3x2, mat3x4   mat4x2, mat4x3

mat4 m=mat4(1.0);//初始化了一个对角线矩阵

vec2 a=vec2(1.0,2.0);

vec2 b = vec2(3.0, 4.0); mat2 n = mat2(a, b); // 列优先排列

mat2 k = mat2(1.0, 2.0, 3.0, 4.0); // 列优先排列

数组

在GLSL中,可以像C一样声明和访问数组

只支持一维数组

下标不能为负

float a[10];

float coeff[3]=float[3](1.0,2.1,3.5);

GLSL数组提供了一个隐式的方式length()

for(int i=0;i<coeff.length();i++)

{

coeff[i]*=2.0;

}
struct dirlight
{
vec3 direction;
vec3 color;
}light;

struct dirlight
{
vec3 direction;
vec3 color;
}; 

dirlight light=dirlight(vec3(1.0,1.0,0.0),vec3(0.8,0.8,0.4));

 Sampler类型

sampler1D – for 1D textures

sampler2D – for 2D textures

sampler3D – for 3D textures

samplerCube – for cube map textures

sampler1DShadow – for shadow maps

sampler2DShadow – for shadow maps

uniform sampler2D brickTex;

vec4 texel=texture2D(brickTex,gl_TexCoord[0].st);

变量前的限定符

const:声明一个只读变量。

uniform:不随图元变化的全局变量;RO

in:VS中为输入的顶点属性;FS中为片段属性;RO

out:VS中输出的顶点属性;RW

centorid,smooth,flat,nonperspective:限定插值方式

内建函数

Trigonometry/angleradians,degrees,sin,cos,tan,asin,acos,atan
Exponentialpow,exp2,log2,sqrt,inversesqrt
Geometric and matrixlength,distance,dot,across,normalize,ftransform,faceforward,reflect,matrixCompMult
Miscabs,sgn,floor,ceil,fract,mod,min,max,clamp,mix,step,smoothstep

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Estelle_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值