水波效果
过度写法:
u_mode = math.max(math.min(u_mode + distortionMode * transitionSpeed, 1), 0)
handletouch:
//点击切换模式
distortionMode = distortionMode * -1
水波效果:
//顶点浮动偏移量
offset = 2.0 * sin(10.0 * (PI * .5 * uv.y) + time);
position.z += ((1.0 - u_mode) * offset) + 1.2 + abs(u_mode) * 1.5;
position.x += abs(u_mode) * (.25 * offset);
缩放旋转效果
//片段着色器中对采样点坐标进行变换
uv -= 0.5;
uv /= 1.5;
uv += 0.5;
//放大了1.5倍
//片段着色器中对采样点坐标进行变换
mat2 rotate2d(float _angle){
return mat2(cos(_angle),-sin(_angle),
sin(_angle),cos(_angle));
}
//随时间旋转
uv = rotate2d(iTime) * uv;
//漩涡
float dist = length(uv - pos);
uv = rotate2d(dist + time) * uv;
旋转矩阵过度
//将物体从当前方向以0.1的速率转向目标方向
local fromOrient = self.rootTransform:getWorldOrientation()
local up = Amaz.Vector3f(0,1,0)
local forward = Amaz.Vector3f(destCoord.x - self.birdCoord.x, 0.0, destCoord.z - self.birdCoord.z)
local newZ = forward / Amaz.Vector3f.magnitude(forward)
local right = Amaz.Vector3f.cross(up, forward):normalize()
up = Amaz.Vector3f.cross(newZ,right)
local toOrient = Amaz.Quaternionf.lookRotationToQuaternion(newZ, up)
local ratio = 0.1
local interOrient = Amaz.Quaternionf.slerp(fromOrient, toOrient, ratio)
self.rootTransform:setWorldOrientation(interOrient)
人像遮挡
遮挡物体:遮挡面片renderorder最小,且在场景中放在被遮挡物体前面。开启深度写入,只写入深度不写入颜色
float matting = texture2D(u_MattingTexture, sampling_uv).r;
//背景地方抛弃
if(matting <= 0.5)
discard;
透明物体遮挡效果
被遮挡物体双通道
pass0:深度小于遮挡物体渲染,未被遮挡物体正常渲染
pass1:深度大于遮挡物体渲染,遮挡部分透明显示
开启混合模式,绘制透明部分