J'ai essayé de faire marcher les ours avec React x Three.js! Modélisation 3D facile avec AI Meshy!

J'ai essayé de faire marcher les ours avec React x Three.js! Modélisation 3D facile avec AI Meshy!

À mesure que la technologie IA évolue, la modélisation 3D est devenue plus facile et plus agréable.
Avec l'introduction de «Meshy IA», qui peut être facilement utilisée par les débutants de la programmation, la modélisation 3D, que nous avons déjà trouvée difficile, a soudainement abaissé l'obstacle.

📺 Vérifiez le maillage : vous pouvez le vérifier sur la page officielle à partir de ce lien

Dans cet article, nous expliquerons en détail comment exécuter un modèle d'ours 3D créé avec Meshy AI en utilisant React x Three.js

La façon dont l'ours commence à se déplacer à l'écran est amusante à regarder et devrait également être l'occasion d'élargir les possibilités du développement Web.
Même les débutants devraient certainement l'essayer et essayer de créer votre propre animation 3D originale!

Nous continuerons à créer des leçons et travaillent à partir de TypeScript X React Three Fibre à l'avenir!
Nous ferons une annonce sur YouTube, alors veuillez vous abonner à notre chaîne YouTube et attendre les notifications!

📺 Regardez YouTube : vous pouvez le regarder à partir de ce lien

Si vous souhaitez savoir ce que React Three Fibre peut faire, veuillez vous référer à ce qui suit!
Nous avons des travaux faciles à utiliser disponibles!

table des matières

Demo d'affichage du modèle 3D

Vous pouvez voir la démo du produit fini dans la vidéo ci-dessous.

📺 Regardez la démo sur YouTube : vous pouvez le regarder à partir de ce lien

De plus, le code source de ce projet est disponible sur GitHub.
Veuillez télécharger le code et l'essayer!

💾 Référentiel GitHub : vérifiez le code source de ce lien

Si vous vous demandez: "Je l'ai vu, comment puis-je le faire?", Ne vous inquiétez pas!
Dans cet article, nous expliquerons étape par étape comment voir ce modèle 3D.

Techniques nécessaires et bibliothèque clé

Ce projet utilise les technologies et les bibliothèques suivantes: voici une brève explication de chaque rôle.

  • Réagir
    • Bibliothèque pour le développement frontal
    • Construction efficace de l'interface utilisateur avec conception basée sur les composants
  • Trois.js
    • Une bibliothèque pour dessiner des graphiques 3D sur le Web
    • Il est facile de gérer les opérations Webgl complexes
  • Réagir trois fibres
    • Bibliothèque de wrapper pour gérer trois.js en réaction
    • Vous pouvez profiter des caractéristiques puissantes de trois.js dans le style de développement React
  • Réagir t'en drei
    • React Three Fibre Extension Library
    • React Three Fibre Extension Library
  • Maillé
    • Un service qui vous permet de générer facilement des modèles 3D de haute qualité en utilisant l'IA

Conception globale de la mise en œuvre

Ce projet réalisera un processus simple: "Utilisez des outils AI pour générer un modèle 3D et l'afficher dans le navigateur à l'aide de React et Three.js."

Plan (flux simple)
Chargement du modèle
  • Importez un modèle d'ours 3D généré avec Meshy AI à l'aide de fbxloader
  • Ajuster l'échelle , la position initiale et la rotation
Gestion des animations
  • Jouez à l'animation "Walking" des ours en utilisant AnimationMixer en trois.js
  • Gestion du statut: conduiteContrôle la lecture de l'animation et l'arrêt de l'utilisation de la variable d'état
    • Isplaying = true : l'animation est jouée
    • Isplaying = false : l'animation s'arrête
Mises à jour cadre par trame
  • Réagir trois fibres **useframe** Utilisez des crochets pour mettre à jour le comportement suivant par trame
    • Avance du modèle augmenter la z alors que l'ours marche sur l'écran
    • Mise à jour de l'animation : Advance les cadres d'animation actuels avec AnimationMixer
Fonctionnement du bouton
  • En utilisant le bouton de réact,conduiteIl vous permet de changer l'état de
    • Une interface utilisateur simple qui change la lecture / arrêt de l'animation lorsque vous appuyez sur un bouton
