See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: OpenGL Orbiter Mesh Viewer  (Read 24573 times)

0 Members and 1 Guest are viewing this topic.

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
13 November 2010, 17:02:17
Bonjour à tous !

Une nouvelle création que je viens d'atteindre un avancement présentable. Dans ma recherche du meilleur moteur 3D, j'ai testé IrrLicht, Ogre3D et maintenant, je sors du domaine des moteurs pour me retrouver dans les API graphiques. J'ai d'abord été tenté par DirectX, mais voyant sa taille de plus de 500 Mo, j'ai décidé de me tourner vers OpenGL (et la SDL pour la fenêtre).

Petite annecdote : J'ai passé au moins 1 heure à chercher les librairies d'OpenGL. Puis, j'ai découvert qu'elles étaient intégré à la SDK de Windows :badsmile:. Avis au futur utilisateur d'OpenGL.

Après avoir appris les rudiments du OpenGL, j'ai décidé d'essayer de charger un mesh d'Orbiter. Merci à Martin pour sa documentation claire et son format tellement bien fait, j'ai réussi à lire un fichier .msh d'Orbiter en une avant-midi de travail. Puis, il est venu le temps d'afficher le résultat à l'écran. Ça, ça été plus difficile à cause de la grande hiéarchie des fichiers meshs. Après plusieurs arrachements de tête (sens figuré, of course... :badsmile: ), j'ai finalement réussi à faire apparaître le mesh à l'écran !

Pour l'instant, je ne lis pas les matériels, ni les textures. Seulement les coordonnées des triangles. Il y a un ZBuffer mais pas de buffer d'ombre ce qui donne un aspect cartoon au rendu. La caméra ne bouge pas (il faut jouer dans les sources) et le choix du fichiers non plus (il faut encore jouer dans les sources). Il reste encore beaucoup de travail à faire avant de voir une release futur (pas encore sûr...).

Tout de même, j'étais tellement joyeux de mon succès, je n'ai pas pû résister à vous le montrer.

ISS


Atlantis


ShuttlePB



Message modifié ( 13-11-2010 17:08 )

Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #1 - 13 November 2010, 23:00:00
Chapeau bas, c'est top ! c'est déjà vraiment pas évident d'obtenir cela, j'en sait quelque chose :) un super premier pas.

Et finalement pourquoi as tu abandonné les moteurs comme irrlich et ogre ?


---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #2 - 14 November 2010, 01:18:47

Petit cachotier !
Si je comprends bien , tu es entrain de créer ton propre moteur3D , de A à Z ?
C'est toi qui crée les vertexbuffers , les matrices , etc ... ?
Tu as pris une pomme sur la tête ou quoi ?
Espèce de Newton , va !

Nan , c'est génial et je suis très curieux d'avoir plus de détail .
:applause::applause::applause:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #3 - 14 November 2010, 16:38:29
J'ai abandonné Irrlicht et Ogre3D car j'ai vite vu les limitations (Ogre3D est plus complexe qu'Irrlicht) et j'ai voulu m'essayer directement dans OpenGL. J'ai trouvé plus facile d'y aller directement dans lui. Les fonctions sont extrèmement simple et puissante. Ex : Pour faire des triangles, glBegin(GL_TRIANGLES); puis tu entres les coordonnées des triangles. Tu peux en mettre comme tu veux, OpenGL va faire des triangles. Quand t'a fini, glEnd(); Fini !

Oui MrSpock, c'est un peu le cas. Ce petit programme est un début de moteur 3D. Je pense me limiter à la visualisation de mesh d'Orbiter. Pour le ZBuffer, c'est OpenGL qui le fait pour toi. Encore une fois, c'est hyper simple. glEnable(DEPTH_TEST); et à chaque frame, un glClear(GL_DEPTH_BUFFER_BIT);.

Je travail présentement sur les matériels. Ça avance plutôt bien. Le programme sait lire dans le fichier .msh les donnés sur les matériels. Reste juste à les incorporer à la scène.


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #4 - 14 November 2010, 16:58:11
J'ai commencé à coder mon propre moteur 3D en java avec JOGL (Java OpenGL)
C'est sympa et là on voit bien la complexité de créer des polygones ;) Mais c'est très formateur ;)



Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #5 - 14 November 2010, 17:29:44
Quote
Ex : Pour faire des triangles, glBegin(GL_TRIANGLES); puis tu entres les coordonnées des triangles. Tu peux en mettre comme tu veux, OpenGL va faire des triangles. Quand t'a fini, glEnd(); Fini !

Non , là , Respect !! canadien ...
J'ai jamais eu le coeur de m'y coller , à fabriquer des triangles ...
Si tu commences par là , c'est une longue route qui s'ouvre à toi , et je ne pense pas que tu vas t'arrêter à visualiser
des meshs .
Un de ces matins , tu vas te dire : " Bon , si je le faisais bouger un peu , pour voir ? " .
Etc ... etc ...
Bravo Bibi !!
:wor:

