Maison interface Web js tutoriel Explication détaillée de la création d'instances de scène avec three.js

Explication détaillée de la création d'instances de scène avec three.js

Jan 18, 2018 am 09:41 AM
javascript 详解

Cet article vous présente principalement les informations pertinentes sur l'apprentissage et la création de scénarios de documents chinois three.js. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour que tout le monde puisse apprendre ou utiliser three.js. Amis qui en ont besoin Apprenons avec l'éditeur ci-dessous.

Qu'est-ce que Three.js ?

Si vous lisez cet article, vous avez peut-être une certaine compréhension de Three.js, alors présentons brièvement ce qu'est Three.js
Three.js est une bibliothèque qui rend WebGL Les effets 3D sont simples. à appliquer dans le navigateur. Alors qu'un simple cube en WebGL brut se transformerait en centaines de lignes de code Javascript et shader, un Three js pour l'introduction. Nous avons commencé par construire la scène à l'aide de cubes rotatifs. Si vous rencontrez des difficultés et avez besoin d'aide, vous trouverez le code source pour référence en bas de la page.

Au moins trois types de composants nécessaires pour une scène

Caméra/décider de ce qui sera rendu à l'écran
  • Source de lumière /Ils auront un impact sur la façon dont les matériaux sont affichés et sur la façon dont les matériaux sont utilisés lors de la génération des ombres
  • Objets/Ce sont les principales formations de rendu dans la perspective de la caméra : boîtes, sphères, etc.
  • Avant de commencer

Enregistrez le code HTML suivant sur votre ordinateur et incluez three.js dans le répertoire js, puis ouvrez-le dans le navigateur

Le code suivant sera téléchargé à partir de la balise script

<html>
 <head>
 <meta charset=utf-8>
 <title>My first three.js app</title>
 <style>
  body { margin: 0; }
  canvas { width: 100%; height: 100% }
 </style>
 </head>
 <body>
 <script src="js/three.js"></script>
 <script>
  // Our Javascript will go here.
 </script>
 </body>
</html>
Copier après la connexion
Créer un exemple de scène

Afin d'utiliser three.js pour l'affichage, nous avons besoin trois éléments : scène, caméra, Renderer pour restituer la scène à partir de la caméra.

Prenons un moment pour expliquer ce qui se passe. Nous avons maintenant créé la scène, la caméra et le moteur de rendu.

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
Copier après la connexion
Il existe plusieurs types de caméras dans three.js. Nous utilisons temporairement PerspectiveCamera

Son premier attribut est l'angle de vue (FOV), qui est la plage de vue visible, et sa valeur représente la taille de l'angle.

Le deuxième attribut est le rapport hauteur/largeur. La plupart du temps, vous souhaitez utiliser la largeur divisée par la hauteur, sinon vous vous retrouvez avec quelque chose comme de vieux films sur un téléviseur grand écran - l'image semble écrasée.

Les deux derniers attributs sont la surface de vue proche et la surface de vue lointaine. Seule la zone située entre ces deux faces sera rendue. Vous n'avez pas à vous en préoccuper pour l'instant ; l'utilisation de ces paramètres peut améliorer les performances.

Parlons du moteur de rendu. C'est la magie. En plus du WebGLRenderer que nous utilisons ici, three.js fournit également des moteurs de rendu à utiliser sur les anciens navigateurs qui ne prennent pas en charge WebGL.

En plus de créer une instance de rendu, nous devons également définir la taille du rendu de l'application. Il est recommandé d'utiliser une méthode qui remplit toute la largeur et la hauteur de l'application - dans ce cas, la largeur et la hauteur de la fenêtre du navigateur. Pour les applications axées sur les performances, vous pouvez utiliser setSize pour définir des valeurs plus petites, telles que window.innerHeight/2, window.innerWidth/2, qui restitueront la moitié de la taille.

Si vous souhaitez restituer la taille entière en basse résolution, vous pouvez définir le troisième paramètre de setSize — uodateStyle sur false Wide Si la valeur élevée est de 100 %, l'application sera rendue à 1/2 résolution.

Maintenant, nous devons ajouter des éléments rendus au HTML. Le moteur de rendu nous montre la scène à travers le canevas.

"Tout va bien, mais qu'en est-il du cube dont j'ai parlé plus tôt" Ajoutons cela maintenant.

Nous avons besoin de BoxGeometry pour créer le cube. Cet objet contient tous les points (sommets) et remplissages (faces) du cube. Nous en discuterons plus tard.

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
scene.add( cube );

