Índice
- Empezar conreact-three-fiber #
- Cómo utilizarreact-three-fiber #
- Creación de un proyecto de animación y modelo de dados Ludo 3D de React #
- Construyendo el Boxcomponente #
- Representación de caja de dados Ludo 3D #
- Conclusión #
react-three-fiber
es un potente renderizador Three.js que ayuda a renderizar modelos y animaciones 3D para React y sus aplicaciones nativas. En este tutorial, aprenderá cómo configurar y construir modelos 3D en una aplicación React.
Hoy, aprenderemos cómo configurar y usar react-three-fiber
para construir y mostrar animaciones y modelos 3D en aplicaciones React y React Native.
Este tutorial es para desarrolladores que desean aprender más sobre animaciones de modelos 3D en la web usando React y para cualquiera que haya tenido limitaciones con Three.js, como la incapacidad de crear lienzos, vincular eventos de usuario como click
eventos e iniciar un bucle de renderizado, react-three-fiber
viene con estos métodos. . Construiremos un modelo 3D para comprender mejor cómo construir modelos 3D de Three.js usando react-three-fiber
.
Empezar conreact-three-fiber #
Three.js es una biblioteca que facilita la creación de gráficos 3D en el navegador, utiliza un lienzo + WebGL para mostrar los modelos y animaciones 3D, puede obtener más información aquí .
reaccionar-tres-fibra es un renderizador de React para Three.js en la web y reaccionar-nativo, es un impulso a la velocidad a la que creas modelos y animaciones 3D con Three.js, algunos ejemplos de sitios con modelos y animaciones 3D se puede encontrar aquí. react-three-fiber
reduce el tiempo dedicado a las animaciones debido a sus componentes reutilizables, eventos vinculantes y bucles de renderizado. Primero, echemos un vistazo a qué es Three.js.
react-three-fiber
nos permite construir componentes de threeJS
código usando el estado, ganchos y accesorios de React, también viene con los siguientes elementos:
Elemento | Descripción |
---|---|
mesh | Una propiedad que ayuda a definir la forma de nuestros modelos. |
hooks | react-three-fiber define ganchos que nos ayudan a escribir funciones que ayudan a definir eventos de usuario como onClick yonPointOver |
Bucle de renderizado y basado en componentes | react-three-fiber se basa en componentes y se representa según un cambio de estado o de la tienda |
Cómo utilizarreact-three-fiber #
Para usar react-three-fiber
, comience usando los siguientes comandos:
MNP #
npm i three react-three-fiber
HILO #
yarn add three react-three-fiber
Nota : Para react-three-fiber
que funcione, deberá instalar three
(Three.js) como hicimos anteriormente.
Creación de un proyecto de animación y modelo de dados Ludo 3D de React #
Aquí vamos a construir un modelo de dados de ludo en 3D usando react-three-fiber
como lo tenemos en el video a continuación.
Construyendo el Boxcomponente #
El Box
componente contendrá la forma de nuestros dados de ludo, una imagen de un dado de ludo y un estado para mantenerlo siempre en rotación. Primero, importemos todos los paquetes que necesitamos para nuestro Box
componente a continuación.
import React, { useRef, useState, useMemo } from "react";import { Canvas, useFrame } from "react-three-fiber";import * as THREE from "three";import five from "./assets/five.png";
En el código anterior, estamos importando useRef
y useState
. useMemo
Usaremos el useRef
gancho para acceder a la malla de los dados y el useState
gancho para verificar el estado activo de los dados de ludo. useMemo
El gancho se utilizará para devolver el número en los dados. A continuación, estamos importando Canvas
y useFrame
desde react-three-fiber
, se canvas
utiliza para dibujar los gráficos en el navegador, mientras que useFrame
permite que los componentes se conecten al bucle de renderizado, lo que hace posible que un componente se renderice sobre el contenido de otro. A continuación, importamos el three
paquete y luego importamos una imagen estática de un dado de parchís.
Lo siguiente que debemos hacer es escribir lógica para nuestro Box
componente. Primero, comenzaremos construyendo un componente funcional y agregaremos estado a nuestro componente; hagámoslo a continuación.
const Box = (props) = { const mesh = useRef(); const [active, setActive] = useState(false); useFrame(() = { mesh.current.rotation.x = mesh.current.rotation.y += 0.01; }); const texture = useMemo(() = new THREE.TextureLoader().load(five), []); return ( Box / );}
En el código anterior, estamos creando un Box
componente con accesorios, luego creamos una referencia llamada mesh
usando el useRef
gancho, hicimos esto para que siempre podamos devolver la misma malla cada vez. Tramites en Ecuador
Una malla es un elemento visual en una escena, es un objeto 3D que forma un polígono triangular, generalmente se construye usando una Geometría, que se usa para definir la forma del modelo y un Material que define la apariencia del modelo, puedes Obtenga más información sobre una malla aquí . También puede obtener más información sobre el useRef
gancho aquí .
Después de inicializar a mesh
, necesitamos inicializar un estado para nuestra aplicación usando el useState
gancho, aquí configuramos el estado activo y suspendido de la aplicación en falso.
A continuación, usamos el useFrame
gancho para react-three-fiber
rotar la malla (dados ludo), usando el siguiente código
mesh.current.rotation.x = mesh.current.rotation.y += 0.01;
Aquí, estamos rotando la posición actual de la malla cada 0,01 segundos, esto se hace para darle a la rotación una buena animación.
const texture = useMemo(() = new THREE.TextureLoader().load(five), []);
En el código anterior, estamos creando una constante llamada texture
y pasando un useMemo
gancho de reacción como función para cargar una nueva tirada de dados, aquí para useMemo
memorizar la imagen del dado y su número. Puedes aprender sobre el useMemo
anzuelo aquí.
A continuación, queremos representar el Box
componente en el navegador y agregar nuestros eventos, lo hacemos a continuación
const Box = (props) = {return ( mesh {...props} ref={mesh} scale={active ? [2, 2, 2] : [1.5, 1.5, 1.5]} onClick={(e) = setActive(!active)} boxBufferGeometry args={[1, 1, 1]} / meshBasicMaterial attach="material" transparent side={THREE.DoubleSide} primitive attach="map" object={texture} / /meshBasicMaterial /mesh );}
En el código anterior, devolvemos nuestro Box
componente y lo envolvemos. Pasamos mesh
todas las propiedades del Box
componente usando el operador de extensión y luego hacemos referencia a la malla usando el useRef
gancho. A continuación, usamos la scale
propiedad de Three.js para establecer el tamaño del cuadro de dados cuando está activo en 2 y 1,5 cuando no lo está. Por último, pero no menos importante, agregamos un onClick
evento para configurar state
si active
no está configurado de forma predeterminada.
boxBufferGeometry args={[1, 1, 1]} /
Para renderizar el cuadro de dados, renderizamos el boxBufferGeometry
componente de Three.js, que boxBufferGeometry
nos ayuda a dibujar líneas y puntos como cuadros, usamos el args
argumento para pasar constructores como el tamaño de la geometría del cuadro.
meshBasicMaterial attach="material" transparent side={THREE.DoubleSide}
El meshBasicMaterial
de Three.js, se utiliza para dibujar geometrías de forma sencilla. Aquí pasamos el attach
atributo y le pasamos THREE.DoubleSide
accesorios al side
atributo. Define THREE.DoubleSide
los lados o espacios que deben representarse react-three-fiber
.
primitive attach="map" object={texture} /
El primitive
componente de Three.js se utiliza para dibujar gráficos 3D. Adjuntamos la propiedad del mapa para mantener la forma original de los dados de ludo. A continuación, renderizaremos nuestro Box
componente en el App.js
archivo y completaremos nuestra caja de dados de ludo 3D. Su componente debería verse similar a la imagen a continuación.
Representación de caja de dados Ludo 3D #
En esta sección, vamos a renderizar nuestro Box
componente App.js
y completaremos nuestro cuadro de ludo 3D. Para hacerlo primero, creemos un App
componente y lo envolveremos con una Canvas
etiqueta, esto es para renderizar nuestros modelos 3D, hagámoslo a continuación.
const App = () = { return ( Canvas /Canvas );}export default App;
A continuación vamos a agregar una luz a las cajas, react-three-fiber
nos proporciona tres componentes para iluminar nuestros modelos, son los siguientes
ambientLight
Esto se usa para iluminar todos los objetos en una escena o modelo por igual, acepta accesorios como la intensidad de la luz, esto iluminará el cuerpo del dado del parchís.spotLight
Esta luz se emite desde una única dirección y aumenta a medida que aumenta el tamaño del objeto, esto iluminará las puntas del dado del ludo.pointLight
Esto funciona similar a la luz de una bombilla, la luz se emite desde un solo punto hacia todas las direcciones, esto será necesario para el estado activo de nuestra aplicación.
Implementemos lo anterior en nuestra aplicación a continuación.
const App = () = { return ( Canvas ambientLight intensity={0.5} / spotLight position={[10, 10, 10]} angle={0.15} penumbra={1} / pointLight position={[-10, -10, -10]} / /Canvas );}export default App;
En el código anterior, importamos el ambientLight
componente react-three-fiber
y le agregamos una intensidad de 0.5, luego agregamos una posición y un ángulo a nuestro spotLight
componente pointLight
. El paso final de nuestra aplicación es renderizar nuestro componente de caja y agregar una posición a las cajas de dados de ludo, lo haríamos en el siguiente código.
Box position={[-1.2, 0, 0]} /Box position={[2.5, 0, 0]} /
Cuando termines, tus dados de ludo 3D deberían verse similares a la imagen a continuación:
Hay una demostración funcional disponible en CodeSandbox.
Conclusión #
react-three-fiber
ha facilitado la creación de animaciones y modelos 3D para las aplicaciones React y React Native. Al construir nuestra caja de dados de ludo 3D, aprendimos los conceptos básicos de Three.js junto con sus componentes y beneficios, react-three-fiber
además de cómo usarlo.
Puede llevar esto más allá creando modelos y animaciones 3D en sus aplicaciones React y Native utilizándolos react-three-fiber
por su cuenta. ¡Me encantaría ver qué cosas nuevas se te ocurren!
Puede leer más en Three.js y react-three-fiber
en las referencias a continuación.
Recursos Relacionados #
- Documentación de Three.js
- Fundamentos de Three.js
- Repositorio GitHub React-Three-fiber de Poimandres
- documentación de reacción de tres fibras
- Documentación oficial de React Hooks (useState, useMemo, etc.)
(ks, ra, il)Explora más en
- Aplicaciones
- Reaccionar
- javascript
Tal vez te puede interesar:
- ¿Deberían abrirse los enlaces en ventanas nuevas?
- 24 excelentes tutoriales de AJAX
- 70 técnicas nuevas y útiles de AJAX y JavaScript
- Más de 45 excelentes recursos y repositorios de fragmentos de código
Una inmersión en React y el uso de Three.jsreact-three-fiber
Empezar conreact-three-fiber #Cómo utilizarreact-three-fiber #Creación de un proyecto de animación y modelo de dados Ludo 3D de React #Construyendo el Boxco
programar
es
https://aprendeprogramando.es/static/images/programar-una-inmersion-en-react-y-el-uso-de-three-1071-0.jpg
2025-01-15