M1-Images

TP1 - primitives et transformations


prise en main de gKit :

installez gKit et ses dépendances. 

compilez la doc avec doxygen. 
Elle sera consultable dans html/index.html. Les classes de bases sont documentées dans la partie "modules" de la documentation générée.

compilez tutos/tuto1.cpp et tutos/tuto2.cpp et vérifiez que tout fonctionne.


n'oubliez pas qu'il y a des tutos dans la doc...


Partie 1 : triangulation et orientation.

exercice 1 : carré / rectangle

lisez le tuto sur la création d'une application openGL, et les 2 versions plutot C cf tutos/tuto2.cpp, ou plutot C++, tutos/tuto6.cpp

compilez tutos/tuto2.cpp et utilisez la classe Mesh pour décrire un carré, modifiez la fonction init(). Pour afficher l'objet, il faudra modifier la fonction draw( ).



quelle orientation utiliser pour décrire les sommets du carre ?
comment indiquer à openGL celle que vous avez choisi ?

il y a 2 manières d'utiliser les fonctions de Mesh :
Mesh mesh= Mesh(GL_TRIANGLES);

// 1er triangle
mesh.vertex(x, y, z);
mesh.vertex(x, y, z);
mesh.vertex(x, y, z);

// 2ieme triangle
mesh.vertex(x, y, z);
mesh.vertex(x, y, z);
mesh.vertex(x, y, z);
Mesh mesh= Mesh(GL_TRIANGLES);

// sommets
unsigned int a= mesh.vertex(x, y, z);
unsigned int b= mesh.vertex(x, y, z);
unsigned int c= mesh.vertex(x, y, z);
unsigned int d= mesh.vertex(x, y, z);

// triangle indexes
mesh.triangle(a, b, c);

vérifiez que l'orientation de vos triangles est correcte. par défaut la fonction draw(mesh) affiche les triangles mal orientés avec des hachures oranges. 
activez ou désactivez le test d'élimination des faces arrières (back face culling, cf tuto3GL) et changez l'orientation.

remarque : on peut définir une couleur par sommet avec mesh.color(Color(r, g, b));

exercice 2 : transformations

et avec 2 carrés ? l'un à coté de l'autre ?

vous pouvez construire 2 meshs avec des coordonnées différentes, mais utiliser les transformations est beaucoup plus souple. cf Translation( ), RotationZ( ) (pourquoi Z ?) dans mat.h... 

et fournir 2 transformations différentes aux carrés pour qu'il s'affichent à des endroits différents : cf draw(mesh, model, view, projection).
Pour afficher le même objet à deux endroits différents, il faut modifier la transformation model...

Mesh mesh= Mesh(GL_TRIANGLES); 

// ajouter des sommets au mesh
{ ... }

// afficher le premier carre directement, sans transformations
draw(mesh, Identity(), Identity(), Identity());

// afficher le 2ieme, avec une transformation pour le deplacer :
Transform m= Rotate??( ... );

draw(mesh, m, Identity(), Identity());


et si on fait tourner le 1er, comment faire bouger le 2ieme afin qu'il conserve la meme position relative ?

il est assez simple de contrôler l'animation au clavier, cf tutos/tuto3.cpp


et si la camera bougeait ? quelle transformation utiliser ?

pour vérifier, modifiez la transformation view de draw(mesh, model, view, projection);


Partie 2 : projets et premake.

lisez la section de la doc : Installation

vérifiez que vous avez tout compris.

créez un nouveau repertoire projet/ et copiez un des tutos dedans, tutos/tuto8.cpp, par exemple.
décrivez ce nouveau projet dans premake4.lua, regenerez les projets pour votre environnement de travail et vérifiez que tout fonctionne.