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.
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...)
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é.
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( ).
utilisez SDL_GetMouseState(
) ou SDL_GetRelativeMouseState(
) pour déplacer votre objet.
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.
et pour déplacer la camera, quelle matrice faut-il modifier dans draw(mesh, model, view, projection) ?
déplacez la camera à l'aide du clavier.
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 ?
affichez un autre objet et modifiez le "comportement" de la camera pour qu'elle suive soit le premier objet, soit le second.
modifiez le "comportement" de la camera afin qu'elle passe de la position d'un objet à l'autre en "souplesse".
quelle matrice faut-il modifier dans draw(mesh, model, view, projection) pour changer la distance à laquelle les objets sont visibles ?