Graphique de mouvement 3D en java


Je travaille sur un projet de recherche qui consiste à visualiser les coordonnées de position 3D (x,y,z) en java avec d'autres caractéristiques (telles que la taille du point).

Si la position où en 2D, google motion chart serait parfait. Cependant, c'est en 3D car je visualise (au fil du temps) le mouvement dans un espace en 3 dimensions.

J'ai fait des recherches depuis un bon moment maintenant et j'ai découvert que je pourrais probablement le faire dans java3D, mais la bibliothèque semble obsolète et je suis je ne sais pas s'il peut gérer une animation fluide (étant donné que j'ai les coordonnées à chaque instant plutôt que le chemin). Une connexion avec OpenGL (JOGL) semble très compliquée pour cette tâche. Et je ne suis pas sûr que le traitement puisse le gérer.

Existe-t-il un moyen simple d'animer des sphères avec des coordonnées 3D dans une animation dans java3D? Et changer leur circonférence pendant ce temps? J'ai lu un tas de tutoriels mais rien ne le fait exactement. Ou je vais à ce sujet le mauvais chemin et y a-t-il une sorte de bibliothèque de mathématiques/géométrie que je pourrais utiliser?

Voici un exemple de ce que je veux réaliser:

Second 0:
- sphere at (0,0,1): (relative) size 1, colour green
- sphere at (1,1,1): size 2, colour green

Second 1: 
- sphere at (0,2,2): size 3, colour green
- sphere at (4,4,1): size 4, colour red
- sphere at (1,2,1): size 1, colour green

Second 2: 
- sphere at (1,0,1): size 2, colour red

Avec ou sans transitions douces. Je ne sais pas comment commencer à cela avec JOGL ou si c'est possible.

Author: dorien, 2015-10-26

1 answers

Je n'ai jamais utilisé Java3D, mais je connais Jogl.

Ce que vous décrivez est, comme je l'ai déjà mentionné, une tâche assez facile dans OpenGL.

Fondamentalement, ce dont vous avez besoin est un pseudo-code comme celui-ci:

loadData();

for(each spehere) {
    updatePositionAndScale(time);
    render();
}

Vous chargez d'abord les sommets du triangle pour une géométrie à sphère unique. Étant donné que le rayon delta semble assez petit, vous voudrez peut-être charger une seule sphère, sinon vous pourriez en charger plusieurs, en fonction de la richesse de la géométrie. Ce que je veux dire est essentiellement quelque chose similaire

entrez la description de l'image ici

Quoi qu'il en soit, puisque le nombre de sphères est vraiment faible (les GPU modernes peuvent facilement gérer des centaines de triangles), vous voudrez peut-être aller avec un seul spehere très détaillé.

Ensuite, vous faites une boucle sur vos sphères et pour chaque tick de temps, vous calculez la position de transition actuelle et l'échelle du i-th spehere. Vous pouvez le faire par une simple interpolation, si vous avez besoin de quelque chose de linéaire. Tous ces paramètres, position et mise à l'échelle, affecteront ce qu'il est appelée model matrix qui transforme votre géométrie pour le model space , l'espace où vos triangles existent pour la première fois, en world space . Pour chaque sphère, vous mettrez à jour ces paramètres, puis vous le rendrez simplement.

Parlons maintenant des conséquences ^^

Apprendre OpenGL vous demandera d'investir du temps. C'est vraiment difficile à estimer, car tout dépend du niveau de connaissance à partir duquel vous commencez et que vous souhaitez atteindre. Si vous voulez le garder aussi minimal que possible, c'est l'avoir aussi simple que possible, je dirais que ce ne serait pas une tâche particulièrement compliquée (les derniers mots célèbres). Vous pouvez avoir terminé dans quelques jours, en fonction également de vos compétences en mathématiques. Vous apprendrez les bases des shaders, comment ils lisent les données et comment ils fonctionnent, les transformations et l'éclairage (simple)dans OpenGL.

Disons que étant donné que le nombre de sphères est également très faible, vous pouvez le faire complètement en java, sans utiliser n'importe quelle accélération (comme OpenGL) et épargner quelques jours douloureux. Mais comme vous enquêtiez déjà sur Java3D et Jogl, je voulais juste vous dire que ce que vous voulez réaliser est vraiment élémentaire (si vous connaissez déjà OpenGL, bien sûr).

Donc l'inconvénient est que vous devrez enquêter quelques jours (semaines?) apprendre les bases d'une nouvelle API, comme OpenGL, avant d'atteindre ce que vous voulez. Les avantages sont, au lieu de cela, vous apprendrez quelque chose de nouveau (c'est toujours agréable), vous obtiendrez une accélération matérielle, ce qui signifie que vous pouvez utiliser toute cette puissance pour rendre ces sphères très détaillées et agréables à regarder en utilisant des effets d'éclairage. Si vous voulez avoir un aperçu rapide, voici comment un simpleBonjour Triangle ressemble à

 1
Author: elect, 2015-10-26 10:28:59