IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Galaxie Mitaka avec des shaders ?


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 80
    Points : 48
    Points
    48
    Par défaut Galaxie Mitaka avec des shaders ?
    Salut à tous,

    Sous ce nom peu explicite du titre je voudrais avoir l'avis de certains. Je ne suis sûr pas de la catégorie dans laquelle je créé la discussion.

    Mitaka est un logiciel astronomique en 3d temps réel, développé en C++ et utilisant OpenGL. Développé par un étudiant Japonais ! Il a fait un boulot magnifique, justement pour ce qui est de la voie lactée.

    J'ai pour projet de "récupérer" son code (accessible et libre de droits, enfin il faut quand même mettre son nom si on souhaite publier ce qu'on développe (désolé, je ne me rappelle plus du nom de la licence) ) et de l'adapter avec
    l'API Open Scene Graph.

    Son code n'utilise aucun shader, donc tout ce passe niveau CPU. Il faut un ordi assez puissant car c'est très gourmand en ressources ( utilisation de threads donc multi-coeur avantagé ).

    Pour l'instant je souhaiterais juste - pour ceux qui auraient l'énorme gentillesse de m'aider - savoir si avec des
    techniques de rendu en shader, on puisse obtenir un rendu similaire. Car pour l'instant j'ai commencé à adapter son code ( qui faut le noter est plus que "sale" et incompréhensible parfois), mais je me vois me diriger tout droit
    dans le mur ...............

    En gros, il lit dans un fichier qui contient 40.000 points. Stocker dans un tableau de Vector3, il passe ce dernier avec une fonction delaunay qui "triangularise" la géométrie. Ceci se passe à chaque frame ! Une fois
    delaunay effectué, deux passes (une pour la luminosité et l'autre l'extinction ! (traduction des commentaires japonais avec google ) ) sont effectuées pour le rendu des couleurs. En fonction de la position de la caméra, et de
    deux tableaux d'unsigned char (qui représentent 2 images vue de dessus de la voie lactée), il récupère une couleur et l'attribue à un vertex. Ceci grâce à plusieurs fonctions qui "simulent" elles aussi un lancer de rayons.....
    Ouf dur à expliquer !!!

    Voici le lien pour télécharger le logiciel ( j'y ai également rajouté le .h et .cpp de la voie lactée) :
    http://www.megaupload.com/?d=G3ISLCVT
    Fonctionne uniquement sous Windows. Pas testé avec Wine. Pour visualiser la galaxie : depuis le menu

    "Landing/Takeoff" -> "Landing/Takeoff". Vous n'êtes désormais plus en mode observateur sur la terre. Puis dans le menu "Target"-> "Extragalactic Object" -> "Galactic center". Vous voilà partis pour la voie lactée. Ensuite libre à
    vous de bouger avec la souris et les touches "Page up" et "Page down".

    Remarquez lorsqu'on se place au niveau du "disque" de la galaxiez, les couleurs se brunissent ( GL_BLEND ).

    J'espère que vous pourrez m'indiquer des techniques de rendu et m'aider car je bute et je ne veux surtout foirer mon projet sous peine de me ramasser une mauvaise appréciation ...

    Vous pouvez me poser toutes questions pour que j'éclaircisse certains points techniques.


    Merci d'avance.

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Ok, alors commençons au commencement...

    Pourquoi passer un delaunay chaque frame ? ce qui est affiché reste statique, alors le faire une seule fois devrait suffire...


    Pour ce qui est de la position de la camera qui change chaque frame, et qui influence la scene, OSG permet d'implementer les nodeCallback, qui sont des fonctions qui sont appellées chaque frame sur les nodes qui supportent ce callback.
    C'est peut etre pas tres clair mais je n'ai pas non plus tout compris à tes explications.

    Pour que le rendu tourne bien, il faut limiter les operations chaque frame, ne pas faire des choses couteuses comme un delaunay ! (dont je ne comprend pas le role dans ce projet d'ailleurs)

    Essaye de préciser tes questions sur OSG, sur ce que tu cherche à "convertir" depuis le projet original ... c'est trop vague ce que tu demande là.

    Celà dit je peux quand meme te donner quelques pistes :

    - les Callback qui permettent de faire des operations chaque tour de boucle
    - le Shaders GLSL sont facilement implémentables dans OSG
    - la navigation 3D dans la scene se fait avec un osg::Manipulator ou une classe qui en herite

    Précise ce que tu attend comme "algo" ou comme démarche, qu'on puisse te donner des conseils et des pistes appropriés.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 80
    Points : 48
    Points
    48
    Par défaut
    Si si je connais osg. Oui j'utilise une classe qui hérite de NodeCallback et tout ce que tu cites.

    Si tu regardes de près la voie lactée, tu peux apercevoir (plus facilement encore si tu bouges la caméra) des triangles (il faut avoir l'oeil). Donc à chaque frame, un delaunay bien bourrin et gourmand en ressources est appelé.

    Ce delaunay trie un tableau de points 3d et forme une "géométrie" plein de triangles
    Je rajouterai des screenshots demain pour montrer l'avancement de mon travail pour que vous voyez mieux les étapes pour réaliser la galaxie.

    Mais est-il possible si on charge par exemple, un fichier .max .obj, réalisé avec un logiciel de modé,( je pense que c'est pas très très dur à reproduire) et grâce avec des techniques de shaders (ambient occlusion ou autres) d'obtenir un effet similaire car comme tu le soulignes un delaunay + lancer de rayons + lire pleins d'autres fonctions, c'est très très lourd ....

  4. #4
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Je n'ai pas vu les triangles, mais si tu as un screenshot je suis preneur

    Il est en effet beaucoup plus leger de charger un modele pui de lui appliquer des effets.. Je ne suis pas "qualifié" en shaders pour le moment donc je ne peux pas te proposer d'implémentation à ce niveau, mais je suis sur que tu trouvera ton bonheur sur le net.

    Ensuite, si les shader te rebutent, tu peux jouer des callback et des Blend pour faire des effets déjà assez sympa !
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 80
    Points : 48
    Points
    48
    Par défaut
    Voici une capture. On voit pas trop trop sur elle, mais si tu te rapproches bien près et que tu tournes le point de vue, tu verras les triangles.




    Sinon personne n'aurait de solution(s), technique de shaders pour obtenir ce rendu ?
    Exemple, charger un modèle 3d qui se rapprocherait de cette forme "spirale" puis avec du blending, et technique d'illumations ? Fog ? Je ne suis pas pro encore dans les shaders mais tout avis est bienvenue.
    Je note qu'il effectue un lancer de rayons un peu tordu (à moins d'avoir mal compris son code). En effet, en fonction de la position de la caméra, il va taper dans des textures et donne une couleur à chaque vertex mais d'une manière assez bizarre Si vous voulez le code pour rire, demandez-moi où télécharger le lien du 1er post.

    Voici d'autres screenshots :

    Vue de loin :












    Vue parallèle au disque : La galaxie se brunie. Grâce au GL_BLEND.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    //------------
     
    		//  Réduction de l'éclairage
     
    		//------------
     
    		glBlendFunc(GL_ZERO, GL_SRC_COLOR);
     
    		glBegin(GL_TRIANGLES);
     
    			for (int i=0; i<nTri; i++) {
     
    				const Triangle& tri = vTri[i];
     
    				for (int j=0; j<3; j++) {
     
    					int pti = tri.p[j];
     
     
     
    					const RGBf col = col0 + alpha*Extinction[pti];
     
    					glColor3fv(col.get_pointer());
     
    					vector2f pos = vVtx[ pti ];
     
    					glVertex3f(pos.x, pos.y, 0);
     
    				}
     
    			}
     
    		glEnd();
     
     
     
    		//-----------
     
    		//  Console Galaxy
     
    		//-----------
     
    		glBlendFunc(GL_SRC_ALPHA, GL_ONE);
     
    		glBegin(GL_TRIANGLES);
     
    			for (int i=0; i<nTri; i++) {
     
    				const Triangle& tri = vTri[i];
     
    				for (int j=0; j<3; j++) {
     
    					int pti = tri.p[j];
     
     
     
    					const RGBf& col = Intensity[pti];
     
    					glColor4f(col.r, col.g, col.b, alpha);
     
    					vector2f pos = vVtx[ pti ];
     
    					glVertex3f(pos.x, pos.y, 0);
     
    				}
     
    			}
     
    		glEnd();
    J'attends vos réponses. J'espère qu'il y en aura

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/12/2007, 01h47
  2. Réponses: 27
    Dernier message: 03/02/2003, 12h27
  3. créer un noeuds avec des paramétres
    Par Toxine77 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2003, 16h11
  4. Réponses: 2
    Dernier message: 06/12/2002, 07h50
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo