GLSL幾個要點
限定符
在之前的博客中也提到了鹦牛,GLSL中的限定符號主要有:
attritude:一般用于各個頂點各不相同的量搞糕。如頂點顏色、坐標等曼追。? 輸入
uniform:一般用于對于3D物體中所有頂點都相同的量窍仰。比如光源位置,統(tǒng)一變換矩陣等礼殊。
varying:表示易變量驹吮,一般用于頂點著色器傳遞到片元著色器的量。輸出晶伦,vetexshader和fragshader數(shù)據(jù)的傳遞
const:常量碟狞。
privatestaticfinalStringVERTEX_SHADER="attribute vec4 position;\n"+
"attribute vec4 inputTextureCoordinate;\n"+
"attribute vec4 inputTextureCoordinate2;\n"+
"\n"+
"varying vec2 textureCoordinate;\n"+
"varying vec2 textureCoordinate2;\n"+
"\n"+
"void main()\n"+
"{\n"+
" gl_Position = position;\n"+
" textureCoordinate = inputTextureCoordinate.xy;\n"+
" textureCoordinate2 = inputTextureCoordinate2.xy;\n"+
"}";
publicstaticfinalStringALPHA_BLEND_FRAGMENT_SHADER="varying highp vec2 textureCoordinate;\n"+
" varying highp vec2 textureCoordinate2;\n"+
"\n"+
" uniform sampler2D inputImageTexture;\n"+
" uniform sampler2D inputImageTexture2;\n"+
"\n"+
" uniform lowp float mixturePercent;\n"+
"\n"+
" void main()\n"+
" {\n"+
" lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);\n"+
" lowp vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate2);\n"+
"\n"+
" gl_FragColor = vec4(mix(textureColor.rgb, textureColor2.rgb, textureColor2.a * mixturePercent), textureColor.a);\n"+
" }";
以上是一個典型的頂點著色器和片段著色器
inputTextureCoordinatetextureCoordinate2 頂點傳入?
position? 綁定頂點坐標
inputImageTexture
inputImageTexture2? 創(chuàng)建并綁定紋理
inputTextureCoordinate?
inputTextureCoordinate2綁定紋理坐標
textureCoordinate2作為片段著色器的輸出? 最終生成gl_FragColor
對于抖音特效,其實就改變gl_Position 和?gl_FragColor