Away3D之--------------------------水面效果

一. 水面效果:


实现水面效果的原理很简单,只需将水平面绘制作为一个平面,用环境贴图模拟水对环境的反射,同时为水平面增加法线效果模拟水面波光粼粼的效果即可。


具体代码如下:


使用SimpleWaterNormalMethod方法(该方法实际是使用两张法线贴图叠加作为最终法线进而计算发射)绘制该平面的反射效果即可。





二. 利用PixelBender实现水面互动:


PixelBender一般用于实现滤镜或者一些其他的渲染效果,在此可以利用pixelbender计算平面顶点位置信息实现水面的波动效果。


  由于pixelBender的输入参数是三维数据,我们将平面换分为w行l列以该点高度h作为第三维数据,高度默认为0.通过当前帧上一帧等数据计算高度h.   PixelBender代码如下:


void
    evaluatePixel()
    {
float2 coord = outCoord();
float3 point = sampleNearest(currentBuffer, coord);


if(coord.x > 1.0 && coord.y > 1.0 && coord.x < dims.x && coord.y < dims.y)
{
            float3 prev = sampleNearest(previousBuffer, coord);
            float3 right = sampleNearest(currentBuffer, coord + float2(1.0, 0.0));
            float3 left = sampleNearest(currentBuffer, coord + float2(-1.0, 0.0));
            float3 top = sampleNearest(currentBuffer, coord + float2(0.0, -1.0));
            float3 bottom = sampleNearest(currentBuffer, coord + float2(0.0, 1.0));


            dst.z = k1*point.z + k2*prev.z + k3*(right.z + left.z + top.z + bottom.z);
        }
        else
        {
            dst.z = 0.0;
        }


dst.x = point.x;
dst.y = point.y;
    }


通过没帧对高度的计算实现波浪效果。




具体代码: git@code.csdn.net:u012966744/flashgame.git


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值