camera.position.z = 5;
Copier après la connexion
En plus de la géométrie, nous avons également besoin de matériaux pour la colorer. three.js fournit du matériel, mais nous utiliserons MeshBasicMaterial pour l'instant. Tous les matériaux acceptent et appliquent un objet contenant toutes les propriétés. Pour des raisons de simplicité, nous ne fournissons qu'un seul attribut de couleur : green - 0x00ff00 Utilise les mêmes couleurs hexadécimales qu'en CSS et PS.

Le troisième élément dont nous avons besoin est le Mesh. Un maillage est un objet qui applique un matériau à la géométrie, que nous pouvons ensuite placer dans la scène et déplacer librement.

Lorsque nous appelons scene.add(), ce que nous ajoutons sera affiché aux coordonnées (0, 0, 0,) par défaut. Cela provoque le chevauchement interne de la caméra et du cube. Pour éviter cela, nous éloignons simplement la caméra un peu plus loin.

Scène de rendu

Si vous copiez le code ci-dessus dans le fichier HTML, rien ne s'affichera à l'écran. Parce que nous n'avons pas encore rendu la scène. Nous devons donc appeler le moteur de rendu ou la boucle d'animation.

Cela crée une boucle dans laquelle le moteur de rendu dessine une image chaque seconde. Si vous ne savez pas grand chose en programmation de jeux Web, vous pourriez dire « Pourquoi ne pas écrire une fonction setInterval ? En fait, nous le pouvons, mais requestAnimationFrame présente plus d'avantages. L'avantage le plus important est que requestAnimationFrame interrompt le rendu lorsque le navigateur passe à un autre onglet, afin que la précieuse puissance de traitement et la durée de vie de la batterie ne soient pas gaspillées.

function animate() {
 requestAnimationFrame( animate );
 renderer.render( scene, camera );
}
animate();
Copier après la connexion
Faites bouger le cube

Si vous insérez le code que nous venons de créer, vous devriez voir un cube vert. Laissez-le tourner pour ne pas devenir ennuyeux.

Ajoutez le code suivant à renderer.render dans la fonction animate :

cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
Copier après la connexion

它会按帧运行(每秒60帧),并赋予立方体优雅的动画。基本上,应用运行时,你想移动或改变任何元素,必须通过动画循环。你当然在此处能调用其他函数,以免animate函数上百行代码结尾。

结果

恭喜!你现在创建好了第一个 three.js 应用。很简单,但总得突破。

完整代码参考如下。琢磨一下并深刻理解其工作机理

<html>
 <head>
 <title>My first three.js app</title>
 <style>
  body { margin: 0; }
  canvas { width: 100%; height: 100% }
 </style>
 </head>
 <body>
 <script src="js/three.js"></script>
 <script>
  var scene = new THREE.Scene();
  var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );

  var renderer = new THREE.WebGLRenderer();
  renderer.setSize( window.innerWidth, window.innerHeight );
  document.body.appendChild( renderer.domElement );

  var geometry = new THREE.BoxGeometry( 1, 1, 1 );
  var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
  var cube = new THREE.Mesh( geometry, material );
  scene.add( cube );

  camera.position.z = 5;

  var animate = function () {
  requestAnimationFrame( animate );

  cube.rotation.x += 0.1;
  cube.rotation.y += 0.1;

  renderer.render(scene, camera);
  };

  animate();
 </script>
 </body>
</html>
Copier après la connexion

相关推荐:

three.js通过模块导入实例分享

three.js如何本地运行详解

实例讲解Three.js加载外部模型

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Explication détaillée de l'obtention des droits d'administrateur dans Win11 Explication détaillée de l'obtention des droits d'administrateur dans Win11 Mar 08, 2024 pm 03:06 PM

Le système d'exploitation Windows est l'un des systèmes d'exploitation les plus populaires au monde et sa nouvelle version Win11 a beaucoup attiré l'attention. Dans le système Win11, l'obtention des droits d'administrateur est une opération importante. Les droits d'administrateur permettent aux utilisateurs d'effectuer davantage d'opérations et de paramètres sur le système. Cet article présentera en détail comment obtenir les autorisations d'administrateur dans le système Win11 et comment gérer efficacement les autorisations. Dans le système Win11, les droits d'administrateur sont divisés en deux types : administrateur local et administrateur de domaine. Un administrateur local dispose de tous les droits d'administration sur l'ordinateur local

Explication détaillée du fonctionnement de la division dans Oracle SQL Explication détaillée du fonctionnement de la division dans Oracle SQL Mar 10, 2024 am 09:51 AM

