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](https://2img.net/i/fa/i/smiles/icon_smile.gif)
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](https://2img.net/i/fa/i/smiles/icon_smile.gif)
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](https://2img.net/i/fa/i/smiles/icon_smile.gif)
ça se fait bien !