Virtual FMAN forum
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Virtual FMAN forum

Virtual FMAN forum
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Display Pokémon japonaise Terastal Festival Ex : où la ...
Voir le deal

 

 Quelques questions de base

Aller en bas 
2 participants
AuteurMessage
le_duche

le_duche


Nombre de messages : 60
Age : 39
Localisation : Bruxelles
Date d'inscription : 07/12/2005

Quelques questions de base Empty
MessageSujet: Quelques questions de base   Quelques questions de base EmptyJeu 26 Jan à 10:05

Slt !J'ai abordé le premier tuto sur l'OpenGL et... comment dire... je contracte a une sorte de prolifération expoentielle de questions imbriquées qui restent malheureusement sans réponse. No
Je vais en poser une petite série, soigneusement numéortées...


1.
Code:
glClearColor(0.0f,0.0f,0.0f,0.0f);
Que signifie le f dans la notation des nombre ? Peut-on le remplacer par quelque chose d'autre ? Quel est le type d'un tel nombre ? double ? float ?

[color=green]
2.
Code:
glClearDepth(1.0f);
Je souhaiterais un peu plus de précision sur le Z_buffer. J'ai cru comprendre que ça a un rapport avec la profondeur de champ, mais je n'en sais pas plus.
Et que représente le 1.0f là dedans ? que se passe-t-il si on le modifie ?
Code:
glEnable(GL_DEPTH_TEST);
Activation selon un certain paramètre.. Que représente ce paramètre ?

[color=blue]
3.
Code:
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);  //Active l'antialiasing
Qu'est-ce que l'antialiasing, et que représentent ces paramètres ?

[color=green]
4.
Code:
glViewport(0,0,1024,768);  //3D rasterisée sur le rectangle donné
1024 et 768 représentent-ils les coordonnées des points ou bien la largeur du rectangle ?
si je veux faire un petit rectangle en bas à droite, dois-je écrire
glViewport(924,568,100,200) ou glViewport(924,568,1024,768) ?
(je sais je n'ai qu'à essayer... Smile )

[color=blue]
5.
Code:
glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);
quelle différence ?

[color=green]
6.
Code:
glLoadIdentity();

[color=blue]
7.
Code:
gluLookAt(0,0,0,0,0,-1,0,1,0);
le troisième vecteur donné (0,1,0) pour le vecteur up...
que se passe-t-il s'il n'est pas perpendiculaire au vecteur de visée (0,0,-1) ?
doit-il forcément avoir une norme de 1 ou bien c'est juste la direction qui compte ?

[color=green]
8.
Code:
glTranslatef( -1.5f, 0.0f, -6.0f );
J'ai plusieurs questions la dessus:
a) Est-ce que cette fonction affecte les réglages de la caméra ?
b) Est-ce que cette fonction est obligatoire ? Je dirais que non, si on connais les coordonnées exactes des points à afficher...
c) Si on l'utilise plusieurs fois sans réinitialiser la matrice, je suppose qu'on se déplace par rapport à la position précédente ? Par exemple, si on veut dessiner 50 arbres en enfilade, on se déplace 50 fois de 1 pas plustot que de réinitialiser à chaque fois non ?
d) Existe-t-il une fonction équivalente pour faire faire une rotation au systeme de coordonnées ? (utile pour coder de la physique je suppose) ou bien est-ce qu'on se contente de gérer ca avec la position de la caméra ?

[color=blue]
9.
peut-on imbriquer les
Code:
glBegin( GL_TRIANGLES );
glEnd( );
???

