Three dynamic_sea实例

基础环境搭建:

在这里插入图片描述

拷贝water.jpg图片至textures文件夹下
创建dynamic_sea:

  1. 创建dynamic_sea网格模型:
    const geometry = new THREE.PlaneGeometry(20000, 20000)
    planeGeometry.rotateX(-Math.PI / 2)
    const texture = new THREE.TextureLoader().load('textures/water.jpg')
    const material = new THREE.MeshBasicMaterial({
        map: texture
    })
    const dynamic_sea = new THREE.Mesh(geometry, material)
    //dynamic_sea.rotation.x = -Math.PI / 2
    scene.add(dynamic_sea)

在这里插入图片描述

  1. 设置纹理平铺方式,实现海面颜色差异:

.wrapS : number .wrapT : number
定义纹理贴图在水平/垂直方向上将如何包裹
默认值THREE.ClampToEdgeWrapping,即纹理边缘将被推到外部边缘的纹素,其它的两个选项分别是THREE.RepeatWrapping和THREE.MirroredRepeatWrapping。
请注意:纹理中图像的平铺,仅有当图像大小(以像素为单位)为2的幂(2、4、8、16、32、64、128、256、512、1024、2048、……)时才起作用,宽度、高度无需相等,但每个维度的长度必须都是2的幂。
.repeat : Vector2
纹理在每一个方向U和v的表面上重复了多少次,如果repeat在任何一个方向上都大于1,相应的Wrap参数也应该设置为THREE.RepeatWrapping或THREE.mirrredrepeatwrapped以实现所需的平铺效果。

    texture.wrapS = texture.wrapT = THREE.RepeatWrapping
    texture.repeat.set(5, 5)

在这里插入图片描述

设置个颜色:

在这里插入图片描述

  1. 设置海浪上下起伏效果:

.usage : Usage
为优化目的定义数据存储的预期使用模式,对应于WebGLRenderingContext.bufferData()的使用参数,默认是StaticDrawUsage。
相关Usage Constants链接
.needsUpdate : Boolean
该标志位指明当前 attribute 已经被修改过,且需要再次送入 GPU 处理。当开发者改变了该队列的值,则标志位需要设置为 true。

.initMeshes()
    const positions = planeGeometry.attributes.position
    positions.usage = THREE.DynamicDrawUsage
    for (let i = 0; i < positions.count; i++) {
        const y = 35 * Math.sin(i / 2)
        positions.setY(i, y)
    }
    ......
.render()
    const time = clock.getElapsedTime() * 10
    const positions = planeGeometry.attributes.position
    for (let i = 0; i < positions.count; i++) {
        const y = 35 * Math.sin(i / 5 + (time + i) / 7)
        positions.setY(i, y)
    }
    positions.needsUpdate = true
  1. 导入及使用第一人称控制器:

.update ( delta : Number ) : undefined
delta: Time delta value.更新控制器,常被用在动画循环中。

    import...
    ...
    controls = new FirstPersonControls(camera, renderer.domElement)
    controls.movementSpeed = 200
    controls.lookSpeed = 0.01   
    ...
    const delta = clock.getDelta()
    controls.update(delta)
    ...

在这里插入图片描述

  1. 加上背景色和雾化效果,设置网格模型长宽段数:
    planeGeometry = new THREE.PlaneGeometry(20000, 20000, 127, 127)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值