threejs物体上下浮动


效果图

在这里插入图片描述


添加物体

以精灵材质为例
如果场景中的物体较多不好管理,可添加分组(Group),然后将物体添加进分组中

var subent8s = [
	{
		"img":"./static/models/img/k.png",
		"name":"1s",
		"x":0,
		"y":10,
		"z":10
	},
	{
		"img":"./static/models/img/k.png",
		"name":"2s",
		"x":10,
		"y":10,
		"z":0
	},
	{
		"img":"./static/models/img/k.png",
		"name":"3s",
		"x":10,
		"y":10,
		"z":0
	}
]
function subwaye() {
  subegroup = new THREE.Group()
  subegroup.name = '浮标组'
  scene.add(subegroup)
  for (let i = 0; i < subent8s.length; i++) {
    const spriteMap = new THREE.TextureLoader().load(subent8s[i].img)
    const spriteMaterial = new THREE.SpriteMaterial({
      map: spriteMap,
      transparent: true,
      alphaTest: 0.1,
      sizeAttenuation: false
    })
    subent8 = new THREE.Sprite(spriteMaterial)
    subent8.name = subent8s[i].name
    subent8.scale.set(0.11825, 0.056, 1)
    subent8.position.set(subent8s[i].x, subent8s[i].y, subent8s[i].z)
    subegroup.add( subent8 )
  }
}

渲染

利用三角函数的 余弦cos 求得运动轨迹
【这部分写起来比较麻烦,实则就是通过余弦 cos 求得下一步要运动到的目标位置,即下一步的坐标,这个是比较简单的运动轨迹,只计算了一个Y轴,写起来也没那么复杂,如果想实现更多的运动效果,可自行算出公式嵌套即可】

function render() {
  update()
  requestAnimationFrame(render)
  renderer.render(scene, camera)
  // 浮标上下浮动 ------------遍历到这个浮标组的子模型,给每一个子模型添加运动,或者下边  ↓
  subegroup.traverse((children) => {
    const time = Date.now() * 0.005
    children.position.y = Math.cos( time ) * 0.75 + 2.25
  })
  // 浮标上下浮动-------------通过控制浮标组【subegroup】来间接控制里边几个浮标
  // const time = Date.now() * 0.005
  // subegroup.position.y = Math.cos( time ) * 0.75 + 2.25
}

应用

广告牌等标识性物体

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值