three.js模拟波动水面Water.js

有些数字孪生场景周围的环境,需要模拟一个波动水面效果,自己写shader相对比较麻烦,采用threejs的扩展库更简单方便。

3D在线体验效果 (货轮物流)

视频讲解思路

在这里插入图片描述

引入扩展库Water.js

import { Water } from 'three/examples/jsm/objects/Water.js';

创建Water水面模型对象

创建一个矩形平面表示水面,水面的法线贴图地址在官网案例examples里面examples\textures\waternormals.jpg,法线贴图功能是模拟水面波浪的凹凸效果。

const waterGeometry = new THREE.PlaneGeometry(10000, 10000);
const water = new Water(
    waterGeometry,
    {
        textureWidth: 512,
        textureHeight: 512,
        waterNormals: new THREE.TextureLoader().load('./waternormals.jpg', function (texture) {
            texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
        }),
        sunDirection: new THREE.Vector3(),
        sunColor: 0xffffff,
        waterColor: 0x001e0f,
        distortionScale: 3.7, 
    }
);
water.rotation.x = - Math.PI / 2;
scene.add(water)

水面波动动画

如果你想水面产生波动的动画效果,需要在动画循环中,改变uniform变量time

function render() {
    water.material.uniforms["time"].value += 1.0 / 60.0;
    requestAnimationFrame(render)
}
render()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Threejs可视化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值