Introduction à Java - 3D

Introduction à Java # 32; 3D

T HE Java # 32; API 3D est une interface de programmation d'application utilisée pour l'écriture en trois dimensions des applications et des applets graphiques. Il donne aux développeurs des constructions de haut niveau pour la création et la manipulation de la géométrie 3D et pour la construction des structures utilisées pour rendre cette géométrie. Les développeurs d'applications peuvent décrire très grands mondes virtuels à l'aide de ces constructions, qui fournissent Java # 32; en 3D avec suffisamment d'informations pour rendre ces mondes efficacement.







Java # 32; 3D offre l'avantage « écrire une fois, exécuter partout » Java pour les développeurs d'applications graphiques 3D. Java # 32; 3D fait partie de la suite d'API JavaMedia, le rendant disponible sur une large gamme de plates-formes. Il intègre aussi bien avec Internet parce que les applications et les applets écrites en utilisant Java # 32; API 3D ont accès à l'ensemble des classes Java.

Java # 32; API 3D puise ses idées à partir des API graphiques existantes et de nouvelles technologies. Java # 32; les constructions graphiques de bas niveau de 3D synthétisent les meilleures idées trouvées dans les API de bas niveau tels que Direct3D, OpenGL, QuickDraw3D et XGL. De même, ses constructions de niveau supérieur synthétisent les meilleures idées trouvées dans plusieurs systèmes à base de graphes scène. Java # 32; 3D présente quelques concepts ne font pas partie communément considéré de l'environnement graphique, tels que le son spatial 3D. Java # 32; capacités de son de 3D aident à offrir une expérience plus immersive pour l'utilisateur.

