# Applications > Dveloppement 2D, 3D et Jeux > Moteurs 3D >  Choix Java3d ou OpenGL - Cas avec des millions de triangles

## Siju Wu

Salut, 
Je suis un tudiant d'cole centrale de nantes. Ce semestre je vais commencer  faire un projet sur la maquette numrique du muse du chteau des ducs de bretagne. Le but de ce projet c'est de construire une maquette numrique pour permettre  une personne de faire une navigation dans cette maquette. 
Maintenant on a dj la maquette numrique mais elle est compos de dizaine de millions de triangles... donc on doit utiliser un algorithme pour diminuer le nombre de triangles de maillage. On a dj quelques algorithmes mais il est difficile  utiliser pour des personnes sans connaissances informatique. Ces algorithmes ne sont pas parfait. Donc on veut raliser une interface pour permettre  l'utilisateur d'utiliser l'algorithme pour traiter la maquette plus facilement. 
On doit choisir entre java3d ou OpenGL pour faire l'affichage de la maquette. J'ai cherch des informations sur l'internet, il me semble que Java3d soit plus facile  maitriser, mais je ne sais pas si la vitesse de traitement de java3d est rapide ou non? 
Puisque la quantit de triangles de la maquette est grosse, donc si la vitesse est trop lent a va tre une catastrophe pour nous. 
Est-ce que quelqu'un sait quelle API est plus rapide, java3d ou OpenGL? 

Merci beaucoup!

----------


## pyros

Salut,

Tu parles d'OpenGL en C ou de JOGL (OpenGL java) ?

Dans l'absolue, plus une API est bas niveaux, plus elle est rapide (moins de couches  travers),  condition de l'utiliser correctement. Mais les perfs restent quand mme dans le mme ordre de grandeur.
Cependant la perte de performance est gnralement ngligeable devant le gain obtenu par la facilit de dveloppement. D'autant plus qu'il s'agit d'un projet scolaire. Mieux vaut un truc fonctionnel qui rame un peu, plutt qu'un truc rapide, bugg o il manque les 3/4 des features.

Je pense que ce thread devrait tintresser.

Pour ma part, je prendrai java3D. Si tu ne connait pas openGL, tu vas passer un temps fou  apprendre  l'utiliser, pour au final l'utiliser d'une manire loin d'tre optimal.

----------


## bafman

lavantage de l'openGL est que tu trouvera beaucoup (beaucoup) plus de ressources sur internet. Aprs, l'affichage de millions de triangles, mme sur une carte graphique moderne, a reste relativement inadapt. regarde du cot du bump (parallax) mapping, tu doit pouvoir trouver des outils qui te permettent de reduire la quantit de triangles tout en te gnrant les normal/height map ncessaires  l'affichage.

----------


## LittleWhite

Bonjour,

En terme de performances, je pense que les deux sont quivalents. Malheureusement, je ne connais pas Java3D, mais pour peu qu'il soit acclrer par le matriel tout ira bien.

Aprs, c'est le nombres de triangles qui m'inquite. Notamment, une dizaine de millions de triangles. Le choix de la bibliothque sera ngligeable (soit prendre la meilleur) car l, o il faudra travailler, c'est les optimisations sur l'affichage des triangles.
Plus prcisment, sur les 10 millions de triangle, seulement 100 000 triangles seront utiles. Donc, je pense qu'il faut se pencher sur les algos de frustrum culling, les arbres quad tree / octree.

En conclusion, prenez la bibliothque que vous prfrez (la plus facile donc), et aprs, dans tout les cas, vous allez devoir travailler sur les algorithmes d'optimisations.

----------


## Siju Wu

> Salut,
> 
> Tu parles d'OpenGL en C ou de JOGL (OpenGL java) ?
> 
> Dans l'absolue, plus une API est bas niveaux, plus elle est rapide (moins de couches  travers),  condition de l'utiliser correctement. Mais les perfs restent quand mme dans le mme ordre de grandeur.
> Cependant la perte de performance est gnralement ngligeable devant le gain obtenu par la facilit de dveloppement. D'autant plus qu'il s'agit d'un projet scolaire. Mieux vaut un truc fonctionnel qui rame un peu, plutt qu'un truc rapide, bugg o il manque les 3/4 des features.
> 
> Je pense que ce thread devrait tintresser.
> 
> Pour ma part, je prendrai java3D. Si tu ne connait pas openGL, tu vas passer un temps fou  apprendre  l'utiliser, pour au final l'utiliser d'une manire loin d'tre optimal.


