GLSL中的各種變數總結

2021-09-09 00:22:25 字數 4874 閱讀 9671

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;

13、shader 變數的qualifier:

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

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;

14、shader變數的精度:

highp, mediump, lowp

15、shader內建變數:

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;

16、shader內建常量:

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;

17、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): 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): 如 xsmoothstep(edge0, edge1, x): threshod  smooth transition時使用。 edge0=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): 

GLSL語言內建的變數詳解

glsl語言內建的變數,包括內建的頂點屬性 attribute 一致變數 uniform 易變變數 varying 以及常量 const 一方面加深印象,另一方面今天的文章可以為以後的程式設計做查詢之用。頂點屬性 指頂點的資訊,opengl據此繪製各個圖元,對於傳統的頂點屬性包括座標 紋理座標 顏色...

關於Python類中的各種變數

一.類變數 在類中方法外建立的變數,整個類有效,各例項共享。類名.變數名 二.例項變數 在方法中建立的變數,僅該方法內有效,各例項獨有 1.例項公有變數 self.變數名,例項直接訪問 2.例項私有變數 self.變數名,例項間接訪問,格式為 例項.類名 變數名 私有變數名前面的是雙下滑線,類名前面...

shell指令碼中的各種變數記錄

在linux下程式設計,遇到了指令碼中的變數問題,很多變數發現需要有乙個記錄,方便之後的檢視。0 shell本身的檔名,比如在 home目錄下的test.sh,那麼echo 0會得到的是 home test.sh,輸出值為檔案絕對路徑。顯示所有引數的列表。如 用 括起來的情況 以 1 2 n 的形式...