Bonjour à tous,
Je prends un peu le temps d'avancer un projet laissé de côté il y a quelques mois, lié à l'intelligence artificielle, mais dans lequel je nécessite une représentation graphique.
Pour se faire, mon choix s'est porté sur SFML et l'utilisation de GLM pour tout ce qui est déplacements, le but étant de permettre une éventuelle évolution vers un rendu plus complexe et sous openGL. initialement, les déplacements étaient "hard codés" avec les fonctions trigo de base, et fonctionnaient correctement, mais ça avait ses limites.
Le projet est simple, dans un premier temps sans utilisation de mon "moteur IA", et consiste simplement à déplacer des pastilles de couleur dans un espace continu (en 2D), chacune étant indépendante des autres.
J'ai de solides bases en méca générale de part ma formation initiale, mais concernant la compréhension du fonctionnement des transformations GLM, j'ai un peu plus de mal (question d'organisation du code je pense).
En effet, j'ai bien compris le fait de donner une matrice de transformation globale à mon objet, je comprends, bien entendu, l'ordre de ces transformations (rotation puis translation). Mais peu importe la manière dont je traite le sujet, les rotations se font toujours par rapport au repère de base et non par rapport à la position précédente de mon objet.
Étant en période de test, le code est assez simpliste et pas forcément propre. Dans un premier temps, je veux comprendre l'implémentation des transformations avec glm.
Ici, le code de mon objet :
Et là, le code du thread d'affichage (en gros, la boucle principale quoi) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Je vous fait grâce de l'implémentation du reste du code, selon moi, inutile à la compréhension du problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Le code tel que présenté ci dessus fonctionne bien. Une pastille de couleur rouge est bien affichée au centre de la fenêtre. Mais si je lui demande une rotation, cette dernière se fait depuis le point 0,0,0 et non sur l'objet lui-même.
J'ai bien tenté de conserver le "m_trans" plutôt que de le rendre identité dans la fonction "agent::update()", mais dans ce cas la translation 400, 300, 0 se répète 144 fois par secondes (c'est mon framerate) à partir du moment où m_pos = m_trans * m_pos;
Bref, j'ai l'impression d'être proche de la réponse mais je n'arrive pas à voir comment tourner mon code pour que ça fonctionne... Tous les exemples que je trouve sur le net concernant glm ne traitent quasiment que de son application en 3D sur de l'openGL pur. En ce qui me concerne, openGL viendra plus tard, et en 2D seulement dans un premier temps.
Pour info, il me faut impérativement
- une fonction pour tourner l'objet sur lui-même
- une fonction pour translater (que je déclinerais peut être plus tard en 4 fonctions : avant, gauche, arrière, droite selon l'intégration de mon IA à l'application)
Voilà. Si certains se sont déjà cassés les dents (ou pas d'ailleurs) sur ce sujet, je serais heureux de connaître votre recette ! Merci d'avance.

 

 
		
		 
         
 

 
			
			

 
			 
   
 


 transformations GLM et SFML
 transformations GLM et SFML
				 Répondre avec citation
  Répondre avec citation

 
  
 
 
			 
  
Partager