鈿★笍 Limited Black Friday Deal
Get 50% off on the React Three Fiber Ultimate Course with the promo code ULTIMATE50
Buy Now
Fundamentals
Core
Master
Shaders
React Three Fiber Hooks
En esta lecci贸n, descubriremos qu茅 son los hooks useThree
y useFrame
proporcionados por React Three Fiber, c贸mo y cu谩ndo usarlos.
useThree
useThree da acceso al modelo state
que contiene el renderer predeterminado, la escena, la c谩mara, el tama帽o del viewport, etc.
Aunque explicar茅 cada una de las propiedades del state que utilizaremos en el momento adecuado, puedes encontrar la lista completa de propiedades en la documentaci贸n.
Para usarlo, necesitamos importarlo desde @react-three/fiber
y luego llamarlo dentro de nuestro componente:
import { Canvas, useThree } from "@react-three/fiber"; // ... const Cube = (props) => { const { camera } = useThree(); // ... }; // ...
Aunque esta forma de usar useThree
funciona, causar谩 que el componente se vuelva a renderizar en otros cambios de valores diferentes a los que obtuvimos mediante destructuring.
En su lugar, podemos usar el patr贸n de selector para obtener solo los valores que necesitamos:
import { Canvas, useThree } from "@react-three/fiber"; const Cube = (props) => { const camera = useThree((state) => state.camera); // ... };
De esta manera, el componente solo se volver谩 a renderizar cuando el valor camera
cambie.
Ten en cuenta que los valores internos de threejs no son reactivos. Si la camera.position
cambia, el componente no se volver谩 a renderizar. (Afortunadamente)
Ahora que tenemos acceso a la c谩mara, podemos modificar el fov
(campo de visi贸n) para acercar o alejar:
// ... const Cube = (props) => { const camera = useThree((state) => state.camera); const updateFov = (fov) => { camera.fov = fov; camera.updateProjectionMatrix(); }; useControls("FOV", { smallFov: button(() => updateFov(20)), normalFov: button(() => updateFov(42)), bigFov: button(() => updateFov(60)), hugeFov: button(() => updateFov(110)), }); // ... }; // ...
Notas:
- El m茅todo
updateProjectionMatrix
es necesario para decirle a threejs que la c谩mara ha cambiado y necesita ser actualizada. - Al pasar un valor de cadena como primer par谩metro a
useControls
, podemos agrupar propiedades por carpeta.
Nuestro campo de visi贸n de la c谩mara se actualiza correctamente desde los controles
useFrame
Threejs es una biblioteca basada en un render-loop. Esto significa que lo que vemos en la pantalla es el resultado de un bucle que renderiza la escena en cada frame. As铆 como un video es una sucesi贸n de im谩genes, una escena 3D es una sucesi贸n de frames.
El hook useFrame nos permite ejecutar c贸digo en cada frame renderizado, como ejecutar efectos, actualizar controles y realizar animaciones.
Cuando se apunta a 60fps, el callback se invocar谩 60 veces por segundo.
End of lesson preview
To get access to the entire lesson, you need to purchase the course.