Infographie 3D: modélisez votre monde

Explorez votre monde

Pour autant que je sache, nous ne pouvons pas simplement coller un peu de notre monde directement à l'intérieur d'un ordinateur (sans endommager l'ordinateur, de toute façon). Le mieux que nous puissions faire est de créer un modèle informatique de notre monde. Compte tenu de cette limitation, comment modéliser quelque chose comme une chaise, par exemple?

Les objets de notre monde ont des caractéristiques ou des propriétés, telles que la forme, la taille, le poids, la position, l'orientation et la couleur (et la liste s'allonge encore et encore). Considérons un instant uniquement leur forme, leur position et leur orientation - ces propriétés sont ce que nous appelons des propriétés spatiales . Et commençons par quelque chose de plus facile à travailler qu'une chaise - un cube, par exemple.

Jetez un œil à l'illustration de la figure 1. Elle montre un cube assis dans une pièce autrement vide. (Bon d'accord, la pièce a aussi une porte, mais c'est là seulement pour que la pièce ressemble plus à une pièce.)

Figure 1: Une pièce avec un cube

Afin de spécifier la forme, la position et l'orientation d'un cube, nous devons spécifier l'emplacement de chacun de ses coins. Pour ce faire, nous pourrions utiliser un langage comme celui-ci:

Le premier coin est à un pied (ou mètre, si vous préférez) au-dessus du sol et à deux pieds et demi (ou mètres) du mur derrière moi. Le deuxième coin est également un pied au-dessus du sol et un pied du mur à ma gauche.

Notez que les deux coins ont été spécifiés par rapport à autre chose (le mur et / ou le sol). Dans notre modèle informatique, nous pourrions définir un sol et un mur et les utiliser comme points de référence, mais il s'avère beaucoup plus facile de simplement sélectionner un point de référence (que nous appellerons l' origine ) et de l'utiliser à la place. Pour notre origine, nous utiliserons le coin formé par les deux murs et le sol. La figure 2 indique l'emplacement de notre origine.

Figure 2: L'origine et l'axe des coordonnées

Nous devons maintenant indiquer où se trouve chaque coin par rapport à l'origine. Vous pouvez spécifier le chemin entre l'origine et un coin du cube de plusieurs manières. Pour simplifier, il faut s'entendre sur une norme. Faisons ce qui suit:

Imaginez que chacun des bords formés par l'intersection d'un mur et d'un mur, ou d'un mur et du sol, reçoive un nom - nous les appellerons l' axe x , l' axe y et l' axe z , comme indiqué dans la figure 2. Et convenons également dès le départ que nous déterminerons l'emplacement d'un coin en suivant cette recette:

  • Tout d'abord, mesurez la distance à parcourir depuis l'origine en ligne droite parallèle à l'axe x
  • Ensuite, mesurez la distance à parcourir à partir de ce point en ligne droite parallèle à l'axe y
  • Enfin, mesurez la distance à parcourir à partir de ce point sur une ligne droite parallèle à l'axe z

La figure 3 montre le chemin que nous suivrions pour atteindre l'un des coins du cube.

Figure 3: Trouver votre chemin

En tant que notation abrégée, écrivons toutes ces distances comme suit:

  • La distance de l'origine parallèle à l'axe x
  • La distance de l'origine parallèle à l'axe y
  • La distance de l'origine parallèle à l'axe z

ou (encore plus court):

(distance x, distance y, distance z) 

Ce triplet de valeurs est appelé les coordonnées du coin . Nous pouvons spécifier la position dans l'espace de chaque coin de manière similaire. Nous pourrions trouver, par exemple, que le cube est cet exemple a des coins à:

(3 feet, 1 foot, 2 feet)

ou

(3 feet, 1 foot, 3 feet)

ou

(4 feet, 1 foot, 2 feet)

etc.

Les unités de mesure (pieds ou mètres, par exemple) ne sont pas importantes pour nos besoins. Ce qui est important, c'est la façon dont les unités correspondent à l'unité standard de la surface de l'écran - le pixel. Je parlerai plus en détail de cette cartographie un peu plus tard.

Être un peu énervé

L'emplacement des coins du cube détermine la position et l'orientation du cube. Cependant, étant donné uniquement les coordonnées de ses coins, nous ne pouvons pas reconstruire un cube (encore moins une chaise). Nous avons vraiment besoin de savoir où se trouvent les bords, car les bords déterminent la forme.

