GPU程式設計之GLSL(四)——片段著色器
阿新 • • 發佈:2019-02-14
本文列出三種片段著色器:
清除片段著色器
void main(void)
{
gl_FragColor=vec4(0.0,0.0,0.0,0.0);
}
流經片段著色器
uniform sampler2D texture
void main(){
vec4 color=texture2D(texture,gl_TexCoord[0].st);
gl_FragColor=color;
}
這個片段著色器相當於具有紋理對映工能的流經著色器,因為如果不使用該著色器,OpenGL也會以相同的效果對映紋理
卷積著色器convolution.flag
#extenson GL_ARB_texture_rectangle : enable uniform sampler2DRect texture; uniform float fRadius; float nWidth=3.0; float nHeight=3.0; void main(void) { vec2 pos=gl_TexCoord[0].st; //獲取當前紋理元座標值 vec4 fSum=vec4(0.0,0.0,0.0,0.0); //鄰近元素取值之和 vec4 fTotal=vec4(0.0,0.0,0.0,0.0); //鄰近元素個數 vec4 vec4result=vec4(0.0,0.0,0.0,0.0); //覆蓋當前紋理元的輸出座標 //鄰近元素求和。座標值加上0.5,以防計算誤差 for(float ii=pos.x-fRadius;ii<pos.x+fRadius+0.5;ii+=1.0) { for(float ii=pos.x-fRadius;ii<pos.x+fRadius+0.5;ii+=1.0) { if(ii>=0.0&&jj>=0.0&&ii<nWidth&&jj<nHeight) { fSum+=texture2DRect(txture,vec2(ii,jj)) ; fTotal+=vec4(1.0,1.0,1.0,1.0); } } //求得鄰近元素的均值 vec4Result=fSum/fTotal; //將結果寫入幀快取對應畫素 gl_FragColor=vec4Result; } }
參考文獻:
仇德元.《GPGPU程式設計技術——從GLSL、CDPU到OpenGL》[M].河北省三河市:機械工業出版社,2012年:323.