[color=green]
10.
Question plus générale:
Est-il interessant de faire plein de POO pour les trucs à afficher ?
Où chaque objet gère lui-même son propre affichage...
Et (pas besoin de m'écrire un bouquin pour y répondre) quels en sont les risques ? à quoi faut-il alors faire attention ?







Ca suffira pour ajourd'hui je pense santa
Revenir en haut Aller en bas
FVIRTMAN
Admin
FVIRTMAN


Nombre de messages : 78
Date d'inscription : 11/11/2005

Quelques questions de base Empty
MessageSujet: Re: Quelques questions de base   Quelques questions de base EmptyVen 27 Jan à 3:23

1.
f signifie "float". Si tu ne mets pas f, ça marche aussi, mais c'est une notation C classique pour dire que l'on rentre directement des float : si tu ne les mets pas, ça fait des double.
Tu risques de te prendre le warning suivant : "convert from double to float", tu as surement déja eu ça ?

2. Regarde ma page dans info/theorie prog image Smile elle explique le Z-buffer.
Le parametre passé est la valeur par défaut a mettre quand on "clear" -> qu'on fait une nouvelle image (une ratio, en l'occurrence, si tu mets 1.0, c'est le plan FAR : donc le plus loin possible)
Si tu changes tu risques d'avoir des triangles (assez lointains) qui n'apparaissent pas, bien qu'étant dans le frsutrum : pas conseillé.

2bis. glEnable active quelque chose : il y a plein de choses activables. Tu as glDisable al contrario.
GL_DEPTH_TEST est le Z-buffer. Si tu le disable, alors les triangles s'afficheront par dessus ceux déja présents, meme s'ils sont loin (un peu comme SDL : le dernier Blit fait est celui par dessus les autres...)
Pour OpenGL, tu peux lancer les triangles dans l'ordre que tu veux, si le Z-buffer est actif, alors ils se "rangeront" naturellement.

3. Regarde ma page théorie (cf ci dessus) pour voir l'antialiasing.
glHint change une donnée interne. Dans ce cas, ça change le parametre GL_PERSPECTIVE_CORRECTION_HINT en GL_NICEST (faire au mieux selon la carte graphiqu

4. le Viewport est le rectangle 2D dans lequel tu rends l'image. dans mon cas, je la rend dans toute la fenetre : de 0,0 avec longueur 1024, largeur 768.
Souvent, on utilise cex parametres (car beaucoup de jeux sont plein écran)
Mais si tu veux programmer un Mario Kart a 4 joueurs : tu divises ta fenetre en 4, tu fais 4 rendus, et c'est le viewport que tu modifies pour dire de le faire la ou la dans la fenetre.

5. Pas pareil du tout les matrices !
La Gl_MODELVIEW est la matrice de placement des points : le but étant de ramener les points dans le repere absolu (0,i,j,k) (i=(1,0,0), j=(0,1,0), k=(0,0,1))
Chaque point que tu places est multiplé par cette matrice : ça ramene un cas quelconque au cas simple ou tu dessines dans le repere 0,i,j,k
Positionner la caméra est en fait virtuel : en réalité, la caméra est toujours placée en 0,i,j,k (repere absolu)
Quand tu positionnes la caméra, ça modifie la matrice de façon a ce que quand tu placeras un point, il se placera devant 0,i,j,k de la meme façon que s'il se plaçait devant la caméra placée dans un repere quelconque
Pareil quand tu fais un glTranslate, glRotate, glScale, ça multiplie la matrice courante par une autre (ça cumule les transformations).
C'est tout des changements de repere.
Une fois un point appliqué par GL_MODELVIEW, il est toujours 3D.
GL_PROJECTION est une matrice qui projette le point sur le plan (il faut savoir qu'un point (1,1,1) et un point (2,2,2) (fais un schéma) auront la meme coordonnée sur le plan !

6. glLoadIdentity();
Réinitialise la matrice active, tout simplement.

7. Si le vecteur up n'est pas orthogonal a l'axe de vue, et pas normalisé, tu risque l'écran noir au rendu, tout simplement
Il faut qu'il aie la norme 1, et la direction défini donc la vue.

8.
a) Est-ce que cette fonction affecte les réglages de la caméra ?
oui et non : ça modifie GL_MODEL_VIEW, tout comme la caméra, mais c'est tout. (n'oublie pas que la caméra ne bouge pas, elle est dans le repere absolu, mais le gluLookAt "simule" qu'elle bouge, en appliquant une transformation aux points que tu placeras)
note : place le glulookat avant tout gltranslate
b) Est-ce que cette fonction est obligatoire ? Je dirais que non, si on connais les coordonnées exactes des points à afficher...
non, pas obligatoire, si tu connais les coordonnées de ton point, tu peux les mettre directement.
c) Si on l'utilise plusieurs fois sans réinitialiser la matrice, je suppose qu'on se déplace par rapport à la position précédente ? Par exemple, si on veut dessiner 50 arbres en enfilade, on se déplace 50 fois de 1 pas plustot que de réinitialiser à chaque fois non ?
oui, tu te déplaces par rapport a la position précédente : mathématiquement, tu multiplies l'ancienne matrice par la nouvelle pour en refaire une, que tu pourras de nouveau multiplier si tu veux.
d) Existe-t-il une fonction équivalente pour faire faire une rotation au systeme de coordonnées ? (utile pour coder de la physique je suppose) ou bien est-ce qu'on se contente de gérer ca avec la position de la caméra ?
glRotate, glScale.

[color=blue]
9.
peut-on imbriquer les
Code:
glBegin( GL_TRIANGLES );
glEnd( );

non. ça n'a pas grand intéret d'ailleurs Smile

10.
Question plus générale:
Est-il interessant de faire plein de POO pour les trucs à afficher ?
Où chaque objet gère lui-même son propre affichage...

ben ouais si tu veux Smile ça se fait bien !
Revenir en haut Aller en bas
http://perso.numericable.fr/fvirtman
le_duche

le_duche


Nombre de messages : 60
Age : 39
Localisation : Bruxelles
Date d'inscription : 07/12/2005

Quelques questions de base Empty
MessageSujet: Re: Quelques questions de base   Quelques questions de base EmptyVen 27 Jan à 10:37

Cool merci ! Cool
Revenir en haut Aller en bas
Contenu sponsorisé





Quelques questions de base Empty
MessageSujet: Re: Quelques questions de base   Quelques questions de base Empty

Revenir en haut Aller en bas
 
Quelques questions de base
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Quelques petites questions svp

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Virtual FMAN forum :: Tutorial C++ :: OpenGL-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser