uniform變數在vertex和fragment兩者之間宣告方式完全一樣,則它可以在vertex和fragment共享使用,(相當于一個被vertex和fragment shader共享的全域變數) uniform變數一般用來表示:變換矩陣,材質,光照引數和顏色等資訊, 以下是例子: uniform mat4 viewProjMatrix; //投影+視圖矩陣 uniform mat4 viewMatrix; //視圖矩陣 uniform vec3 lightPosition; //光源位置 2.attribute變數 attribute變數是只能在vertex shader中使用的變數,(它不能在fragment shader中宣告attribute變數,也不能被fragment shader中使用) 一般用attribute變數來表示一些頂點的資料,如:頂點坐標,法線,紋理坐標,頂點顏色等, 在application中,一般用函式glBindAttribLocation()來系結每個attribute變數的位置,然后用函式glVertexAttribPointer()為每個attribute變數賦值, 以下是例子: uniform mat4 u_matViewProjection; attribute vec4 a_position; attribute vec2 a_texCoord0; varying vec2 v_texCoord; void main(void) { gl_Position = u_matViewProjection * a_position; v_texCoord = a_texCoord0; } 3.varying變數 varying變數是vertex和fragment shader之間做資料傳遞用的,一般vertex shader修改varying變數的值,然后fragment shader使用該varying變數的值,因此varying變數在vertex和fragment shader二者之間的宣告必須是一致的,application不能使用此變數, 以下是例子: // 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) { gl_Position = u_matViewProjection * a_position; v_texCoord = a_texCoord0; } // Fragment shader precision mediump float; varying vec2 v_texCoord; // Varying in fragment shader uniform sampler2D s_baseMap; uniform sampler2D s_lightMap; void main() { vec4 baseColor; vec4 lightColor; baseColor = texture2D(s_baseMap, v_texCoord); lightColor = texture2D(s_lightMap, v_texCoord); gl_FragColor = baseColor * (lightColor + 0.25); } ----------------------------------------------------摘自其他網站
1.uniform變數
uniform變數是application傳遞給shader的變數,在application外部賦值,在shader內部,不能被修改,如果uniform變數在vertex和fragment兩者之間宣告方式一樣,則可以在vertex和fragment共享使用,
uniform一般用來表示:材質,引數,變換矩陣和公用顏色等資訊,
例子:
uniform vec3 lightPosition;//光源位置
uniform mat4 viewMatrix;//視圖矩陣
2.attribute變數
attribute變數只能在vertex shader中使用的變數,不能在fragment shader中宣告attribute變數,也不能在fragment shader中使用,
一般用于表示一些頂點資料,如:發現,紋理坐標,頂點坐標,頂點顏色等等
3.varying變數
varying變數用于vertex和fragment shader之間做資料傳遞使用,一般vertex shader修改varying,fragment shader使用該varying值,因此varying在vertex和fragment宣告需要一致
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285713.html
標籤:其他
上一篇:【工程應用四】 基于形狀的多目標多角度的高速模板匹配演算法進一步研究。
下一篇:滑鼠繪圖的原理
