#0 

24-11-2011 17:15:32

Dexter9313
Petit nouveau
Date d'inscription: 24-11-2011
Messages: 3

Bonjour à tous ! Je suis nouveau dans le monde d'Irrlicht et j'ai choisis ce moteur pour créer un équivalent libre d'Orbiter pour ceux qui connaissent (http://orbit.medphys.ucl.ac.uk/ pour les autres). Apparemment le créateur de ce programme n'a eu aucun mal à afficher les planètes/vaisseaux et autres bâtiments avec Direct3D, bien que je sois convaincu qu'il utilise quelques astuces.

Ayant programmé ma classe qui me permet de gérer les caractéristiques physiques des planètes, j'ai décidé de faire un petit test en graphique.
Prévoyant à l'avance que la farValue serait un obstacle pour afficher les distances réelles quand celles-ci sont très grandes, je place les planètes à une distance fixe de la caméra à partir d'une certaine distance par rapport à la planète en utilisant scale() pour réduire sa taille avec la distance, pour avoir un diamètre apparent réaliste (angle de vue sous lequel on voit un corps céleste). C'est fluide et on a vraiment l'impression de s'en éloigner alors qu'elle ne bouge pas.

Cette technique fonctionne terriblement bien pour afficher des objets très lointains, par contre, pour ce qui est des distances proches, je bloque...

J'ai vu qu'un autre membre avait aussi eu ce problème, cependant vous lui aviez conseillé de revoir ses échelles il me semble. Cependant, pour mon cas, je dois conserver les échelles puisque le programme se veut réaliste à ce niveau-là, ou alors il faut trouver une technique de contournement des contraintes techniques du moteur, comme je l'ai fait pour les grandes distances.
Quand je suis très proche d'une planète, en s'approchant donc de la nearValue (et quand celle-ci est inférieure à 1, c'est de toute manière le bordel quelle que soit la distance, donc je l'ai laissée à 5), les mouvements de caméra font "vibrer" désagréablement la planète, la rendant à nouveau fixe quand la caméra ne bouge plus. J'ai pris pour échelle 1 unité graphique = 100km. À 600km et au-delà de la planète ça va donc très bien, cependant, dans Orbiter, on est censé pouvoir se poser sur la planète !

Mes questions sont donc :
- Peux-t-on améliorer le rendu avec des objets très grands (environ 60 unités graphiques de rayon pour la terre) et des nearValue très petites (pour pouvoir me poser sur la Terre et voir mon vaisseau à au moins un mètre il me faudrait donc une nearValue d'environ 0.00001, je doute que le moteur supporte ça...), comme changer la matrice de projection par exemple, ou reprogrammer une caméra soit-même ?
-Si non, quelle serait la technique de redimensionnement de la planète à une distance inférieur à 600km de sa surface (peut-être mettre autre chose qu'une sphère, comme un arc de sphere simplement, ou autre chose qui donnerait l'illusion d'optique) de manière à garder une nearValue environ à 5, pour laquelle ça marche à peu près bien ?

Je pense bien que la solution sera l'illusion mais j'espère trouver une fonctionalité du moteur qui pourrait me simplifier la vie à ce niveau-là.
Bonne soirée et merci d'avance !

Hors ligne


#1 

25-11-2011 01:18:02

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

http://irrlicht.sourceforge.net/docu/cl … 6d087da1ea
l'idée de modifier le scale est intéréssant, cepandant ce n'est pas la bonne voie, le "truc" c'est qu'il ne faux pas concevoir ton univers en un seul bloc
mais en plusieur, la partie spacial, et la partie terrestre, car les deux sont géré totalement diferament d'une par, et qu'il te seras impossible d'avoir qu'elleque chose de fluid
nombre d'obj/polygone/etc, inimaginable

la seul chose que tu a beusoin c'est d'une transition entre les deux, atmosphere, skydome (cf: http://irrlicht.sourceforge.net/docu/cl … eb0749e7eb pour généré dynamiquement), lod, etc wink

bref je n'aprofondie pas plus, le sujet est vaste, et je vais me coucher, surment ... wink

Hors ligne


#2 

25-11-2011 16:24:51

Dexter9313
Petit nouveau
Date d'inscription: 24-11-2011
Messages: 3

Hm... En fait j'ai réussis un début de solution, toujours avec les scales, cette fois quand on s'approche de la planète, on la recule pour que sa surface soit toujours derrière la nearValue, mais pour avoir l'illusion qu'on s'en approche on augmente son rayon. (même chose qu'en s'éloignant en fait mais à l'envers).
J'ai toujours quelques bugs mais c'est beaucoup plus gérable, j'ai réussis à m'approcher de la surface à 10m sans problème d'affichage ! Cependant j'ai la planète qui vibre au moment de la "transition", entre 100 et 300km de distance à la surface.

J'aimerais bien essayer ta solution de "transition" mais je vois pas du tout comment faire de manière fluide... Surtout que l'"atmosphere" n'est pas disponible pour toutes les planètes, seulement la Terre et Mars... ^^

Dernière modification par Dexter9313 (25-11-2011 16:26:55)

Hors ligne


#3 

25-11-2011 22:46:29

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

utilise une sphere pour la création de ta planète et lorsque tu te rapproche, tu affiche un terrain géré par LOD et supprime le node de ta sphere.

Tu affiche le terrain uniquement lorsque ton altitude est suffisamment basse pour ne pas voir trop la courbure de la sphère afin de n'avoir aucun artéfact visuel lors de la transition

Hors ligne


#4 

27-11-2011 20:28:58

Dexter9313
Petit nouveau
Date d'inscription: 24-11-2011
Messages: 3

Malheureusement la courbure de la sphère risque d'avoir à être visible même jusqu'au sol, surtout si on est sur une petite planète ^^ (je ne compte pas m'arrêter au seul système solaire)
Est-ce qu'il y aurait moyen de faire un terrain à apparence sphérique ?

Hors ligne


#5 

28-11-2011 11:22:35

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

oui il est possible de faire un terrain a apparence sphérique mais pas en utilisant la classe de base de génération de terrain fourni par Irrlicht

Pour ce faire crée toi même le maillage et utilise une simple fonction sinus et cosinus pour crée une légère courbure en fonction de ta distance de terrain.

La deuxieme méthode qui me vient a l'esprit, c'est d'utiliser la class de génération de terrain fournit par irrlicht et  par vertex shader, modifier la courbure 
à partir de simple fonction sinus et cosinus:

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
117 invités en ligne
Aucun membre connecté
RSS Feed