II.4. Etude comparatif des
bibliothèques
Cette étude a pour but de comparer les trois outils de
développement que nous avons choisi tout d'abord en présentant
leurs avantages et inconvénients (possibilités/limites,
facilité d'utilisation, portabilité, ...).
Avantages/Inconvénients
1. Possibilités Techniques
La première différence entre ses outils est :
Java3D se situe à un niveau supérieur à OpenGL et
Direct3D, utilisant d'ailleurs ces deux API pour son implémentation.
ü OpenGL / Direct3
Partant de l'historique OpenGL et DirectX se sont
développées en parallèle, les innovations des uns
étant rapidement suivi d'une réponse du concurrent. Aujourd'hui,
les différences de possibilités sont minimes entre les deux API;
les dernières versions (DirectX12, et OpenGL 1.5) prennent en compte
toutes les fonctionnalités classiques des moteurs 3D.
Au niveau des lumières et ombres avec calcul
automatique des normales, différents effets de brouillard,
possibilité d'utiliser des buffers spécialisés pour
gérer les effets de réflexion et de motion blur, et aussi
possibilités d'éclairage dynamique des textures par vertex ou
pixel shader.
Au niveau des textures, possibilités de textures 2D et
3D, mipmapping, transparence de textures et multi-texturing. Les deux API
permettent également l'utilisation de structures de données
facilitant l'accès aux modèles3D (vertexarray); OpenGL fournit
également des DisplayList hiérarchiques pouvant contenir la
plupart des commandes de changement d'état et de primitives graphiques
tandis que Direct3D fonctionne avec des buffers de sommets (vertex buffers)
non-hiérarchiques pour avoir un cache mémoire de
géométrie et des blocs d'états (state blocks) pour avoir
un cache de changements d'état.
Les deux normes facilitent également les optimisations,
avec l'implémentation du Zbuffer (qui cependant en DirectX n'est pas
indépendante du matériel) et l'utilisation possible de cullface.
Enfin Direct3D, contrairement à OpenGL, ne fournit pas de
mécanisme de gestion des courbes et surfaces paramétriques
(NUR
BS).
ü Java3D
La programmation avec Java3D est bien différente de
celle avec OpenGL et DirectX. En effet, ces derniers proposent une
implémentation de plus bas niveau qui permettent aux développeurs
de gérer le moindre pixel de leurs moteurs alors que Java3D
possède des fonctions de plus haut niveau, certes plus faciles
d'utilisation mais aussi plus limitées. Il est ainsi très
difficile par exemple d'implémenter des optimisations ou des effets
comme le pixel shader en Java3D.
L'avantage de ces fonctions de haut niveau est que le
développement d'applications est beaucoup plus facile. Par exemple il
existe dans les package de Java3D des fonctions permettant de détecter
si deux objets sont en collision, ce qui n'est pas le cas avec OpenGL ou
DirectX ou l'on doit tout faire « à la main », ce qui dans ce
cas est loin d'être évident.
De plus, Java3D existe dans deux versions, une OpenGL et une
DirectX, l'utilisateur peut donc choisir d'utiliser son programme avec l'un ou
l'autre des moteurs de rendu. Quand vous utilisez une version OpenGL de Java
3D, certaines fonctionnalités de l'API font appel à des
méthodes natives de la DLL Java 3D/OpenGL. Ces méthodes elles,
utilisent des fonctions de la DLL OpenGL du système qui utilise
l'accélérateur graphique disponible sur la carte graphique. Pour
terminer sur les caractéristiques techniques de Java3D, il est important
de préciser que cette librairie peut tout à fait utiliser toutes
les fonctionnalités du langage Java, ainsi il peut être
très utile d'utiliser les packages AWT ou SWING pour l'interface
graphique ou encore le package IO pour les entrées/sorties. A noter
également que Java3D utilise un package VECMATH pour le calcul vectoriel
et matriciel très utilisé dans les moteurs 3D.
|