Skip to content

v-always-look-at 👀

使用 TresJS 提供的新指令 v-always-look-at,您可以轻松地使 Object3D 始终朝向特定位置,可以传入 Vector3 对象或数组。

推荐使用

vue
<script setup lang="ts">
import { TresCanvas } from '@tresjs/core'
import { Box, vAlwaysLookAt } from '@tresjs/cientos'
</script>
<template>
    <TresCanvas >
      <TresPerspectiveCamera :position="[0, 2, 5]" />
      <Box
        v-always-look-at="new Vector3(0, 0, 0)"
      />
  </TresCanvas>
</template>

无论 Box 移动到何处,它都将始终朝向位置 [0,0,0]。

为什么不使用内置的 look-at 方法呢?

您可能会问,我可以直接在组件中使用 :look-at 方法,为什么我需要这个呢?

答案是使用 :look-at 方法时,您只会在实例挂载时指示其一次性朝向该位置,然后如果对象更改,它将不会更新。

您还可以查看其他实例!

另一个优势是您可以查看一个在移动中的实例,例如使用相机,如下所示:

vue
<script setup lang="ts">
import { shallowRef } from 'vue'
import { TresCanvas, useRenderLoop } from '@tresjs/core'
import { Box, vAlwaysLookAt } from '@tresjs/cientos'

const sphereRef = shallowRef()

const { onLoop } = useRenderLoop()

// 在这里,我们更新了球体的位置,相机将始终跟随该对象
onLoop(({ elapsed }) => {
  if (sphereRef.value) {
    sphereRef.value.value.position.y = Math.sin(elapsed) * 1.5
  }
})
</script>
<template>
    <TresCanvas >
      <TresPerspectiveCamera :position="[0, 2, 5]"
        v-always-look-at="sphereRef"
      />
      <Sphere
        ref="sphereRef"
        :scale="0.5"
      />
  </TresCanvas>
</template>