Après réflexion , je crois que c'est la barrière de la langue qui m'a le plus handicapé .
Lire une doc technique en anglais demande parfois des acrobaties cérébrales ... éreintantes ( pour moi ) .
Je te sens bien parti mon bibi !




Message modifié ( 14-11-2010 17:34 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #6 - 14 November 2010, 17:40:23
J'ai intégré les matériels au Viewer ! Certains meshs bug toujours, m'ai Carina est simple et je peux la voir avec de la couleur. Je prend les donnés Diffuse, Ambient, Specular et Emssive, tout comme Orbiter. Les textures ne sont pas chargés encore.

Je suis sûr que tu serais capable Spocky. Une langue ça s'apprend (et l'anglais, encore mieux :badsmile: ). En plus, avec OpenGL, il y a des Bible sur ce domaine. En voilà une : http://www.falloutsoftware.com/tutorials/gl/gl8.htm Un site qui traîte des matériels et des lumières.

(La lumière est mal placée sur ce screen, c'est pourquoi Carina est sombre.)


Une autre screen avec plus de lumière et un GL_SMOOTH pour adoucir les triangles.




Message modifié ( 14-11-2010 17:44 )

Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline DagoO

  • Legend
  • ******
  • Posts: 2161
  • Karma: 7
Reply #7 - 14 November 2010, 18:57:34
Vous avez déjà fait un bruit comme "hann !" sans pouvoir vous en empêcher avec le sourire aux lèvres tellement une chose est superbe? ça vient de me le faire :badsmile:



Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #8 - 15 November 2010, 00:59:28
Un grand merci à Fast_toche pour m'avoir aidé à lire les vertices dans la bonne ordre. En effet, je les lisais un part un, dans l'ordre du mesh. Mais lorsque je chargeais un mesh avec des écritures dessus (le CentaurD-1T, il y a écrit "USA" avec des vertices), le 'S' était à l'envers.


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline cslevine

  • Legend
  • ******
  • Posts: 3621
  • Karma: 17
Reply #9 - 15 November 2010, 01:48:03
Quote
Vous avez déjà fait un bruit comme "hann !" sans pouvoir vous en empêcher avec le sourire aux lèvres tellement une chose est superbe? ça vient de me le faire

ctrl-v !



Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #10 - 15 November 2010, 03:50:31
J'ai ajouté une rotation de la caméra avec les touches du NumPad et un zoom avec les touches + et - du numpad aussi. Très pratique pour bien visualiser le mesh.


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #11 - 15 November 2010, 09:47:18

Exellent !
Bientôt : " J'ai rajouté un systeme de propulsion ... " " J'ai rajouté un systeme de detection collision ... " etc ...
Note que le visualiseur externe , it's a great idea .
:eek:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #12 - 17 November 2010, 00:49:47
J'ai tenté d'implémenter un spot ligth mais je ne sais pas trop comment il est gérer. Il semble bouger avec la rotation de l'objet... mais bouger avec la caméra. Bref, c'est très bizarre. J'ai aussi essayé d'ajouter la gestion des normals et je ne suis pas sûr que c'est correct.

Encore du boulot à faire.


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #13 - 17 November 2010, 08:29:56

Code: [Select]
J'ai tenté d'implémenter un spot ligth
Mmouais ...
Je pense à un problème de matrice de projection dans le monde 3D .
Si ta lumière est crée dans l'espace de la caméra , c'est possible qu'elle subisse les transformations de la matrice pendant .

Vérifie ta méthode de création de l'objet pour commencer .
Ensuite , toutes les lumières ne se créent pas avec les mêmes paramètres .
Le spot light demande une position et une direction je crois ( au minimum ) .
Pour que ta lumière soit statique , il faut utiliser une méthode du genre MatrxixMultiply , pour atteindre le niveau "Parent" de la scène il me semble .
En fait , c'est ce qui m'avait découragé , les opérations de matrices répétitives .
Mais une fois que le principe est compris , ce n'est plus un soucis .
Accroche toi !
:eek:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Snoopy

  • Newbie
  • *
  • Posts: 12
  • Karma: 0
Reply #14 - 17 November 2010, 10:17:46
OpenGL a un très gros inconvenient, c'est une machine à état. Grosso modo les modifications que tu as faites se répercutent sur la modification courante. Par exemple pour les positions, tu as une pile avec au début qu'un seule matrice identité, tu fais une translation pour placer un objet, il va modifier cette matrice, et si tu refais un nouveau déplacement pour placer un autre objet tu vas modifier la matrice précédente, donc tu vas bouger par rapport à l'objet précèdent.
Pour éviter ca plusieurs solution, tu recharge la matrice identité à chaque fois ( glLoadIdentity() ) ou tu utilises la pile ( glPushMatrix() rajoute une matrice identité en haut de la pile et glPopMatrix() retire la matrice du haut de la pile).

Mais si tu as compris ca tu devrais pouvoir régler ton problème de lumière qui se balade.
Sinon pour la camera je te conseille d'utiliser gluLookAt(.....)

Voili voilou j'espère avoir été clair

EDIT : glPushMatrix() rajoute la recopie la même matrice sur le dessus de la pile.



Message modifié ( 17-11-2010 14:43 )


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #15 - 17 November 2010, 11:58:46

Quote
tu as une pile avec au début qu'un seule matrice identité ...
Voilà !
C'est ce que je voulais dire , mais avec les termes corrects !
Good Job snoopy !
:beer:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Snoopy

  • Newbie
  • *
  • Posts: 12
  • Karma: 0
Reply #16 - 17 November 2010, 14:45:12
je vais donner un exemple pour etre plus clair.
On veut faire un système solaire avec 1 soleil et 1 planète avec 2 satellites.

etat initial de la pile : mId

On dessine le soleil.

On fait la translation + la rotation. etat de la pile : m1

on dessine la planete

glPushMatrix() etat de la pile : m1 m1

on supprime l'ancienne rotation + on fait la translation + rotation du sattelite 1. etat de la pile  : m2 m1

glPopMatrix() etat de la pile : m1

glPushMatrix() etat de la pile : m1 m1

on supprime l'ancienne rotation + on fait la translation + rotation du sattelite 2. etat de la pile  : m3 m1


Sinon l'année dernière en cours on a fait un système solaire en OpenGL, si ca peut aider je peux l'envoyer


Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #17 - 17 November 2010, 22:01:16
ton exemple était super bien choisit mais j'ai été perdu.

corrige moi si je me trompe,

etat initial de la pile : mId (Identité, le centre 0,0, du monde, pas de rotation)

On dessine le soleil.

On fait la translation + la rotation: glPushMatrix(t1) glPushMatrix(r1)

etat de la pile : t1 . r1

on dessine la planète

on supprime sa rotation : glPopMatrix()

on se place sur le 1er satellite : glPushMatrix(Ts1)

on tourne ce satellite: glPushMatrix(Tr1)

etat de la pile : t1 . Ts1 . Tr1

On dessine le satellite

On reviens sur la planete : glPopMatrix(); glPopMatrix();
etat de la pile : t1

on se place sur le 2nd satellite : glPushMatrix(Ts2)

on tourne ce satellite: glPushMatrix(Tr2)

etat de la pile : t1 Ts2 Tr2

On dessine le second satellite


---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #18 - 17 November 2010, 23:06:25

Je pense que tout le monde (français...) comprendra facilement le mal de crâne que cela représente de s'attaquer à
OpenGL avec une doc en anglais ...
:arg:
L'interprétation de tofitouf avec les "t" et les "r" pour translation et rotation est plus facile à suivre , mais bobo quand même hein ...
:damn:
En gros , les moteurs 3D nous permettent d'éviter 70% de ... çà .
Mais sans çà , pas de moteur 3D !
Push Push then Pop !
:music:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #19 - 17 November 2010, 23:08:25
Si je ne me trompe Tofitouf, Push et PopMatrix ne prennent aucun argument.

Je vais regarder ça. Pour l'instant, je fonctionnais avec une seule matrices. Mais là, ça va attendre un peu, un long devoir de math m'attend :sad:.


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #20 - 18 November 2010, 07:29:08

Salut Bibi !
Quand tu auras fini ton long devoir de maths , tu pourras te reposer de cet effort en allant sur le site que je te propose,
qui je l'espère , t'aidera dans la continuation de ton projet .

Ben oui , encore des maths ...:badsmile:

http://jeux.developpez.com/faq/math/?filtre=OOOOOOOOOOOO


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #21 - 18 November 2010, 11:21:41
Ah oui autant pour moi.

Remplacez chacun de mes glPushMatrix par des glTranslated, glRotate suivis d'un pushMatrix.

Push ne fait que sauvegarder dans une pile l'état actuel de la matrice.


---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #22 - 18 November 2010, 22:57:00
Tofit OUF Spocky ! J'ai beaucoup de lecture à faire avec ce site-là ! Allez, je me lance...



Message modifié ( 18-11-2010 22:57 )

Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #23 - 18 November 2010, 23:57:17

:top:
Si çà peut te rassurer , j'y suis jusqu'au cou moi aussi ...
Enfin moi , çà part dans tous les sens ( les shaders c'est bien fort aussi ... )
Bon allez , bonne lecture et surtout bonne application !
A+


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #24 - 29 November 2010, 03:06:53
Je suis pris dans une weirdeté (vive les anglicismes ! :badsmile: ) vraiment étrange. Lorsque je dessine pour une première fois le frame, tout est parfait. Par contre, lorsque je dessine une deuxième fois un frame (ex : après rotation de la caméra ou simplement en exécutant 2 refreshs consécutif pour les tests, un groupe disparaît (le premier je crois, à confirmer). J'ai regardé toute les boucles pour vérifier qu'il ne passe aucun groupe, mais je ne trouve rien. Il commence à 0 à chaque fois.

Des idées ?


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon