Echelle OpenGL !! [Résolu]

Signaler
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007
-
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
-
Salut a tous,



J'ai créé une "heightmap" ou dedans je peux me deplacer.

Je lis dans un fichier ou mes vecteur sont tous rangés.

Par exemple :



fichier1.txt :

-15000 345 12734

.

.

.

15000 34 -12734



fichier2.txt

-500 23 500

.

.

.

500 56 -500



L'ennui est que lorsque la map s'affiche, je ne vois pas la difference
entre le fichier 1 et le fichier 2 !! je ne sais pas trop comment faire
....



OpenGL ne fait pas attention a mes coordonnée, il prend juste plus
grande je pense et fait une moyene..... d'ou le fait d'afficher des map
de meme "taille" sur l'écran !!



Comment peu on regler se probleme ???

peu etre tracer un ligne trés grande par rapport a ma carte pour bluffer opengl ?



Ceux qui on des idées......

merci bien.

http://nomind-world.com

65 réponses

Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

Sorry, mais chez moi sa ne marche pas :((
tout cliniote super vite.... et je ne voi pas d'image mais que des carres....
en fait c a cause de ma carte 3D je pense.... j'ai une carte graph intel integree...
sur mon labtop....

snifsnif :((

parcontre j'ai finis de faire ma physique !!! et sa marche :)))))))))
trop dla balle, je peu sauter et tout :)
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

L'idée de tracer une grande ligne et stupide ! sa fera le meme comportement ! ou meme sa empirera.....



bon qui a une idée :(

http://nomind-world.com
Messages postés
17
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
14 juin 2006

L'échelle à laquelle apparaissent tes données à l'ecran dépend de la matrice de projection. Quelle matrice de projection as tu utilisée ?
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Salut, j'ai pas trop compris tes histoires de fichiers, une heightMap==un fichier non ?, alors je vois pas ou est ton probleme...

KeniiyK.
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

Supposons que j'ai deux fichier text1 et text2 ou dedans j'ai des vecteurs rangé.

Dans text1 les vecteurs vont de -10000 a +10000

Dans text1 les vecteurs vont de -100 a +100

il a bien sur le meme nombre de vecteur dans les deux textes ! c'est juste l'echelle qui change.

Quand je dessine cela sur mon écran l'échelle est differente car quand
j'affiche ma position sur l'ércan je le verifie, MAIS la carte elle a
la meme taille !! c'est a dire que les triangles on la meme taille SUR
l'ECRAN.

Pour moi, quand openGL affiche la carte1 par exemple je devrais voir la
fin de la carte car l'echelle est petite, et pour la carte2 ne pas voir
la fin de la carte et avoir des triangles trés grand, la carte a les
MEME PROPORTION....



Ya un truc tout bête qui m'échappe...



Je suis pas trés doué pour expliquer :s

Je peu poser mon code source si sa peux aider.


Mercihttp://nomind-world.com
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Ben oui poste ton code parce que là je vois pas pourquoi tu as la meme echelle sur tes deux maps ( a moins que tu ne te places selon un certain point de vue et qui fait que...).

PS : ca te sers a quoi d'avoir la meme map a differentes echelles ??

KeniiyK.
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

voila déja j'ai mis des screenshots et quelque explication....



http://barraquand.fr/rb247/DoubleProject/Prog/



merci encore
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Suis allez voir, il est ou le code ?

KeniiyK.
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

Le code y est c'est bon



Alors ne t'inquiete pas c'est fini... donc c'est un peu le bordel !

j'éspere que tu va pas trop galérer....

J'utilise pas mal de classes... enfin si tu a l'habitude c'est bon ;)
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
HEY !!! il est pas mal ce code, commentaire, comprehensible, etc... !!!!!

Bon le probleme c'est que j'utilise visual studio 6 et qu'il ne trouve pas
ImageList_Create
et
ImageList_AddMasked
par contre il connait bien l'entete des fonctions et le type HIMAGELIST, HBITMAP etc..

Bref elles sont declarees dans quelle lib ces 2 fonctions ?, j'aimerai bien compiler.

Au pire balance ta liste des libs ici je ferai une comparaison...

KeniiyK.
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Erf erf erf, c'est bon c'était comctl32.lib qu'il me manquai, bon je regarde now....

Et je te tien au courant.

KeniiyK
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Effectivement c'est bizarre, mais il y a des trucs que je pige pas comme la distance far négative dans le gluPerspective

et les fichiers *.inf
[ByteMap]
#SIZE
W: 257 H: 257 //bon disons que c'est la taille de "Terrain.bmp" ?
[VectorMap]
#SIZE
W: 25600.000000 H: 5040.000000 D: 25600.000000 // boite englobante de la scene ?
#CENTER
X: 0.000000 Y: 0.000000 Z: 0.000000 // centre de la scene ?

J'ai survolé le code et il me semble ne pas avoir vu que tu faisai de "rescale" sur les sommets du terrain en fonction de la size de la map (donc disons que ca vient pas de là).
Et est ce que les fichiers "Terrain.raw" contiennent les sommets du terrain ou est ce les vecteurs qui permettent de retrouver leurs valeurs via le centre de la scene ?
(evidemment si le centre == origine c'est pareil) .

KeniiyK.
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

Alors :

[ByteMap]

contient toutes les informations de la map en niveau de gris : Terrain.map

donc oui 257 et 257 c'est la largeur de cette image ( le .map === .raw )



[VectorMap]

contient toutes les informations de ma map transformée en vecteur.

donc oui 25600 ... est la taille de la boite qui englobe la scene.

et aprés on trouve le centre de la scene.



Donc je lis le fichier .map pour pouvoir me deplacer sur la map, car elle contient la heuteur pour les coordonnées X,Y.

Dans le fichiers Terrain.raw tu trouve toutes les coordonnées des
sommets, donc oui sa peu etre vue comme des vecteurs dou l'origine est
le centre.

Dans ce fichier, 3 sommets consecutif forme un triangle.



Est c'est quoi la fonction RESCAL ?



mais tu a vu c'est étrange quand meme que les map apparaissent avec la meme taille !!

je pige rien :((

comme si opengl fixé une limite !!
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

a zut, oui la distance dans gluPerspective(.., ..., 0.1f, -1.0f)

le -1.0f est pour indiquer "infini".
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Ok je connaissais pas l'histoire du far negatif, merci.Quand je parle de "rescale", c'est pas une fonction, je voulai dire que tu ne remettai pas les points a une certaine echelle en fonction de la taille de la map (scale echelle -> avec un peu de barbarisme "rescale" remise a l'echelle).

Change le fovy de gluPerspective de 45.0f a 60.0f par exemple il y a une difference minime apres entre "Petite" et "Grande" mais bon je crois qu'en fait y a pas de probleme et que c'est du au placement du point de vue et la projection.

Enfin, je vais continuer de tester tout ca.

Juste une derniere precision, les classes frustrum et frustum elles servent a quoi ?

KeniiyK.
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

lol c une errreur



Fustrum == erreur, j'ai oublier de l'enlever :D c'est une erreur d'orthographe



Frustum == c'est une classe qui est a utiliser avec l'octree, elle
permet de savoir si un object est dans ton champ de vision ou pas. Tu
l'utilise pour dessiner ton octree, tu demande :

- ce noeud est dans le frustum ? oui -> on recurse vers le bas

- le noeud ni est pas, on stop la recursion

- on a attein la fin de l'arbre, on affiche le noeud



voila



Sa me desepere se bug !! je suis sur c'est tout simple en plus...

j'ai tout essayé ! mais a chaque foi opengl me dessine ma carte de la meme taille !!

mais peu etre que a deux on ve trouver le truc :D



barraq
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Bon ben je pense que c'est ce que je disais, "l'effet d'echelle uniforme" est du a un placement particulier avec une projection particuliere fais les changements suivant et constates par toi meme :

void WinGL::InitGLScene ()
_Camera->PositionCamera(20, 30, 120, 0, 30, 0, 0, 1, 0);

void WinGL::ReSizeGLScene()
gluPerspective(60.0f,(GLfloat)_Width/(GLfloat)_Height,0.1f,-1.0f);

Tu devrais t'appercevoir d'une plus "grande profondeur de champ" sur la "Grande"

Dis moi ce que tu en penses.

Et disons que c'est un peu normal que les triangles apparaissent "de meme taille" a l'ecran car avec la "Petite" tu dessines un "petit" triangle mais "près" et avec la "Grande" tu dessines un "grand" triangle mais "loin". (tu vois ce que je veux dire ?).

@+,KeniiyK
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Par contre, et si je peux me permettre, tu devrais optimiser quelques traitement vis à vis d'OpenGL :
- Pour faire le rendu des Octrees fait du glDrawArray plutot que de recalculer les normales et te linker sur les vertices pour faire du glBegin()-glEnd() à chaque tracés.
- Et evites les appels glGetXXX ca bouffe grave en temps de calcul (remonter du pipe des donnees) par exemple le glGetFloatv( GL_PROJECTION_MATRIX, projM ); de la classe Frustum fais le dans le resizeGL car cette matrice ne change que là.
(quoi que avec les nouvelles CG en PCI express ca a peut etre change... suis encore avec ma GF4 TI 4200 en AGP 8X alors je peux pas tester)

Il y a peut etre d'autre trucs mineurs a ameliorer mais rien qu'avec ces deux changements tu devrais déjà gagner pas mal.

KeniiyK.
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

A donc sa viendrai du fait que je place ma camera trop haut au départ........

oui j'ai essayé et cela donne un peu plus d'effet...

donc sa serai aussi bête que cela

faut que je fasse plus de test :)



en tout les cas sa m'avance déja bien :)



tu t'en est pas trop vu avec mon code ?

par hazard, je pense que tu a étudié l'info qq part, et donc que tu a
apris des methode... car j'aimerai savoir si en general comme je
structure mon code c'est bien ou pas ??

tu vois par exemple si mon utilisation des classes est bien faite ? ou si c'est le bordel... etc

car j'ai tout apris comme sa... et donc je n'est pas THE METHODE, donc j'aimerai ton avis :)



merci déja pour tous se que tu a fait :D



barraq



(je continu a poster ici sur se sujet :D c pas fini :) )
Messages postés
89
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
14 septembre 2007

j'ai jamais utilisé les : glDrawArray

en fait c'est la premiere application que je fait en openGL, bon j'ai
mis du temps je dis pas :) meme bcp de temps, mais c'est ma premiere
application, donc je suis loin de tout maitriser...



En fait je devrai plutot faire comme sa :



appeler une seul foi drawoctree et dedans faire :

pour chaque noeud, creer une nouvelle glList(...) qui comprendrai toutes les vertices de ce noeud.

faire ma recursion pour tous mes nodes.



et aprés quand je veut réélement le dessiner (a chaque loop), j'utilise
une récursion a traver mes noeud mais cette fois j'appele la liste
relative a se noeud. ( drawliste pour chaque neoud)



c'est sa que tu veu dire ?

ou c'est pas sa :)

si tu a un exemple....