Documentación sobre React Three Fiber
Para crear un proyecto
Solo se require de Vite
para comenzar.
Instalaciones necesarias
Instala las dependencias necesarias para usar Three.js con React Three Fiber:
npm install three @react-three/fiber
Valores por defecto
React Three Fiber establece valores por defecto automáticamente, lo que simplifica la configuración.
Agregar el componente <Canvas>
desde Fiber
Para renderizar una escena 3D, envuelve tu aplicación en el componente <Canvas>
:
import { Canvas } from '@react-three/fiber';
function App() {
return (
<Canvas>
{/* Aquí puedes agregar objetos 3D */}
</Canvas>
);
}
El <Canvas>
toma el tamaño de su padre
El lienzo ajusta su tamaño al contenedor padre automáticamente.
No necesitamos crear manualmente:
Scene
WebGLRenderer
PerspectiveCamera
React Three Fiber lo gestiona por nosotros.
Creación automática de PerspectiveCamera
Por defecto, <Canvas>
crea una cámara de perspectiva sin necesidad de configurarla manualmente.
No requiere una función de renderizado
React Three Fiber maneja el renderizado por nosotros, eliminando la necesidad de llamar a renderer.render()
.
Manejo de redimensionamiento automático
Cuando el tamaño de la ventana cambia, React Three Fiber ajusta automáticamente la vista sin requerir código adicional.
Uso de Hooks exclusivos dentro de <Canvas>
Muchos hooks de Fiber y Drei funcionan solo dentro de <Canvas>
, por lo que es recomendable usar un High Order Component (HOC) para englobar nuestra aplicación.
Ejemplo de un HOC:
import { Canvas } from '@react-three/fiber';
function Scene() {
return (
<Canvas>
{/* Componentes 3D aquí */}
</Canvas>
);
}
export default function App() {
return <Scene />;
}
R3F agrega automáticamente los meshes
a la escena
Ejemplo:
import { Canvas } from '@react-three/fiber';
import { Mesh } from 'three';
function Box() {
return (
<mesh>
<boxGeometry args={[1, 1, 1]} />
<meshStandardMaterial color='blue' />
</mesh>
);
}
function App() {
return (
<Canvas>
<Box />
</Canvas>
);
}
Evitar cambios dinámicos en los args
No cambies dinámicamente los valores de args
, ya que esto reconstruirá el modelo innecesariamente.
Ejemplo INCORRECTO:
function Box({ size }) {
return <boxGeometry args={[size, size, size]} />; // Mal, cambia en cada render
}
Ejemplo CORRECTO:
function Box() {
return <boxGeometry args={[1, 1, 1]} />; // Bien, args no cambia
}
Uso de args
para pasar valores al constructor de Three.js
Ejemplo de uso correcto:
<mesh>
<sphereGeometry args={[1, 32, 32]} />
<meshStandardMaterial color='red' />
</mesh>
Orden de colocación de elementos
El orden en que se colocan los objetos en <Canvas>
afecta la forma en que se renderizan y se comportan en la escena.
Ejemplo:
<Canvas>
<ambientLight />
<mesh>
<boxGeometry args={[1, 1, 1]} />
<meshStandardMaterial color='green' />
</mesh>
</Canvas>
En este caso, la luz se aplica antes de dibujar el cubo, asegurando que sea visible correctamente.