OpenGL筆記(三) GLSL語法與內建函數

GLSL,OpenGL Shading Language,GLSL中沒有指針,而且沒有任何類型的字符串或字符。函數

(1)GLSL的修飾符與基本數據類型spa

const:用於聲明非可寫的編譯時常量變量;指針

attribute:用於常常更改的信息,只能在頂點着色器中使用;code

uniform:用於外部程序傳遞給shader的變量,shader只能用,不能改;orm

varying:用於從頂點着色器向片元着色器傳遞數據的變量。blog

而後是基本數據類型,int、float、bool。注意float能夠指定精度:字符串

highp:32bit,通常用於頂點座標(vertex coordinate);it

medium:16bit,通常用於紋理座標(texture coordinate);io

lowp:8bit,通常用於顏色表示。編譯

接下來是向量類型。

vec4:4份量浮點向量;

ivec4:4份量整數向量;

uvec4:4份量無符號整數向量;

bvec4:4份量布爾向量;

四維向量:

attribute vec4 position;

矩陣類型,全部的矩陣類型都只支持浮點數,不支持整數或者布爾矩陣:

uniform lowp mat4 colorMatrix;

紋理類型,通常僅在Fragment Shader中使用這個類型,二維紋理的聲明方式以下:

uniform sampler2D texSampler;

最後是varing,用於在Vertex Shader和Fragment Shader中傳遞參數。首先在VS中聲明這個類型的變量表明紋理的座標點,而且對這個變量進行賦值,代碼以下:

attribute vec2 texcoord; varying vec2 v_texcoord; void main(void) { v_texcoord = texcoord; }

緊接着在FS中也聲明同名的變量,而後使用texture2D方法取出二維紋理中該紋理座標點上的像素值,代碼以下:

varying vec2 v_texcoord;

vec4 texel = texture2D(texSampler, v_texcoord);

取出了該座標點上的像素值以後,就能夠進行像素變化操做了,好比說提升對比度,最終將改變的像素值賦給gl_FragColor。

(2)GLSL的內置函數與內置變量

最多見的內置變量是兩個Shader的輸出變量,首先是VS的:

vec4 gl_position;

上述代碼用來設置頂點轉換到屏幕座標的位置,VS必定要去更新這個數值。

float gl_pointSize;

在粒子效果的場景下,須要爲粒子設置大小,改變該內置變量的值就是爲了設置每個粒子矩形的大小。

其次是FS的內置變量:

vec4 gl_FragColor;

上述代碼用於指定當前紋理座標所表明的像素點的最終顏色值。

(3)其餘

sampler2D類型,其實就是紋理數據。另外還有一個方法texture2D,第一個參數是紋理數據,第二個參數是紋理座標,這個方法就是在紋理數據中取出當前片斷對應在紋理數據中位置上的數據顏色。

相關文章
相關標籤/搜索