Merci  ta rponse. je parle de JOPL puisque nous devons utiliser java  programmer. oui j'ai dj vu la discussion que tu me donne hier, mais la diffrence de vitesse de traitement n'est-ce pas mentione. mon camarade me dit il faut vrifier si java3d peut afficher 500 000 triangles en mme temps. est-ce que a marche?




> Bonjour,
> 
> Plus prcisment, sur les 10 millions de triangle, seulement 100 000 triangles seront utiles. Donc, je pense qu'il faut se pencher sur les algos de frustrum culling, les arbres quad tree / octree.
> 
> En conclusion, prenez la bibliothque que vous prfrez (la plus facile donc), et aprs, dans tout les cas, vous allez devoir travailler sur les algorithmes d'optimisations.


merci  ta rponse. je ne comprends pas bien les algos de frustrum culling, c'est--dire quoi? en fait nous avons dj l'algorithme pour simplifier la maquette, pour rduire le nombre de triangles. mais dans l'interface qu'on va dvelopper, il faut d'abord importer la maquette et puis la simplifier en utilisant l'algorithme existant.

----------


## bafman

en fait, il faut savoir si tu doit voir la maquette en entier ou si tu dplace la camera dedans en aillant qu'une partie de la maquette visible  un instant donn. 

si tu voit toute la maquette, les algo de culling risquent de na pas apporter grand chose. Au contraire, il vont ralentir le rendu et rendre le code plus complexe. par contre, si tu dplace la camera dans la maquette, alors la, il peuvent fortement rduire le nombre de polygone  afficher.

Concernant le choix de l'API  utiliser, personnellement, de conseil JOGL qui te permettra des acces plus bas niveau, donc un potentiel de performance suprieur  Java3D.

----------


## Elendhil

Le meilleur moteur 3D entirement en java c'est ici :

Ardor3d

C'est un fork de Jmonkey engine ralis par son principal contributeur. Il est disponible pour desktop mais aussi sur android. Tu trouveras pas mieux actuellement sur le march , il s'appuie sur LWJGL et je crois que l'on peut aussi utiliser JOGL.

Java3D est pas prvu pour faire de grande chose en 3D c'est plus pour afficher quelques modles dans une application.

----------


## sachem

> Le meilleur moteur 3D entirement en java c'est ici :
> 
> Ardor3d


Ardor3d n'volue plus depuis presque un an...

----------


## GPPro

Ils viennent de sortir une release.

----------


## lightbulb

En ralit tout dpend de la structure de ces millions de poly et des traitements qui leurs sont appliqus. C'est 1million de poly par objet ou 1million de poly rpartis sur 400 objets d'une mme scne? 

Ces objets vont devoir recevoir de la lumire? Modle d'illumination de Phong, de Gouraud? Des textures sont appliques dessus?
Des effets visuels  prvoir, ombrages dynamiques, ambiant occlusion?

Dans la pratique mmes les jeux les plus rcents ne dpassent pas quelques 100nes de milliers de poly. De nombreuses techniques sont labores pour viter  ce nombre de crotre, gestion du Level Of Detail en fonction de la distance entre l'objet et la camra, portails, octrees, frustrum culling... Ces techniques sont principalement bases sur le partitionnement spatial.

Les millions de polys sont rservs au cinma et aux films d'animations 3D qui disposent de render farm pour effectuer leurs rendus.

----------


## pyros

Au final, quelques milions de triangles, s'il s'agit d'une seul mesh affich simplement (clairage gouraud/phong et 1 texture), les cartes actuelles savent faire.
Je tourne  180 fps avec 2 millions de triangles (1 seul VBO, clairage gouraud) sur quadro K5000. Donc mme sur une GForce pas trop vielle a devrait tre utilisable.
Ne pas oublier qu'il n'y  pas que les jeux. Les appli de visu scientifique et de CAO sont trs gourmandes en triangles.

----------

