| ||||||||||||||||||||||||
Pour que OpenGl fasse un rendu 3D il faut lui dire quel volume il doit afficher, pour cela nous avons la fonction :
Mais cela ne suffit pas, il faut aussi préciser le mode de calcul :
Ici on indique à OpenGl d'utiliser un mode de projection (couramment utilisé pour faire du rendu 3D). Pour faire un rendu OpenGl utilise des matrices, mais pour les utilisées il faut les initialiser :
Cette fonction initialise la matrice de projection comme une base canonique de matrice (4,4), (des 1 sur la diagonale et des 0 partout ailleurs) : Pourquoi une matrice 4x4 ? Nous n'allons pas rentrer dans les détails, mais c'est un moyen de pouvoir faire des translations et des rotations en même temps. Encore une chose : le z-buffer, il est très important en 3D, il permet de mettre en place une sorte de système de priorité pour que les formes affichée en premier au premier plan ne soient pas recouvertes par le fond (par défaut OpenGl affiche dans l'ordre des appels). Pour l'initialiser :
Mais cela ne suffit pas dans la boucle il faut aussi effacer le z-buffer :
Devient :
Donc si on se résume l'initialisation va ressemblé à cela :
Vous pouvez déjà commencer à vous amuser avec ça, mais sans caméra, vous avez de grandes chances de vouloir afficher quelque chose se trouvant en fait derrière vous. Donc vous ne voyez rien alors que vous avez effectivement fait un appel pour faire un affichage.
Où :
Le mieux c'est encore un exemple. Je vous conseil de faire cet exemple dans un nouveau dossier. Dans un fichier main.cpp :
Je vous conseil de rajouter des constantes pour la taille de la fenêtre, ça évite de devoir changer tout les paramètres que l'on passe aux fonctions dès que l'on veut changer la taille de la fenêtre. La fonction d'affichage :
La fonction main :
Voici le CMakeLists.txt qui correspond :
Donc, vous créez un nouveau dossier build : mkdir build Ensuite vous entrez dedans : cd build Et vous appelez CMake : cmake .. -- The C compiler identification is GNU -- The CXX compiler identification is GNU -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Looking for include files CMAKE_HAVE_PTHREAD_H -- Looking for include files CMAKE_HAVE_PTHREAD_H - found -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE CMake Warning at CMakeLists.txt:5 (find_package): Could not find module FindOpenGl.cmake or a configuration file for package OpenGl. Adjust CMAKE_MODULE_PATH to find FindOpenGl.cmake or set OpenGl_DIR to the directory containing a CMake configuration file for OpenGl. The file will have one of the following names: OpenGlConfig.cmake opengl-config.cmake -- Configuring done -- Generating done Ensuite on appel Make : make Scanning dependencies of target exOpengl3d [100%] Building CXX object CMakeFiles/exOpengl3d.dir/main.cpp.o Linking CXX executable exOpengl3d [100%] Built target exOpengl3d Exécutons le programme : ./exOpengl3d L'affichage du triangle est déformé car on le voit de biais maintenant. Maintenant qu'on fait vraiment de la 3D vous pouvez tester toutes les formes que fournit OpenGl. | ||||||||||||||||||||||||
|