M1-Images

TP2 - application interactive


L'objectif du tp est de comprendre comment écrire une application interactive, qui modifie son affichage en fonction des actions de l'utilisateur. gKit2 propose plusieurs outils : gestion simplifée du clavier et des gamepads. La gestion de la souris se fait directement en utilisant les fonctions de SDL2.


Partie 1 : contrôle

créez un nouveau projet, cf tp précédent (créez un repertoire, copiez un squelette d'application, modifiez premake4.lua, générez le projet pour votre environnement de travail...)

exercice 1 : affichage

décrivez un objet simple, un cube par exemple, dans la fonction App::init(), puis affichez le, dans la fonction App::render(), avec les transformations par defaut / matrice identité.


exercice 2 : clavier

utilisez keystate( ) / clear_keystate( ) documentées dans window.h pour déplacer votre objet à gauche / à droite.
(à quoi peut servir clear_keystate() dans ce cas ?)

quelle transformation utiliser pour déplacer l'objet ? quelle matrice faut il modifier (cf les paramètres de draw(mesh, model, view, projection) dans draw.h ?
et si on souhaite faire tourner l'objet sur lui meme, quelle est la transformation à utiliser ?

les touches du clavier sont soit directement associées à un caractère cf key_state('a'), soit à un code cf SDL Keycode, colonne Keycode.

vérifiez que vous pouver déplacer votre objet avec des touches classiques et avec les touches fleche / direction.


indication : récupérer l'état d'une touche peut se faire dans la fonction App::render( ), au moment de l'affichage, ce qui est très pratique, ou dans la fonction App::update( ).


exercice 3 : contrôle souris

utilisez SDL_GetMouseState( ) ou SDL_GetRelativeMouseState( ) pour déplacer votre objet.


bonus : contrôle gamepad

regardez la doc de la structure Gamepads, les boutons des pads sont associés à un code, cf SDL_CONTROLLER_BUTTON ainsi que les axes, cf SDL_CONTROLLER_AXIS.


Partie 2 : et la caméra ?

et pour déplacer la camera, quelle matrice faut-il modifier dans draw(mesh, model, view, projection) ?

exercice 1 : clavier

déplacez la camera à l'aide du clavier.


exercice 2 : au dessus d'un objet

comment modifier la position de la camera pour qu'elle reste toujours au dessus d'un objet quelque soit le déplacement de l'objet ?


exercice 3 : au dessus d'un autre objet

affichez un autre objet et modifiez le "comportement" de la camera pour qu'elle suive soit le premier objet, soit le second.


exercice 4 : quelquepart au milieu

modifiez le "comportement" de la camera afin qu'elle passe de la position d'un objet à l'autre en "souplesse".


exercice 5 : toujours plus loin

quelle matrice faut-il modifier dans draw(mesh, model, view, projection) pour changer la distance à laquelle les objets sont visibles ?