OpenGL ES2 0裡的3種變數

2021-06-21 00:35:23 字數 1221 閱讀 3645

看過一遍opengl es 2.0 的書後,對shader 裡面的三種變數還是有時搞不清楚區別。特此留文。

opengl es2.0的shader裡面宣告的變數一般有三種型別uniform, attribute, varying。

如果uniform變數在vertex和fragment兩者之間宣告方式完全一樣,則它可以在vertex和fragment共享使用。(相當於乙個被vertex和fragment shader共享的全域性變數)

uniform變數一般用來表示:變換矩陣,材質,光照引數和顏色等資訊。

以下是例子:

uniform mat4 viewprojmatrix; //投影+檢視矩陣

uniform mat4 viewmatrix;        //檢視矩陣

uniform vec3 lightposition;     //光源位置

attribute變數是只能在vertex shader中使用的變數。(它不能在fragment shader中宣告attribute變數,也不能被fragment shader中使用)

一般用attribute變數來表示一些頂點的資料,如:頂點座標,法線,紋理座標,頂點顏色等。

以下是例子:

uniform mat4 u_matviewprojection;

attribute vec4 a_position;

attribute vec2 a_texcoord0;

varying vec2 v_texcoord;

void main(void)

以下是例子:

// vertex shader

uniform mat4 u_matviewprojection;

attribute vec4 a_position;

attribute vec2 a_texcoord0;

varying vec2 v_texcoord; // varying in vertex shader

void main(void)

// fragment shader

precision mediump float;

varying vec2 v_texcoord; // varying in fragment shader

uniform sampler2d s_basemap;

uniform sampler2d s_lightmap;

void main()

OpenGL ES2 0的一些總結

shader language 訪問vector某個分量,必須用常量,不能用乙個表示式。matrix 和vector都是用列來描述。訪問array某個下標,只能用常數。不能再定義的時候初始化,不能定義為常量陣列,必須乙個個陣列元素的初始化。函式不能迭代。有些gpu沒有stack和flow的contr...

OpenGL ES 2 0 頂點著色器的妙用

基本原理 繪製一幀畫面時由頂點著色器根據一定的規則變換各個頂點的位置,即可得到旗幟迎風飄揚的效果。為了使旗幟的飄動過程比較平滑,採用基於正弦曲線的頂點位置變換規則。計算方法 傳入頂點著色器的原始頂點的z座標都是相同的 本案例為0 經過頂點著色器變換後頂點的z座標是根據正弦曲線分布的 首先計算出當前處...

當你偷偷「變老」的20種表現

1 不怎麼愛發簡訊了,有什麼事還是通個話比較好,並且喜歡長話短說.2 不喜歡花太多時間沉浸在感情的思考中,覺得那種煽情的小情節已經不屬於你了。3 有時候挺喜歡獨處的,但是你不在顧影自憐,你喜歡上上網,聽聽歌,並且自得其樂,偶爾玩玩遊戲。4 以前只愛看娛樂節目,並且準時等待,現在你愛看法制頻道,科學探...