IMT - Lille Douai
 
IMT



TP : 3D Multitouch

Objectifs

Les sources nécessaires au TP sont disponibles ici.


Figure 1: Capture d’écran de l’application.

Travail à réaliser :

1  Matériel à disposition

Vous avez à disposition une interface écrite en JavaFX qui permet d’afficher des objets 3D et supporte une interaction multitouch réelle ou simulée à la souris. La classe MultiTouch3D permet d’afficher un cube et d’obtenir les informations des points de contact grâce aux méthodes setOnTouchXXX. Si vous utilisez la souris, un clic gauche permet de créer ou déplacer un point de contact alors qu’un clic droit permet de supprimer des points de contact (la classe BlobQueue gère ces informations).

2  Compréhension du code

Familiarisez-vous avec le code. Notamment, essayer de comprendre ce qu'il se passe lorsqu'un point de contact est ajouté/supprimé et surtout lorsqu'un blob/point de contact est déplaçé pour decider si celui-ci avait initialement été ajouté au Cube 3D ou pas.

3  Ajout de méthodes permettant de recuperer le nombre de doigts en contact, et leurs origines

Q 1. Ajoutez et initialisez dans la classe BlobQueue un attribut de type HashMap qui permettra de stocker quel Node JavaFX se situait sous la position initiale du doigt au moment du contact, ainsi que des méthodes qui vont permettre de tenir cette HashMap à jour (indice, il faudra écrire une méthode addNodeForID et modifier la méthode remove existante). Ensuite, ajoutez dans la classe Main un appel à addNodeForId quand nécessaire. Enfin, ajoutez dans la classe BlobQueue deux methodes: une qui permet de savoir combien de doigts sont en contacts avec l'interface et une autre qui permet de recuperer le Node correspondant à un Id de doigt.

4  Translation: implémentation de la Z-technique

Q 2. Implémentez la Z-technique décrite dans l’article "The Design and Evaluation of 3D Positioning Techniques for Multi-touch Displays": lorsqu’un premier doigt est posé sur un objet, les déplacements ultérieurs de ce doigt permettent de translater l’objet dans un plan parallèle à l’écran (il ne doit pas y avoir de déplacement relatif entre le doigt et l’objet translaté). Quand un second doigt est posé en dehors de cet objet, les déplacements haut/bas (ou avant/arrière, en fonction l’orientation) servent à contrôler les déplacements en profondeur de cet objet.
Indications: Lors d’un événement souris PickResult contient des informations sur l’objet présent sous le pointeur, dont le point d’intersection avec l’objet, défini dans le repère local de l’objet. Utilisez la méthode localToParent pour exprimer ces coordonnées dans le repère global.

5  Rotation: trackball virtuelle

Q 3. Ajoutez une technique de trackball virtuelle pour orienter l’objet quand 2 doigts sont en contact sur celui-ci. Une classe Quaternion est mise à votre disposition pour calculer correctement les rotations. Faire une rotation relative d’un objet d’un angle donné autour d’un axe donné revient à calculer le produit du quaternion associé par le quaternion représentant la rotation courante de l’objet.


Ce document a été traduit de LATEX par HEVEA