Construire l'environnement
  • Contexte : Réglez la couleur du ciel en trois.js
  • Lumière : Placer les sources ambiantes de lumière et de lumière ponctuelle pour rendre les modèles 3D plus faciles à visualiser

Préparation environnementale

Cette section fournit la configuration initiale de votre projet. Créez une application React à l'aide de la commande NPX, installez les bibliothèques requises et organisez la structure du dossier.

Création d'une application React

Tout d'abord, créez une application React à l'aide de la commande NPX.

NPX CREATE-REACT-APP MESHY-3D-MODEL-ANIMation - Template TypeScript
  • Meshy-3D-Model-Animathion est le nom du projet
  • - Template Utilisez un modèle compatible TypeScript en spécifiant

Installation des bibliothèques requises

Installez React Three Fibre et d'autres bibliothèques.

CD Meshy-3D-Model-Animathion NPM Installer trois @ React-Three / Fiber @ React-Three / Drei
  • trois : trois.js corps principal
  • @ React-Three / Fibre : un emballage pour utiliser trois.js avec React
  • @ React-Three / Drei : Aiders utiles tels que les contrôles de la caméra et le dessin de texte

Examiner la structure des dossiers et supprimer des fichiers inutiles

Organisez et ajoutez des dossiers de l'état initial comme suit:
Fondamentalement, c'est la valeur par défaut, mais pour les fichiers que vous ne connaissez pas, veuillez consulter GitHub.

Meshy-3d-model-animation / ├── node_modules / ├── Modèles publiques / ├fique │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │. THREEDMODELANIMIMATION.TSX // Composant principal React │ │ │ │ │ THREEDMODELANIMIMATION.CSS // Feuille de style de page │ │ │ │fique │ │── index.css // Global CSS │── Package.json // Paramètres de projet │sé

Les fichiers à modifier cette fois sont les suivants:

  • App.tsx : points d'entrée de l'application
  • Pages> index.ts : Index Fichier pour exporter la page vers.
  • pages /: Le dossier à créer cette fois
    • ThreedModeLanimation.TSX : Composant de la page principale.
    • THREEDMODELANIMation.css : Page Stylesheet

Explication détaillée du code source pour chaque étape

Dans les sections suivantes, nous expliquerons en détail les cinq parties ci-dessous dans l'ordre.

PARTIE
PARTIE
Générer des modèles 3D avec meshy
  • Générer des modèles d'ours 3D avec AI à l'aide de Meshy AI
  • Exporter au format FBX et placez-le dans le public / modèles / Cuddly_bear
PARTIE
Définition constante
  • Définit l'échelle, la position initiale, l'angle de rotation, etc. du modèle 3D
  • Définissez les constantes qui gèrent la taille du sol et des pierres aléatoires, ainsi que les paramètres initiaux de la caméra et de la lumière.
  • En convertissant les constantes, il est plus facile de régler et de gérer plus tard.
PARTIE
Modèle d'animation
  • Chargement du modèle d'ours généré dans Meshy à l'aide de fbxloader
  • Gérer les animations à l'aide d'AnimationMixer
  • Dessiner un modèle en utilisant primitif
  • Implémentez la lecture / arrêt de la lecture en utilisant la gestion de l'état de React
PARTIE
Réglage du sol
  • Utilisez la plantéométrie plan pour générer du sol
  • Utilisez MeshstandardMaterial pour définir la couleur et la texture du sol
  • Il joue un rôle dans le maintien du terrain et en soulignant l'arrière-plan et les modèles
PARTIE
Arrangement de pierres aléatoires
  • Usestate pour générer des pierres de positions et de tailles aléatoires au premier rendu
  • Création de pierres avec sphèreométrie et meshstandardmaterial
PARTIE
Composants principaux
  • Intégrez les modèles d'animation du sol, des pierres et des ours à l'aide de toile
  • Utilisez OrbitControls de la bibliothèque Drei pour permettre le fonctionnement de la caméra
  • Ajouter des boutons, basculer l'état d'égage pour jouer / arrêter l'animation

Vérifiez toute la source

ci-dessous le code source complet pour exécuter le modèle d'ours 3D créé à l'aide de Meshy AI créé dans cet article à l'aide de React x Three.js Tout le code est mis en place, il est donc facile d'avoir une idée de son fonctionnement.

Si vous souhaitez voir d'autres sources, veuillez consulter GitHub.

