v-rotate deprecated since v4
WARNING
This directive has been removed on the v4
due incompatibility with the new renderer loop.
Problem
When you want to simply add rotation to your mesh, you have to use the template reference, useRenderLoop and then assign the axis and the speed, but before check if you mesh is already available:
vue
<script setup lang="ts">
import { useRenderLoop } from '@tresjs/core'
import { shallowRef, watch } from 'vue'
const boxRef = shallowRef()
const { onLoop } = useRenderLoop()
onLoop(({ elapsed }) => {
if (boxRef.value) {
boxRef.value.rotation.x = elapsed
}
})
</script>
<template>
<TresCanvas>
<TresPerspectiveCamera :position="[0, 2, 5]" />
<TresMesh
ref="boxRef"
:scale="0.5"
>
<TresBoxGeometry />
<TresMesh>
<OrbitControls />
</TresMesh>
</TresMesh>
</TresCanvas>
</template>
And is A LOT of code just for a simple rotation right? Normally we need something fast to see if something is working
Usage
With the new directive v-rotate provided by TresJS, you can do this by just adding v-rotate
to the instance.
vue
<script setup lang="ts">
import { vRotate } from '@tresjs/core'
</script>
<template>
<TresCanvas >
<TresPerspectiveCamera :position="[0, 2, 5]" />
<TresMesh
v-rotate // 😍
>
<TresBoxGeometry />
</TresMesh>
</TresCanvas>
</template>
By default v-rotate
uses Quaternions so you don't have to worry by Gimbal Lock, or check if you mesh is available in the first frames.
Modifiers
You can control the axis and the rotation speed by adding modifiers
vue
<script setup lang="ts">
import { vRotate } from '@tresjs/core'
</script>
<template>
<TresCanvas >
<TresPerspectiveCamera :position="[0, 2, 5]" />
<TresMesh
v-rotate:x.y="0.1" // the axis will be x and y with a speed of 0.1
>
<TresBoxGeometry />
</TresMesh>
</TresCanvas>
</template>