关于动态贴图始终跟随相机角度的实现

针对上一篇博文抛出的问题,下面来说说如何解决

我们知道三维场景是可以随意旋转角度的,所以我们的动态贴图一定不能将角度写死,或者说我们需要将动态贴图跟随场景的旋转而旋转,这样就能达到动态贴图的正面始终面向我们的效果,这样就不会出现当场景旋转至某一角度时看不见动态贴图的现象了。
但是想想这样并不好实现,那该如何是好呢?
试想,我们知道相机在三维场景中就相当于一双眼睛一样,它在哪个位置我们就可以看到场景中哪个位置的物体。这么说,我们就可以通过相机来实现我们的功能了,只需将动态贴图始终跟随相机的角度就可以达到我们想要的效果了,接下来看看如何来实现。

这里只讲如何解决问题,相关配置还是参考上一篇文章

点击这里去查看动态贴图的实现方式:https://blog.csdn.net/bigpatten/article/details/123180658

// 实现纹理动画的函数
function TextureAnimator(texture, tilesHoriz, tilesVert, numTiles, tileDispDuration) {
 let tilesHorizontal = tilesHoriz
  let tilesVertical = tilesVert
  let numberOfTiles = numTiles
  texture.wrapS = texture.wrapT = THREE.RepeatWrapping
  texture.repeat.set(1 / tilesHorizontal, 1 / tilesVertical)
  let tileDisplayDuration = tileDispDuration
  let currentDisplayTime = 0
  let currentTile = 0
  this.update = function(milliSec) {
    currentDisplayTime += milliSec
    // 关键代码 设置动态贴图跟随相机转动
    if (that.camera) {
        annie.lookAt(that.camera.position)
        runner.lookAt(that.camera.position)
    }
    while (currentDisplayTime > tileDisplayDuration) {
      currentDisplayTime -= tileDisplayDuration
      currentTile++
      if (currentTile == numberOfTiles) currentTile = 0
      let currentColumn = currentTile % tilesHorizontal
      texture.offset.x = currentColumn / tilesHorizontal
      let currentRow = Math.floor(currentTile / tilesHorizontal)
      texture.offset.y = currentRow / tilesVertical
    }
  }
}

注意上方关键代码处即是实现我们解决问题的代码,我们只需要将贴图设置为始终看向相机的方向就即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值