import './app.css'; import {ThreedModelanimation} de './pages'; fonction app () {return (<div className="App"><ThreeDModelAnimation /></div> )); } Exporter l'application par défaut;
Importer ExplosedingButtonPage à partir de "./ExplodingButtonPage/ExplodingButtonPage"; Importez GamingroomLogin de "./gamingroomlogin/gamingroomlogin"; Importer Meshy3dmodel de "./Meshy3dmodel/meshy3dmodel"; Importer ThreedModelanimation de "./threedmodelanimation/threedmodelanimation"; Exportation {ExplosedingButtonPage, GamingroomLogin, Meshy3dmodel, ThreedModeLanimation}
// 3DMODELANIMATION.TSX // ==== // Partie 1: Générez un modèle avec Meshy // === // Générez un modèle 3D en utilisant Meshy Ai // ==== // Partie 2: Définition constante // ==== Import React, {useref, useEffecte, useState} from 'react'; import {canvas, useFrame} de '@ react-trois / fibre'; import {orbitControls} de '@ react-trois / drei'; import {fbxloader} à partir de 'trois / exemples / jsm / chargeurs / fbxloader'; import {AnimationMixer, horloge, double, vector3} de «trois»; import './threedModeLanimation.css'; // Définition constante // Paramètres liés au modèle const Model_Scale = 0,1; // Échelle du modèle const Model_Initial_Position = new Vector3 (0, 0,5, 0); // Position initiale du modèle const Model_Rotation_X = -0.3; // Rotation de l'axe x du modèle // Définition du sol Const Ground_Color = 'Green'; const Ground_Position = new Vector3 (0, 0, 0); const Ground_Size = 200; // Ground Taille const Ground_Segments = 50; // Divisions au sol // Constant de pierre const Stone_count = 50; // Nombre de pierres const stone_scale_min = 0,1; // CONS à échelle minimale Stone_Scale_Max = 0,6; // Échelle maximale // Paramètres de caméra et d'éclairage const Camera_Position = new Vector3 (0, 20, 50); const ambient_light_intensity = 0,7; // Intensité lumineuse ambiante const Point_light_position = new Vector3 (10, 20, 10); const point_light_intensity = 1; // Point Light Source Strength // Paramètre d'arrière-plan const Background_Color = 'SkyBlue'; // Interface de couleur d'arrière-plan AnimatedFbxModelProps {path: string; Isplaying ?: Boolean; } // ==== // Partie 3: Modèle animé // ===== const AnimatedFBXModel: react.fc<AnimatedFBXModelProps> = ({path, isplaying = false}) => {const mixer = useref<AnimationMixer | null> (nul); const Clock = useRef (new Clock ()); const [modèle, setModel] = UseState<any> (nul); const [action, setAction] = Usestate<any> (nul); // Mettez à jour la position et l'animation du modèle pour chaque trame useFrame (() => {if (modèle && iSplaying) {Model.Position.z + = 0.05; // Déplacez le modèle en avant} if (Mixer.Current && iSplaying) {const delta = horloge.current.getdelta (); mixer.current.update (delta); // mettent à jour l'animation}); // Charger le modèle fbx useEFFECT (() => {const loder = new fbxLoader (); loader.load (path, (fbx) => {if (! Modèle) {fbx.scale.set (model_scale, model_scale, model_scale); fbx.position.copy_x); fbx.Rotatex (model_x); Mixer.Current = New AnimationMixer (fbx); Console.Error ('Erreur de chargement FBX:', erreur);});}, [Path]); // Toggle Playback / Stop Animation UseEFFECT (() => {if (Action) {Action.Paused =! Isplaying; if (Isplaying) {Action.Play ();} else {action.stop ();}}}, [Isplaying, Action]); modèle de retour?<primitive object={model} /> : nul; }; // ==== // Partie 4: Paramètres du sol // ==== Const Ground: react.fc = () => {return ( <mesh rotation={[-Math.PI / 2, 0, 0]} position={GROUND_POSITION}><planeGeometry args={[GROUND_SIZE, GROUND_SIZE, GROUND_SEGMENTS, GROUND_SEGMENTS]} /><meshStandardMaterial color={GROUND_COLOR} side={DoubleSide} /></mesh> )); }; // ==== // Partie 5: Arrangement de pierres aléatoires // ==== CONS Randomstones: React.fc = () => {// Générer des pierres à des positions et des échelles aléatoires sur le premier rendu const [Stones] = UseState (() => {return array.from ({le long: Stone_Count}, () => {const x = math.random () 2; <mesh key={`${x}-${z}`} position={[x, y, z]} scale={[scale, scale, scale]}><sphereGeometry args={[1, 8, 8]} /><meshStandardMaterial color="gray" /></mesh> )); }); return <> {Stones}</> ; }; // ==== // Partie 6: Composants principaux // ===== const threedModeLanimation: react.fc = () => {const [isplaying, setIsplaying] = useState (false); retour (<div className="canvas-container"> <button style={{ position: 'absolute', top: '10px', left: '10px', zIndex: 100 }} onClick={() =>setISplaying (! Isplaying)}> {Isplaying? 'Pause Animation': 'Play Animation'}</button> <Canvas camera={{ position: CAMERA_POSITION.toArray() }}><ambientLight intensity={AMBIENT_LIGHT_INTENSITY} /><pointLight position={POINT_LIGHT_POSITION.toArray()} intensity={POINT_LIGHT_INTENSITY} /><OrbitControls /> {/ * Affichage au sol * /}<Ground /> {/ * Arrangement de pierres aléatoires * /}<RandomStones /> {/ * Paramètre de couleur d'arrière-plan * /}<color attach="background" args={[BACKGROUND_COLOR]} /> {/ * Modèle d'animation * /}<AnimatedFBXModel path="/models/cuddly_bear/Animation_Walking_withSkin.fbx" isPlaying={isPlaying} /></Canvas></div> )); }; Exporter par défaut ThreedModeLanimation;
/ * 3DModeLanimation.css * / .Canvas-Container {Width: 100VW; Hauteur: 100VH; Affichage: flex; Justification-contenu: centre; Align-Items: Centre; Color d'arrière-plan: # 000; }
  

Partie 1: Génération de modèles en meshy

Cette fois, le modèle 3D utilisera un service de génération automatique d'IA appelée Meshy.
Le lien est ci-dessous, veuillez donc vous y référer.

200 crédits par mois sont disponibles gratuitement.

📺 Vérifiez le maillage : vous pouvez le vérifier sur la page officielle à partir de ce lien

Cette fois, la version pro (environ 3 000 yens par mois) est requise. (L'animation est uniquement disponible en version pro)

Sélectionnez une communauté et sélectionnez un modèle déjà créé.
Vous pouvez générer ceci par vous-même à partir de texte ou d'images.

Cette fois, nous avons choisi le modèle d'ours 3D ci-dessous.
Lorsque vous survolez le curseur, vous verrez un bouton appelé "Regenerate Model", alors sélectionnez-le.

Vous serez probablement redirigé vers l'espace de travail, alors sélectionnez simplement le bouton "Générer".

Il y aura quatre modèles d'ours 3D, alors choisissez le modèle que vous aimez.

Sélectionnez "Confirmer la texture et le remesh tel quel."

Cela générera un modèle similaire au modèle que vous avez sélectionné.

Ensuite, sélectionnez Animer> Rigging pour ajouter l'animation.

Cette fois, bien que ce soit un peu difficile, car l'humanoïde est proche, je choisirai l'humanoïde.

Je ne pense pas qu'il soit nécessaire de modifier l'écran suivant, alors continuez à la page suivante.

Ce sera la disposition du marqueur. Cette fois, mes genoux sont difficiles, mais j'ai fini par les empiler sur mes chevilles.

Cela générera un modèle 3D animé.
La façon dont je marche est maladroite, mais cela me suffit, en termes de personnage. (mdr)

Si le mouvement ne fonctionne pas, exportez-le à l'aide de FBX ou quelque chose de similaire.
Cette fois, je l'expliquerai sur FBX, mais comme GLB est plus léger, il peut être bon pour l'utilisation du Web.

Partie 2: Définition constante

Tout d'abord, nous examinerons l'importation de chaque bibliothèque et les définitions constantes.
La définition des constantes gère centralement les valeurs utilisées dans votre application, améliorant la réutilisabilité et la lisibilité. Étant donné que la définition des valeurs pour les modèles 3D et les scènes sont utilisées partout dans le code, ce qui les rend plus faciles à entretenir.

// ==== // Partie 2: Définition constante // ==== Importer React, {useref, useEffecte, useState} de 'react'; import {canvas, useFrame} de '@ react-trois / fibre'; import {orbitControls} de '@ react-trois / drei'; import {fbxloader} à partir de 'trois / exemples / jsm / chargeurs / fbxloader'; import {AnimationMixer, horloge, double, vector3} de «trois»; import './threedModeLanimation.css'; // Définition constante // Paramètres liés au modèle const Model_Scale = 0,1; // Échelle du modèle const Model_Initial_Position = new Vector3 (0, 0,5, 0); // Position initiale du modèle const Model_Rotation_X = -0.3; // Modèle de rotation x-axe // réglage du sol const Ground_Color = 'Green'; const Ground_Position = new Vector3 (0, 0, 0); const Ground_Size = 200; // Ground Taille const Ground_Segments = 50; // Nombre de divisions au sol // Paramètres en pierre const Stone_count = 50; // Nombre de pierres const stone_scale_min = 0,1; // échelle minimale de pierres const stone_scale_max = 0,6; // échelle maximale des pierres // paramètres de caméra et de lumière const caméra_position = new Vector3 (0, 20, 50); const ambient_light_intensity = 0,7; // Intensité lumineuse ambiante const Point_light_position = new Vector3 (10, 20, 10); const point_light_intensity = 1; // Point Light Source Strength // Paramètre d'arrière-plan const Background_Color = 'SkyBlue'; // Interface de couleur d'arrière-plan AnimatedFbxModelProps {path: string; Isplaying ?: Boolean; }

Selon le modèle 3D que vous générez, des ajustements fins peuvent être nécessaires, veuillez donc utiliser ce qui suit comme référence pour jouer avec les nombres.

  • Paramètres liés au modèle
    • Model_scale
      • Spécifie la taille du modèle. Réglé sur 0,1
      • Exemple: ajustez le modèle d'ours pour afficher la taille appropriée de l'écran.
    • Model_Initial_Position
      • Spécifie la position initiale du modèle.
      • Exemple: Placez-le légèrement au-dessus du sol avec un nouveau vecteur3 (0, 0,5, 0)
    • Modèle_rotation_x
      • Spécifie l'angle de rotation initial du modèle.
      • Exemple: -0,3 pour se pencher légèrement en avant.
  • Réglage du sol
    • Ground_Color
      • Spécifiez la couleur du sol. Spécifiez le vert ici
    • Ground_Position
      • Spécifie la position du sol. Placé à l'origine avec un nouveau vector3 (0, 0, 0)
    • Ground_Size
      • Spécifiez la taille du sol (largeur et hauteur). 200 carrés.
    • Ground_Segments
      • Spécifie le nombre de sols à diviser. Réglé sur la finesse modérée à 50.
  • Paramètres de pierre
    • Pierre_count
      • Spécifie le nombre de pierres à placer. 50 pièces sont disposées.
    • Pierre_scale_min
      • Spécifie l'échelle minimale (taille) de la pierre. 0.1 représente une petite pierre.
    • Pierre_scale_max
      • Spécifie l'échelle maximale (taille) de la pierre. 0,6 représente une pierre légèrement plus grande.
  • Caméra et paramètres légers
    • Camera_position
      • Spécifie la position initiale de la caméra. Le nouveau Vector3 (0, 20, 50) donne une perspective légèrement plus élevée pour regarder l'ours.
    • Ambient_light_intensity
      • Spécifie l'intensité de la lumière ambiante. Luminosité naturelle à 0,7
    • Point_light_position
      • Spécifie l'emplacement de la source de lumière ponctuelle. Illuminez le modèle d'en haut avec un nouveau vector3 (10, 20, 10)
    • Point_light_intensity
      • Spécifie l'intensité de la source de lumière ponctuelle. Réglez la luminosité sur 1
  • Paramètres d'arrière-plan
    • Fond_color
      • Spécifie la couleur d'arrière-plan de la scène. Spécifiez SkyBlue ici

Partie 3: Modèle d'animation

Charge le modèle 3D généré avec Meshy et utilise la fonction d'animation de trois.js pour l'exécuter. La combinaison de la gestion de l'animation avec la gestion de l'État de React offre la possibilité de déplacer et d'arrêter le modèle.

// ==== // Partie 3: Modèle animé // ===== const AnimatedFBXModel: react.fc<AnimatedFBXModelProps> = ({path, isplaying = false}) => {const mixer = useref<AnimationMixer | null> (nul); const Clock = useRef (new Clock ()); const [modèle, setModel] = UseState<any> (nul); const [action, setAction] = Usestate<any> (nul); // Mettez à jour la position et l'animation du modèle pour chaque trame useFrame (() => {if (modèle && iSplaying) {Model.Position.z + = 0.05; // Déplacez le modèle en avant} if (Mixer.Current && iSplaying) {const delta = horloge.current.getdelta (); mixer.current.update (delta); // mettent à jour l'animation}); // Charger le modèle fbx useEFFECT (() => {const loder = new fbxLoader (); loader.load (path, (fbx) => {if (! Modèle) {fbx.scale.set (model_scale, model_scale, model_scale); fbx.position.copy_x); fbx.Rotatex (model_x); Mixer.Current = New AnimationMixer (fbx); Console.Error ('Erreur de chargement FBX:', erreur);});}, [Path]); // Toggle Playback / Stop Animation UseEFFECT (() => {if (Action) {Action.Paused =! Isplaying; if (Isplaying) {Action.Play ();} else {action.stop ();}}}, [Isplaying, Action]); modèle de retour?<primitive object={model} /> : nul; };
  • Chargement du modèle
    • Chargez public / modèles / cuddly_bear / animation_walking_withskin.fbx à l'aide de fbxloader
    • Dessinez le modèle 3D importé en utilisant le primitif en trois.js
  • Gestion des animations
    • Utilisez AnimationMixer
    • Pour basculer entre la lecture et l'arrêt des animations, utilisez Isplaying est géré à l'aide UseState
  • Progrès du modèle
    • Utilisez le crochet UseFrame en trois.js la valeur de l'axe Z par trame, en réalisant un mouvement en mouvement qui fait progresser le modèle.

Partie 4: réglage du sol

Réglez le sol où les ours marcheront. Le sol est exprimé en utilisant une géométrie plane simple et est positionné en harmonie avec la caméra et le modèle. Le sol permet des mouvements réalistes des ours.

Cette fois, nous utiliserons simplement une couleur verte, mais je pense que cela deviendra plus réaliste si vous utilisez des textures et d'autres choses.

// ==== // Partie 4: Paramètres du sol // ==== Const Ground: react.fc = () => {return ( <mesh rotation={[-Math.PI / 2, 0, 0]} position={GROUND_POSITION}><planeGeometry args={[GROUND_SIZE, GROUND_SIZE, GROUND_SEGMENTS, GROUND_SEGMENTS]} /><meshStandardMaterial color={GROUND_COLOR} side={DoubleSide} /></mesh> )); };
  • Génération de terrain
    • Créez un plan en utilisant la plantéométrie en plane en fibre réagi
    • Définissez la largeur, la hauteur et le nombre de divisions du plan à l'aide de constantes prédéfinies.
  • L'apparence du sol
    • Utilisez MeshstandardMaterial
    • La couleur du sol est spécifiée comme Ground_Color le vert
  • Placement
    • Pour niveler le plan, tournez-le de 90 degrés par rapport à l'axe x.
    • Réglez la position au sol en tant que Ground_Position un nouveau vector3 (0, 0, 0)

Partie 5: arrangement de pierre aléatoire

Placer des pierres de taille aléatoire et de position sur le sol pour ajouter une sensation naturelle à la scène. La couleur verte entière était trop simple, donc en plaçant au hasard les pierres, nous créons une scène plus réaliste.

// ===== // Partie 5: Arrangement de pierres aléatoires // ==== Const Randomstones: React.fc = () => {// Générer des pierres à des positions et des échelles aléatoires sur le premier rendu const [Stones] = UseState (() => {return array.from ({Length: Stone_Count}, () => {const x = math.random () / 2; const y = Ground_Position.y; const z = Math.Random () * Ground_Size - Ground_Size / 2; <mesh key={`${x}-${z}`} position={[x, y, z]} scale={[scale, scale, scale]}><sphereGeometry args={[1, 8, 8]} /><meshStandardMaterial color="gray" /></mesh> )); }); return <> {Stones}</> ; };
  • Génération de pierres
    • Utilisez UseState de React
    • Les données de placement comprennent plusieurs pierres avec des positions et des échelles aléatoires.
  • Placement aléatoire
    • En utilisant le random math nous générons au hasard les coordonnées X et Z
    • Définissez au hasard l'échelle dans les plages de Stone_Scale_min et Stone_Scale_Max
  • L'apparence de la pierre
    • Utilisez la sphèreométrie
    • des mesures de maille pour reproduire la texture de la pierre.
  • Empêcher de redessiner
    • UseState génère des pierres et les corrige lors du premier rendu.
    • Les performances sont améliorées en maintenant le même arrangement de pierre lors de la redessation.

Partie 6: composant principal

Il intègre le sol, les pierres aléatoires et les modèles d'animation d'ours et crée le composant principal qui gère toute la scène. De plus, il implémente une interface utilisateur de fonctionnement (bouton) qui permet aux utilisateurs de basculer entre la lecture et l'arrêt des animations.

// ==== // Partie 6: Composant principal // ==== CONT THREEDMODELANIMation: React.fc = () => {const [Isplaying, setIsplaying] = UseState (false); retour (<div className="canvas-container"> <button style={{ position: 'absolute', top: '10px', left: '10px', zIndex: 100 }} onClick={() =>setISplaying (! Isplaying)}> {Isplaying? 'Pause Animation': 'Play Animation'}</button> <Canvas camera={{ position: CAMERA_POSITION.toArray() }}><ambientLight intensity={AMBIENT_LIGHT_INTENSITY} /><pointLight position={POINT_LIGHT_POSITION.toArray()} intensity={POINT_LIGHT_INTENSITY} /><OrbitControls /> {/ * Affichage au sol * /}<Ground /> {/ * Arrangement de pierres aléatoires * /}<RandomStones /> {/ * Paramètre de couleur d'arrière-plan * /}<color attach="background" args={[BACKGROUND_COLOR]} /> {/ * Modèle d'animation * /}<AnimatedFBXModel path="/models/cuddly_bear/Animation_Walking_withSkin.fbx" isPlaying={isPlaying} /></Canvas></div> )); }; Exporter par défaut ThreedModeLanimation;
  • Construire la scène
    • Dessinez une scène 3D entière à l'aide du composant Canvas de React Three Fibre
    • Placez sol , les pierres aléatoires et lefbxmodel animé dans la toile .
  • Paramètres légers et caméra
    • Ajouter la lumière ambiante et les pointes pour égayer toute la scène .
    • Activez les opérations de la caméra à l'aide d'OrbitControls de la bibliothèque DREI
  • Opérations d'animation ui
    • Créez un bouton basculer entre le jeu et l'arrêt et gérer l' Isplaying à l'aide du crochet USState
    • Modifiez dynamiquement l'étiquette de bouton l'état d'Isplaying

dernièrement

Toutes les étapes du projet "Let the Bears marchent avec React x Three.js" ont été achevées. Vous pouvez maintenant vivre le plaisir de faire fonctionner des modèles 3D générés à l'aide d'outil AI (Meshy) en utilisant React et Three.js!

Utilisez Meshy pour voir divers modèles 3D!

📺 Regardez la démo sur YouTube : vous pouvez le regarder à partir de ce lien

Si vous avez trouvé ce tutoriel utile, veuillez vous abonner à notre chaîne YouTube et lui donner une note élevée!

De plus, le code source de ce projet est disponible sur GitHub.
Veuillez télécharger le code et l'essayer!

💾 Référentiel GitHub : vérifiez le code source de ce lien

Si vous avez trouvé cela utile, veuillez vous abonner à notre chaîne!

Nous continuerons à créer des leçons et travaillent à partir de TypeScript X React Three Fibre à l'avenir!
Nous ferons une annonce sur YouTube, alors veuillez vous abonner à notre chaîne YouTube et attendre les notifications!

📺 Regardez YouTube : vous pouvez le regarder à partir de ce lien

Si vous souhaitez savoir ce que React Three Fibre peut faire, veuillez vous référer à ce qui suit!
Nous avons des travaux faciles à utiliser disponibles!

Partagez si vous le souhaitez!

Qui a écrit cet article

Ceci est un blog que j'ai commencé à étudier la sécurité de l'information. En tant que nouvel employé, je serais heureux si vous pouviez regarder avec un cœur large.
Il y a aussi Teech Lab, qui est l'occasion d'étudier le plaisir en programmation, donc si vous êtes intéressé par le développement de logiciels, assurez-vous de jeter un œil!

table des matières