Tous les bords ont une très belle caractéristique - ils commencent et se terminent toujours aux coins. Donc, si nous savons où sont tous les bords, nous saurons certainement où sont tous les coins.

Nous allons maintenant faire une grande hypothèse simplificatrice. Dans notre modèle du monde, nous allons interdire les bords courbes (vous apprendrez pourquoi plus tard); les bords doivent toujours être des lignes droites. Pour approcher les bords courbes, nous allons poser des bords droits bout à bout, comme dans la figure 4.

Figure 4: L'approximation en ligne droite d'une courbe

Les arêtes ne deviennent alors que de simples segments de ligne. Et les segments de ligne sont spécifiés par les coordonnées de leurs points de début et de fin. Par conséquent, le modèle d'un objet n'est rien de plus qu'une collection de segments de ligne qui décrivent sa forme.

Visualisation: ce n'est plus seulement pour la relaxation

Maintenant que nous savons modéliser un objet, nous sommes prêts à nous attaquer au problème de la représentation d'un modèle sur l'écran de l'ordinateur.

Considérez l'écran de l'ordinateur comme une fenêtre sur notre monde virtuel. Nous nous asseyons d'un côté de la fenêtre et le monde virtuel se trouve de l'autre. La figure 5 illustre ce concept.

Figure 5: Notre fenêtre sur le monde virtuel

Il existe de nombreuses façons de mettre les informations du modèle sur la fenêtre (ou sur l'écran de l'ordinateur). Le plus simple est peut-être ce qu'on appelle une projection isométrique .

Comme notre modèle a trois dimensions et que l'écran de l'ordinateur n'en a que deux, nous pouvons mapper le modèle sur l'écran en supprimant d'abord la coordonnée z (la troisième des trois coordonnées) de chaque point du modèle. Cela nous laisse avec les coordonnées x et y pour chaque point. Les coordonnées x et y sont mises à l'échelle de manière appropriée (en fonction des unités du modèle) et mises en correspondance avec les pixels de l'écran. Nous pouvons utiliser ces étapes sur n'importe quel point d'intérêt du modèle pour savoir où il apparaîtrait à l'écran.

Il s'avère qu'il n'est pas nécessaire de transformer chaque point de notre modèle de cette manière. L'une des conséquences de l'approximation de chaque arête du modèle avec des segments de ligne est que nous n'avons vraiment besoin que de transformer les extrémités d'un segment de ligne, pas tous les points du segment de ligne. Cela est vrai parce que de simples projections (comme une projection isométrique) transforment toujours les segments de ligne en segments de ligne - les segments de ligne ne deviennent pas des courbes. Par conséquent, une fois que vous connaissez les positions des points d'extrémité transformés, nous pouvons utiliser les routines de dessin de ligne intégrées de l'AWT pour dessiner le segment de ligne lui-même.

Je pense qu'un exemple pourrait être en ordre. Je vais créer trois modèles simples de la même forme dans des orientations différentes.

Le tableau 1 contient les données décrivant une forme simple dans sa première position. Chaque ligne du tableau correspond à une arête. Le tableau donne les coordonnées des points de début et de fin de l'arête. Supposons que nous regardions la forme de l'extérieur le long de l'axe z.

Segment Commencer Fin
X y z X y z
UNE 25 0 -70 25 35 -35
B 25 35 -35 25 0 0
C 25 0 0 25 -35 -35
25 -35 -35 25 0 -70
E 25 0 -70 -25 0 -70
F -25 0 -70 -25 35 -35
g -25 35 -35 -25 0 0
H -25 0 0 -25 -35 -35
je -25 -35 -35 -25 0 -70
Tableau 1: Données pour une forme simple - première position

L'applet de la figure 6 montre ce que nous verrions.

Vous avez besoin d'un navigateur compatible Java pour voir cette applet. Figure 6: Une forme simple - première position

Maintenant, tournons la forme de quelques degrés. Le tableau 2 contient les données décrivant la même forme dans sa deuxième position. Notez que seules la position et l'orientation ont changé, pas la forme.

Segment Commencer Fin
X y z X y z
UNE 45 0 -58 34 35 -25
B 34 35 -25 23 0 sept
C 23 0 sept 34 -35 -25
34 -35 -25 45 0 -58
E 45 0 -58 -2 0 -74
F -2 0 -74 -12 35 -41
g -12 35 -41 -23 0 -sept
H -23 0 -sept -12 -35 -41
je -12 -35 -41 -2 0 -74
Tableau 2: Données pour une forme simple - deuxième position

