WEBGL編程指南之attribute,uniform,varying

1.attibute變量的獲取與傳值

attribute為存儲限定符,表示接下來的變量是一個attribute變量,數據將從著色器外部傳遞給變量,必須是全局的,只有頂點著色器可以使用,傳輸與頂點相關的數據。attribute的類型只能為float,vec2,vec3,vec4,mat2,mat3,mat4

var vshader=
'attribute vec4 a_Position;\n'+
'void main(){\n'+
'gl_position=a_Position;\n'+
'gl_Pointsize=10.0;\n'+
'}\n';
//第一個參數為程序對象
var a_position=gl.getAttribLocation(gl.program,'a_Position');
//本來是vec4,第四個自動補齊
gl.vertexAttrib3f(a_position,0.0,0.0,0.0);

其他函數
gl.vertex1f(location,v0);
gl.vertex2f(location,v0,.v1);
gl.vertex3f(location,v0,v1,v2);
gl.vertex4f(location,v0,v1,v2,v3);
等等

2.uniform變量的獲取與傳值

uniform變量可以在頂點著色器與片元著色器中,且必須是全局的。與頂點無關,對所有頂點相同如變換矩陣。如果在頂點與片源著色器中使用了同名的uniform變量,那么就會被兩種著色器共享。

var FRAGMENT_SHADER=
'precision mediump float;\n'+
'uniform vec4 u_FragColor;\n'+
'void main(){\n'+
'gl_FragColor=u_FragColor;\n'+
'}'
var u_FragColor=gl.getUniformLocation(gl.program,'u_FragColor');
gl.uniform4f(u_FragColor,0.0,1.0,1.0,1.0);

3.varying變量

任務為從頂點著色器向片源著色器傳輸數據,必須在兩種著色器中聲明同名的,同類型的varying變量。頂點著色器中賦值給varying變量的值經過內插傳給了片元著色器的varying變量。

**這三中全局變量有最大個數與設備有關,一般最小如下:
attribute變量 8
uniform變量(頂點著色器中) 128
uniform變量(片元著色器中) 16
varyring變量 8
**

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容