Explication détaillée de l'opération de division dans OracleSQL Dans OracleSQL, l'opération de division est une opération mathématique courante et importante, utilisée pour calculer le résultat de la division de deux nombres. La division est souvent utilisée dans les requêtes de bases de données. Comprendre le fonctionnement de la division et son utilisation dans OracleSQL est donc l'une des compétences essentielles des développeurs de bases de données. Cet article discutera en détail des connaissances pertinentes sur les opérations de division dans OracleSQL et fournira des exemples de code spécifiques pour référence aux lecteurs. 1. Opération de division dans OracleSQL

Explication détaillée du rôle et de l'utilisation de l'opérateur modulo PHP Explication détaillée du rôle et de l'utilisation de l'opérateur modulo PHP Mar 19, 2024 pm 04:33 PM

L'opérateur modulo (%) en PHP est utilisé pour obtenir le reste de la division de deux nombres. Dans cet article, nous discuterons en détail du rôle et de l'utilisation de l'opérateur modulo et fournirons des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. 1. Le rôle de l'opérateur modulo En mathématiques, lorsqu'on divise un entier par un autre entier, on obtient un quotient et un reste. Par exemple, lorsque l’on divise 10 par 3, le quotient est 3 et le reste est 1. L'opérateur modulo est utilisé pour obtenir ce reste. 2. Utilisation de l'opérateur modulo En PHP, utilisez le symbole % pour représenter le module

Explication détaillée de la fonction d'appel système Linux system() Explication détaillée de la fonction d'appel système Linux system() Feb 22, 2024 pm 08:21 PM

Explication détaillée de la fonction d'appel système Linux system() L'appel système est une partie très importante du système d'exploitation Linux. Il fournit un moyen d'interagir avec le noyau système. Parmi elles, la fonction system() est l’une des fonctions d’appel système couramment utilisées. Cet article présentera en détail l’utilisation de la fonction system() et fournira des exemples de code correspondants. Concepts de base des appels système Les appels système sont un moyen permettant aux programmes utilisateur d'interagir avec le noyau du système d'exploitation. Les programmes utilisateur demandent au système d'exploitation en appelant des fonctions d'appel système

Explication détaillée de la commande Linux curl Explication détaillée de la commande Linux curl Feb 21, 2024 pm 10:33 PM

Explication détaillée de la commande curl de Linux Résumé : curl est un puissant outil de ligne de commande utilisé pour la communication de données avec le serveur. Cet article présentera l'utilisation de base de la commande curl et fournira des exemples de code réels pour aider les lecteurs à mieux comprendre et appliquer la commande. 1. Qu’est-ce que la boucle ? curl est un outil de ligne de commande utilisé pour envoyer et recevoir diverses requêtes réseau. Il prend en charge plusieurs protocoles, tels que HTTP, FTP, TELNET, etc., et fournit des fonctions riches, telles que le téléchargement de fichiers, le téléchargement de fichiers, la transmission de données, le proxy.

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Analyse détaillée du parcours d'apprentissage du langage C Analyse détaillée du parcours d'apprentissage du langage C Feb 18, 2024 am 10:38 AM

En tant que langage de programmation largement utilisé dans le domaine du développement de logiciels, le langage C est le premier choix de nombreux programmeurs débutants. L'apprentissage du langage C peut non seulement nous aider à acquérir des connaissances de base en programmation, mais également à améliorer nos capacités de résolution de problèmes et de réflexion. Cet article présentera en détail une feuille de route d'apprentissage du langage C pour aider les débutants à mieux planifier leur processus d'apprentissage. 1. Apprendre la grammaire de base Avant de commencer à apprendre le langage C, nous devons d'abord comprendre les règles de grammaire de base du langage C. Cela inclut les variables et les types de données, les opérateurs, les instructions de contrôle (telles que les instructions if,

En savoir plus sur Promise.resolve() En savoir plus sur Promise.resolve() Feb 18, 2024 pm 07:13 PM

Une explication détaillée de Promise.resolve() nécessite des exemples de code spécifiques. Promise est un mécanisme en JavaScript pour gérer les opérations asynchrones. Dans le développement réel, il est souvent nécessaire de traiter certaines tâches asynchrones qui doivent être exécutées dans l'ordre, et la méthode Promise.resolve() est utilisée pour renvoyer un objet Promise qui a été rempli. Promise.resolve() est une méthode statique de la classe Promise, qui accepte un

See all articles