L'applet de la figure 7 montre ce que nous verrions.

Vous avez besoin d'un navigateur compatible Java pour voir cette applet. Figure 7: Une forme simple - deuxième position

Trois est un charme, alors tournons-le une fois de plus - cette fois vers le haut de quelques degrés. Le tableau 3 contient les données décrivant la forme dans sa troisième position.

Segment Commencer Fin
X y z X y z
UNE 45 -26 -52 34 19 -38
B 34 19 -38 23 3 6
C 23 3 6 34 -42 -6
34 -42 -6 45 -26 -52
E 45 -26 -52 -2 -33 -66
F -2 -33 -66 -12 12 -52
g -12 12 -52 -23 -3 -6
H -23 -3 -6 -12 -49 -20
je -12 -49 -20 -2 -33 -66
Tableau 3: Données pour une forme simple - troisième position

L'applet de la figure 8 montre ce que nous verrions.

Vous avez besoin d'un navigateur compatible Java pour voir cette applet. Figure 8: Une forme simple - troisième position

Emballer

À présent, vous êtes probablement arrivé à la conclusion que changer l'orientation d'un objet à la main n'est pas très amusant. Et le résultat n'est pas non plus très interactif. Le mois prochain, je vais vous montrer comment manipuler des objets de manière interactive (et nous ferons en sorte que l'ordinateur fasse tout le calcul des nombres - après tout, n'est-ce pas le type d'ordinateurs de travail censés être bons?). Nous allons également nous pencher sur le problème de la perspective - en particulier, je vais vous montrer comment l'intégrer dans les vues de notre modèle.

Todd Sundsted a écrit des programmes depuis que les ordinateurs sont devenus disponibles dans les modèles de bureau. Bien qu'à l'origine intéressé par la création d'applications d'objets distribués en C ++, Todd est passé au langage de programmation Java lorsque Java est devenu le choix évident pour ce genre de choses. Todd est co-auteur de l'API Java Language SuperBible, maintenant en librairie partout. En plus d'écrire, Todd est président d'Etcee, fournissant une formation, un mentorat et des conseils centrés sur Java.

En savoir plus sur ce sujet

  • Pour un peu de tout ce qui concerne les graphiques 3D, voir:

    //www.3dsite.com/3dsite/

  • Yahoo offre un moyen pratique de commencer votre recherche de sujets graphiques 3D

    //www.yahoo.com/Computers_and_Internet/Graphics/3D/

  • Vous pouvez télécharger cet article, le code source et les fichiers de classe sous forme de fichier tar gzippé:

    /javaworld/jw-05-1997/howto/jw-05-howto.tar.gz

  • Articles précédents sur les procédures Java
  • "Quand les images statiques ne font tout simplement pas la coupe" - Apprenez à pimenter vos applets et applications

    avec des images animées.

  • "Comment Java utilise le modèle producteur / consommateur pour gérer les images - Un regard d'initié" - Apprenez-en plus sur la puissante technique de gestion d'images de Java, puis suivez mes procédures simples pour créer vos propres composants producteurs et consommateurs.
  • «Découvrez comment les applets chargent les images réseau de manière asynchrone» - Voici un aperçu détaillé de la manière dont les applets Java gèrent les images dans un environnement réseau.
  • «Dessiner du texte est facile avec trois classes Java» - Découvrez comment créer un texte visuellement attrayant grâce à cette explication des classes à utiliser et de la manière dont elles fonctionnent ensemble.
  • "Examen de HotSpot, un programme de dessin orienté objet" - Apprenez comment les éléments du langage Java et de la bibliothèque de classes s'emboîtent grâce à une étude de ce Java. programme
  • "Utilisation de la classe Graphics" - Un regard attentif sur la classe Graphics et les primitives de dessin qu'elle fournit, et une démonstration de son utilisation.
  • "Observer and Observable" - Une introduction à l'interface Observer et à la classe Observable utilisant l'architecture Model / View / Controller comme guide.
  • "L'interface utilisateur efficace" - Une introduction à l'interface Observer et à la classe Observable en utilisant l'architecture Model / View / Controller comme guide.
  • "Java et gestion des événements" - Comment les événements sont transmis aux composants de l'interface utilisateur, comment créer des gestionnaires d'événements, etc.
  • "Introduction à l'AWT" - Une description de la boîte à outils de l'interface utilisateur de Java.

Cette histoire, "Infographie 3D: modélisez votre monde" a été initialement publiée par JavaWorld.