Shader內建函式和變數

2021-10-01 05:35:13 字數 4878 閱讀 3605

radians(degree) : 角度變弧度;

degrees(radian) : 弧度變角度;

sin(angle), cos(angle), tan(angle)

asin(x): arc sine, 返回弧度 [-pi/2, pi/2];

acos(x): arc cosine,返回弧度 [0, pi];

atan(y, x): arc tangent, 返回弧度 [-pi, pi];

atan(y/x): arc tangent, 返回弧度 [-pi/2, pi/2];

pow(x, y): x的y次方;

exp(x): 指數, log(x):

exp2(x): 2的x次方, log2(x):

sqrt(x): x的根號; inversesqrt(x): x根號的倒數

abs(x): 絕對值

sign(x): 符號, 1, 0 或 -1

floor(x): 底部取整

ceil(x): 頂部取整

fract(x): 取小數部分

mod(x, y): 取模, x - y*floor(x/y)

min(x, y): 取最小值

max(x, y): 取最大值

clamp(x, min, max): min(max(x, min), max);

mix(x, y, a): x, y的線性混疊, x(1-a) + y*a;

step(edge, x): 如 x

smoothstep(edge0, edge1, x): threshod smooth transition時使用。 edge0<=edge0時為0.0, x>=edge1時為1.0

length(x): 向量長度

distance(p0, p1): 兩點距離, length(p0-p1);

dot(x, y): 點積,各分量分別相乘 後 相加

cross(x, y): 差積,x[1]*y[2]-y[1]*x[2], x[2]*y[0] - y[2]*x[0], x[0]*y[1] - y[0]*x[1]

normalize(x): 歸一化, length(x)=1;

faceforward(n, i, nref): 如 dot(nref, i)< 0則n, 否則 -n

reflect(i, n): i的反射方向, i -2*dot(n, i)*n, n必須先歸一化

refract(i, n, eta): 折射,k=1.0-eta*eta*(1.0 - dot(n, i) * dot(n, i)); 如k<0.0 則0.0,否則 eta*i - (eta*dot(n, i)+sqrt(k))*n

matrixcompmult(matx, maty): 矩陣相乘, 每個分量 自行相乘, 即 r[i][j] = x[i][j]*y[i][j];

矩陣線性相乘,直接用 *

lessthan(vecx, vecy): 向量 每個分量比較 x < y

lessthanequal(vecx, vecy): 向量 每個分量比較 x<=y

greaterthan(vecx, vecy): 向量 每個分量比較 x>y

greaterthanequal(vecx, vecy): 向量 每個分量比較 x>=y

equal(vecx, vecy): 向量 每個分量比較 x==y

notequal(vecx, vexy): 向量 每個分量比較 x!=y

any(bvecx): 只要有乙個分量是true, 則true

all(bvecx): 所有分量是true, 則true

not(bvecx): 所有分量取反

texture2d(sampler2d, coord): texture lookup

texture2dproj(sampler2d, coord):

texture2dproj(sampler2d, coord, bias):

texture2dlod(sampler2d, coord, lod):

texture2dprojlod(sampler2d, coord, lod):

texturecube(samplercube, coord):

texturecube(samplercube, coord, bias):

texturecubelod(samplercube, coord, lod):

const mediump int gl_maxvertexattribs = 8;

const mediump int gl_maxvertexuniformvectors = 128;

const mediump int gl_maxvaryin**ectors = 8;

const mediump int gl_maxvertextextureimageunits = 0;

const mediump int gl_maxcombinedtextureimageunits = 8;

const mediump int gl_maxtextureimageunits = 8;

const mediump int gl_maxfragmentunitformvectors = 16;

const mediump int gl_maxdrawbuffers = 1;

gl_position: 用於vertex shader, 寫頂點位置;被圖元收集、裁剪等固定操作功能所使用;

其內部宣告是:highp vec4 gl_position;

gl_pointsize: 用於vertex shader, 寫光柵化後的點大小,畫素個數;

其內部宣告是:mediump float gl_position;

gl_fragcolor: 用於fragment shader,寫fragment color;被後續的固定管線使用;

mediump vec4 gl_fragcolor;

gl_fragdata: 用於fragment shader,是個陣列,寫gl_fragdata[n] 為data n;被後續的固定管線使用;

mediump vec4 gl_fragdata[gl_maxdrawbuffers];

gl_fragcolor和gl_fragdata是互斥的,不會同時寫入;

gl_fragcoord: 用於fragment shader,唯讀, fragment相對於視窗的座標位置 x,y,z,1/w; 這個是固定管線圖元差值後產生的;z 是深度值; mediump vec4 gl_fragcoord;

gl_frontfacing: 用於判斷 fragment是否屬於 front-facing primitive;唯讀;

bool gl_frontfacing;

gl_pointcoord: 僅用於 point primitive; mediump vec2 gl_pointcoord;

highp, mediump, lowp
預設:無修飾符,普通變數讀寫, 與外界無連線;

const:常量 const vec3 zaxis = vec3(0.0, 0.0, 1.0);

attribute: 申明傳給vertex shader的變數;唯讀;不能為array或struct;attribute vec4 position;

uniform: 表明整個圖元處理中值相同;唯讀; uniform vec4 lightpos;

varying: 被差值;讀寫; varying vec3 normal;

in, out, inout;

1、uint createshader(enum type) : 建立空的shader object; 

type: vertex_shader,

2、void shadersource(uint shader, sizeicount, const **string, const int *length):載入shader原始碼進shader object;可能多個字串

3、void compileshader(uint shader):編譯shader object;

shader object有狀態 表示編譯結果

4、void deleteshader( uint shader ):刪除 shader object;

5、void shaderbinary( sizei count, const uint *shaders,

enum binaryformat, const void *binary, sizei length ): 載入預編譯過的shader 二進位制串;

6、uint createprogram( void ):建立空的program object, programe object組織多個shader object,成為executable;

7、void attachshader( uint program, uint shader ):關聯shader object和program object;

8、void detachshader( uint program, uint shader ):解除關聯;

9、void linkprogram( uint program ):program object準備執行,其關聯的shader object必須編譯正確且符合限制條件;

10、void useprogram( uint program ):執行program object;

11、void programparameteri( uint program, enum pname,

int value ): 設定program object的引數;

12、void deleteprogram( uint program ):刪除program object;

shader內建函式

一般預設都用弧度 radians degree 角度變弧度 degrees radian 弧度變角度 sin angle cos angle tan angle asin x arc sine,返回弧度 pi 2,pi 2 acos x arc cosine,返回弧度 0,pi atan y,x a...

awk內建變數和函式

幾乎內建變數每次用到都要查一下,乾脆統計下發上來供以後查詢 內建變數 argc 命令列引數個數 argv 命令列引數排列 environ 支援佇列中系統環境變數的使用 filename awk瀏覽的檔名 fnr 瀏覽檔案的記錄數 fs 設定輸入域分隔符,等價於命令列 f選項 nf 瀏覽記錄的域個數 ...

FreeMarker迴圈變數內建函式

這些內建函式只能用於list和items指令 的迴圈變數 也可以用於已經廢棄的foreach指令 下面是一些說明 loopvar?index在可以列表的值中進行迭代,返回從0開始的索引 note x is a loop variable list a b c as x 0 12當list指令不指定迴...