Autre importante Java # 32; objectifs 3D sont

  • Fournir un ensemble riche de fonctionnalités pour la création d'intéressantes mondes 3D, tempérée par la nécessité d'éviter les caractéristiques non essentielles ou obscures. Les caractéristiques qui pourraient être en couches sur le dessus de Java # 32; 3D n'ont pas été inclus.
  • Fournir un paradigme de programmation orienté objet de haut niveau qui permet aux développeurs de déployer des applications sophistiquées et des applets rapidement.
  • Fournir un soutien pour les chargeurs d'exécution. Cela permet à Java # 32; en 3D pour accueillir une grande variété de formats de fichiers, tels que les formats de CAO spécifiques au fournisseur, des formats d'échange, VRML 1.0 et VRML 2.0.

    1.2 Programmation paradigme

    Java # 32; 3D est une API orientée objet. Applications construire des éléments graphiques individuels comme des objets distincts et les relier entre eux dans une structure arborescente appelé un graphe de scène. L'application manipule ces objets à l'aide de leur accesseur prédéfini, mutateur, et des procédés de noeuds de réticulation.

    1.2.1 Le graphe de scène modèle de programmation

    Java # 32; modèle de programmation basé sur le graphique scène 3D fournit un mécanisme simple et flexible pour représenter et le rendu de scènes. Le graphique de la scène contient une description complète de l'ensemble de la scène, ou l'univers virtuel. Cela inclut les données géométriques, les informations d'attributs, et les informations nécessaires pour la visualisation de rendre la scène d'un point de vue particulier. Chapitre # 32; 2, "Scene Graph Principes de base" fournit plus d'informations sur Java # 32; modèle de programmation graphique de la scène 3D.

    Java # 32; API 3D améliore les API graphiques précédentes en éliminant bon nombre des tâches de comptabilité et de programmation que ces API imposent. Java # 32; 3D permet au programmeur de penser à des objets géométriques plutôt que sur les triangles de la scène et sa composition plutôt que sur la façon d'écrire le code de rendu pour l'affichage de manière efficace la scène.

    1.2.2 Modes de rendu

    Java # 32; 3D comprend trois modes de rendu différents: mode immédiat, le mode retenu et le mode compilé conservé (voir le chapitre # 32; 12, "Exécution et modèle de rendu"). Chaque mode de rendu successif permet Java # 32; 3D une plus grande liberté dans l'optimisation de l'exécution d'une application. La plupart Java # 32; applications 3D veulent profiter des avantages de commodité et de performance que les modes retenus et conservés compilés fournissent.

    1.2.2.1 Mode immédiat

    Mode immédiat laisse peu de place pour l'optimisation globale au niveau du graphe de scène. Même si, Java # 32; 3D a augmenté le niveau d'abstraction et accélère le rendu en mode immédiat sur une base par objet. Une application doit fournir un Java # 32; Procédé d'étirage 3D avec un ensemble complet de points, lignes, ou des triangles, qui sont ensuite rendu par le Java à grande vitesse # 32; 3D renderer. Bien sûr, l'application peut construire ces listes de points, des lignes ou des triangles de quelque manière qu'il choisit.

    1.2.2.2 mode non distribués

    1.2.2.3 mode Compilé-Bénéfices non

    1.2.3 Extensibilité

    Java # 32; 3D fournit des crochets pour le mélange Java # 32; graphique scène contrôlée rendu 3D et le rendu contrôlé par l'utilisateur en utilisant Java # 32; mode immédiat 3D construit (voir la section # 32; 13.1.2, "Rendu en mode mixte"). Sinon, l'application peut arrêter Java # 32; en 3D et de renderer faire tout son dessin en mode immédiat (voir la section # 32; 13.1.1, "pur Rendu immédiat en mode").

    Nécessitent des applications Behaviors d'étendre l'objet du comportement et de passer outre ses méthodes avec le code Java écrit par l'utilisateur. Ces objets étendus doivent contenir des références à ces objets graphiques de la scène qu'ils manipuleront au moment de l'exécution. Chapitre # 32; 9, "Comportements et Interpolateurs," décrit Java # 32; modèle de comportement 3D.

    1.3 haute performance

    De plus, en laissant les détails de rendre à Java # 32; 3D permet de régler le rendu au matériel sous-jacent. Par exemple, relaxant l'ordre strict de rendu imposées par d'autres API permet traversal parallèle ainsi que le rendu parallèle. Savoir quelles parties du graphe de scène ne peuvent pas être modifiés lors de l'exécution Java permet # 32; 3D pour aplatir l'arbre, la géométrie prétransformation ou représentent la géométrie dans un format matériel natif, sans la nécessité de conserver les données originales.







    1.3.1 Mise en oeuvre en couches

    En plus des optimisations au niveau graphique de la scène, l'un des facteurs les plus importants qui détermine les performances de Java # 32; 3D est le temps qu'il faut pour rendre la géométrie visible. Java # 32; implémentations 3D sont en couches pour tirer profit de l'indigène, API de bas niveau qui est disponible sur un système donné. En particulier, nous prévoyons que Java # 32; implémentations 3D qui utilisent Direct3D, OpenGL, et QuickDraw3D deviendront disponibles. Cela signifie que Java # 32; le rendu 3D sera accéléré dans la même gamme de systèmes qui sont pris en charge par ces API de niveau inférieur.

    1.3.2 Plates-formes matérielles cibles

    Java # 32; 3D est destiné à un large éventail de plates-formes matérielles et logicielles 3D compatibles, des cartes de jeu PC à faible coût et équarrisseurs de logiciels au bas, à travers les postes de travail de milieu de gamme, tout le chemin jusqu'à très haute performance spécialisée image 3D générateurs.

    Java # 32; implémentations 3D devraient fournir des taux de rendu utile sur la plupart des PC modernes, en particulier ceux qui ont des cartes d'accélérateur graphique 3D. Sur les postes de travail de milieu de gamme, Java # 32; 3D devrait fournir des applications avec presque les performances matérielles pleine vitesse.

    Enfin, Java # 32; 3D est conçu à l'échelle comme les plates-formes matérielles sous-jacentes augmentation de la vitesse au fil du temps. Les accélérateurs de jeu 3D PC de demain soutiendront les mondes virtuels plus complexes que les stations de travail haut prix d'il y a quelques années. Java # 32; 3D est prêt à répondre à cette augmentation de la performance du matériel.

    1.4 Prise en charge des applications de construction et Applets

    Java # 32; 3D prévoit ni ne prend directement en charge tous les besoins possibles en 3D. Au contraire, il prend en charge l'ajout de ces fonctionnalités par le biais du code Java.

    De même, les chargeurs VRML vont analyser et traduire les fichiers VRML et générer le Java approprié # 32; objets 3D et le code Java nécessaires pour soutenir le contenu du fichier.

    1.4.1 Browsers

    Les navigateurs Internet actuels prennent en charge le contenu 3D en passant ces données plug-in téléspectateurs 3D qui rendent dans leur propre fenêtre. Il est prévu que, au fil du temps, l'affichage du contenu 3D deviendra intégré dans l'écran principal du navigateur. En fait, certains des navigateurs 3D d'aujourd'hui afficher le contenu 2D comme des objets 2D dans un monde 3D.

    Jeux 1.4.2

    Les développeurs de logiciels de jeux 3D ont généralement tenté de essorez chaque dernière once de la performance du matériel. Historiquement, ils ont été tout à fait prêts à utiliser des optimisations spécifiques au matériel, nonportable pour obtenir les meilleures performances possibles. En tant que tel, dans le passé, les développeurs de jeux ont tendance à programmer au-dessous du niveau de logiciel facile à utiliser tels que Java # 32; 3D. Cependant, la tendance dans les jeux 3D aujourd'hui est de tirer parti à usage général des accélérateurs matériels 3D et d'utiliser moins de « trucs » dans le rendu.

    1.5 Vue d'ensemble de Java # 32; Hiérarchie d'objets 3D

    Java # 32; 3D définit plusieurs classes de base qui sont utilisées pour construire et manipuler un graphe de scène et de contrôler l'affichage et le rendu. Figure # 32; 1-1 montre la hiérarchie globale de l'objet utilisé par Java # 32; 3D. Les chapitres suivants fournissent plus de détails pour des portions spécifiques de la hiérarchie.

    1.6 Structurer Java # 32; Programme 3D

    Cette section illustre comment un développeur peut structurer un Java # 32; application 3D. La simple application dans cet exemple crée un graphique de scène qui dessine un objet au milieu d'une fenêtre et fait pivoter l'objet autour de son point central.

    1.6.1 Java # 32; Scène application graphique 3D

    Le graphe de scène pour l'exemple d'application est représenté sur la Figure # 32; 1-2.

    Le graphe de scène est constitué de composants à une superstructure objet VirtualUniverse et un objet et Locale un ensemble de graphes de branche. Chaque point de branchement est un sous-graphe qui est ancrée par un noeud de BranchGroup qui est fixé à la superstructure. Pour plus d'informations, voir le chapitre # 32; 2, "Scene Graph de base."

    Un objet VirtualUniverse définit un univers nommé. Java # 32; 3D permet la création de plus d'un univers, bien que la grande majorité des applications utiliseront un seul. L'objet VirtualUniverse offre une formation pour les graphes de scène. tous Java # 32; graphiques de la scène 3D doivent se connecter à un objet VirtualUniverse à afficher. Pour plus d'informations, voir le chapitre # 32; 3, "Scene Graph Superstructure."

    Le graphique de la scène elle-même commence par les noeuds de BranchGroup (voir la section # 32; 4.2, "BranchGroup Node"). Un BranchGroup sert de la racine d'un sous-graphe, appelé un graphique de branche. du graphe de scène. Seuls les objets de BranchGroup peuvent attacher à des objets Locale.

    Dans cet exemple, il y a deux graphiques de branche et, par conséquent, deux nœuds de BranchGroup. Rattaché à la BranchGroup gauche sont deux sous-graphes. Un sous-graphe est composé d'un nœud de feuille de comportement étendu par l'utilisateur. Le noeud de comportement contient du code Java pour manipuler la matrice de transformation associée à la géométrie de l'objet.

    L'autre sous-graphe dans ce BranchGroup se compose d'un noeud de TransformGroup qui spécifie la position (par rapport à l'environnement local), l'orientation et l'échelle des objets géométriques dans l'univers virtuel. Un enfant unique, un noeud feuille Shape3D, se réfère à deux objets composants: un objet géométrique et un objet Aspect. L'objet de la géométrie décrit la forme géométrique d'un objet 3D (un cube dans notre exemple simple). L'objet Aspect décrit l'aspect de la géométrie (couleur, texture, des caractéristiques de réflexion importants, et ainsi de suite).

    Le droit BranchGroup a un seul sous-graphe qui se compose d'un noeud de TransformGroup et un noeud de feuille d'ViewPlatform. Le TransformGroup spécifie la position (par rapport à l'environnement local), l'orientation, et l'ampleur de la ViewPlatform. Cet objet transformé ViewPlatform définit le point de vue de l'utilisateur final dans l'univers virtuel.

    Enfin, le ViewPlatform est référencé par un objet View qui spécifie tous les paramètres nécessaires pour rendre la scène du point de vue de la ViewPlatform. Également référencé par l'objet View sont d'autres objets qui contiennent des informations, comme la toile de dessin dans lequel Java # 32; 3D rend, l'écran qui contient la toile, et des informations sur l'environnement physique.

    1.6.2 Recette pour Java # 32; Programme 3D

    Les étapes suivantes sont prises par le programme d'exemple pour créer les éléments graphiques de la scène et les relier entre eux. Java # 32; 3D alors rendre le graphe de scène et afficher les graphiques dans une fenêtre sur l'écran:

      1. Créez un objet Canvas3D et l'ajouter au panneau Applet.

    2. Créez un BranchGroup comme la racine du graphe de la branche de la scène.

    3. Construction d'un noeud à un noeud Shape3D TransformGroup dessus.

    4. Fixer un comportement RotationInterpolator au TransformGroup.

    5. Appelez la fonction utilitaire de constructeur de l'univers pour faire ce qui suit:

      une. Mettre en place un univers virtuel avec une seule haute résolution Locale (voir le chapitre # 32; 2, "Scene Graph de base").

    b. Créez le PhysicalBody, PhysicalEnvironment, Affichage et objets ViewPlat-forme.

    c. Créer un BranchGroup comme la racine de la vue graphique de la branche de la plate-forme.

    ré. Insérez le graphique de la branche de la plate-forme de vue dans l'environnement local.

6. Insérez le graphique de la branche de la scène dans l'environnement local du constructeur de l'univers.

Java # 32; 3D commence alors à fonctionner renderer dans une boucle infinie. Le rendu conceptuellement effectue les opérations suivantes:

1.6.3 HelloUniverse: A Java Sample # 32; Programme 3D

Voici les fragments de code d'un programme simple, HelloUniverse.java. qui crée un cube et un objet de comportement RotationInterpolator qui fait tourner le cube à une vitesse constante de / 2 radians par seconde.

1.6.3.1 HelloUniverse classe

La classe HelloUniverse, à la page suivante, crée le graphique de la branche qui comprend le cube et le comportement RotationInterpolator. Il ajoute ensuite ce graphique de la branche à l'objet Locale généré par l'utilitaire UniverseBuilder.

1.6.3.2 UniverseBuilder classe

La classe UniverseBuilder établit et Java initialise # 32; univers virtuel 3D, Locale, et des objets de visualisation, et construit la vue graphique de la branche de la plate-forme. Le code exemple ci-dessous est une version simplifiée du UniverseBuilder qui sera fourni dans le cadre de Java # 32; emballage d'utilité 3D.

1.6.3.3 ColorCube classe

La classe ColorCube crée un nœud Shape3D qui contient la géométrie pour un non éclairée, le cube de couleur.

API Java 3D Spécification







Articles Liés