在kanzi中寫材質是我們在實現比較炫酷的效果的一種做法,基本在opengl中的大部分簡單效果都能在kanzi中實現,以下是一張圖片中,只顯示一部分圖片的效果,相當於在圖片中挖了一個洞
頂點着色器:
attribute vec3 kzPosition;
attribute vec2 kzTextureCoordinate0;
uniform highp mat4 kzProjectionCameraWorldMatrix;
varying mediump vec2 vTexCoord;
void main()
{
precision mediump float;
vTexCoord = kzTextureCoordinate0;
gl_Position = kzProjectionCameraWorldMatrix * vec4(kzPosition.xyz, 1.0);
}
片元着色器:
uniform sampler2D Texture;
varying mediump vec2 vTexCoord;
uniform lowp float BlendIntensity;
uniform lowp float Radius;
uniform lowp float RadiusWidth;
void main()
{
precision mediump float;
vec4 color = vec4(0.0);
vec4 outcolor = vec4(0.0);
vec4 colorTT = texture2D(Texture, vTexCoord);
vec2 pos = vTexCoord *2.0-1.0; //圓心
float dis = length(pos); //半徑
if(dis < Radius)
{
//小於Radius-0.1返回0,大於Radiu返回1,Radius-0.1到Radius取平滑算法差值
float offset = smoothstep(Radius-0.1,Radius,dis);
//offset=0取colorTT,offset=1取color
//colorTT*(1-offset) + color*offset
outcolor = mix(colorTT,color,offset);
}
else
{
outcolor = vec4(0.0);
}
gl_FragColor.rgba = outcolor.rgba * BlendIntensity;
}