看了一下 金属战争这个demo.里面有好多的特殊效果啊。
甚至貌似还用到了ds。很牛叉。看了一天也没看完一个demo.只能说这个demo实在是太多东西了。
集中火力看了一下他的扭曲怎么实现的。
所有带有扭曲的物体有个标识。用的标识的物体会被渲染到一个 shimmer buffer 这个buffer和屏幕一样大。用来作为mask查询时候用。
每个像素的 r 被用来做x偏移。g用来做y偏移. b他用来作为一个系数。衰减亮度。 如果rg 的值和半黄一样。也就是 rg - 0.5 == 0
那么他认为不需要偏移。直接取原色。某则把rg变化到 -1 -1 之间做偏移。 然后在确认偏移后的颜色依然不是半黄。那么这个点的采样就变成了偏移后的点.做法这样。但是为啥就会有扭曲效果了。。还没研究清楚。。他这个是用到火。可能火本来就带有扭曲属性可能很正常。那要全是一个色的东西不是就绝对不会扭曲??
float2 vNewTexCoord = vTexCoord;
float4 vHeatBright = tex2D(g_samSrcAux, vTexCoord);
float2 vHeat = vHeatBright.rg;
if (any(vHeat - 0.5))
{
vHeat = vHeat * 2 - 1;
float2 vOffsetTexCoord = vTexCoord + vHeat.xy
* g_fPerturbationMultiplier;
if (any(tex2D(g_samSrcAux, vOffsetTexCoord).rg - 0.5))
{
vNewTexCoord = vOffsetTexCoord;
}
}
return tex2D(g_samSrcColor, vNewTexCoord) * (1
+ g_fShimmerBrightness * vHeatBright.b);