--- title: Animaciones básicas description: Cómo usar el composable useRenderLoop para animar tus objetos. author: alvarosabu thumbnail: /recipes/animations.png difficulty: 0 --- # Animaciones básicas Esta guía te ayudará a comenzar con animaciones básicas en TresJS. Construiremos una escena simple con un cubo. Luego animaremos el cubo para que rote alrededor del eje Y y Z. ## useRenderLoop El composable `useRenderLoop` es el núcleo de las animaciones en TresJS. Te permite registrar una función de devolución de llamada que se ejecutará cada vez que el renderizador actualice la escena con la frecuencia de actualización del navegador. Para obtener una explicación detallada de cómo funciona, consulta la documentación de [useRenderLoop](/api/composables#userenderloop). ```ts const { onLoop } = useRenderLoop() onLoop(({ delta, elapsed }) => { // Se ejecutará en cada fotograma ~ 60FPS (dependiendo de tu monitor) }) ``` ## Obteniendo la referencia al cubo Para animar el cubo, necesitamos obtener una referencia a él. Podemos hacerlo pasando una [Referencia de Plantilla](https://vuejs.org/guide/essentials/template-refs.html) utilizando la propiedad `ref` en el componente `TresMesh`. Esto nos devolverá la instancia de THREE. Para mejorar el rendimiento, utilizaremos una [Referencia Superficial](https://v3.vuejs.org/guide/reactivity-fundamentals.html#shallow-reactivity) para almacenar la referencia en lugar de una referencia regular. Puedes ver por qué [aquí](../advanced/caveats.md#reactivity) ```vue ``` ## Animando el cubo Ahora que tenemos una referencia al cubo, podemos animarlo. Utilizaremos la devolución de llamada `onLoop` para actualizar la rotación del cubo. ```ts onLoop(({ delta, elapsed }) => { if (boxRef.value) { boxRef.value.rotation.y += delta boxRef.value.rotation.z = elapsed * 0.2 } }) ``` También puedes usar el `delta` del [reloj interno de THREE](https://threejs.org/docs/?q=clock#api/en/core/Clock) o el `elapsed` para animar el cubo. ## ¿Pero por qué no usar la reactividad? Es posible que te preguntes por qué no estamos usando la reactividad para animar el cubo. La respuesta es simple: rendimiento. ```vue // Esto es una mala idea ❌ ``` Podemos sentirnos tentados a usar la reactividad para animar el cubo. Pero sería una mala idea. La razón es que [la reactividad de Vue se basa en Proxies](https://vuejs.org/guide/extras/reactivity-in-depth.html#how-reactivity-works-in-vue) y no está diseñada para ser utilizada en un bucle de renderizado que se actualiza 60 o más veces por segundo. La página incrustada a continuación muestra la [prueba de rendimiento de un proxy frente a un objeto regular](https://measurethat.net/Benchmarks/Show/12503/0/object-vs-proxy-vs-proxy-setter). Como puedes ver, el proxy es 5 veces más lento que el objeto regular. Puedes leer más sobre esto en la sección de [Caveats](../advanced/caveats.md#reactivity).