Mmh... Vous avez soulevé le problématique problème des collisions !!
Vous avez pratiquement tout deviné sur l'édition du vaisseau :
Je récapitule :
- les sommets sont numérotés sur les schéma (les 40

)
- le centre du repère est pris n'importe ou, mais de préférence au centre (de gravité ou pas) du vaisseau... effectivement pour quand le vaisseau tourne sui lui-même...
- Les deux colonnes à gauche sont les coordonnées de tous les points
- La colonne à droite est bien la définition des faces, en un seul tableau avec dans l'ordre, le nombre de sommets de la face, les index des points qui constituent la face, et le 0 ou 1 final indique : 0 face visible que d'un coté (coté direct) et 1 face visible des deux cotés (les ailes !!

)
Les faces visibles que d'un coté servent pour le backface culling (ne pas dessiner les faces tournées vers l'arrière)...
Le format de stockage est un seul tableau, mais ca n'est pas du tout pratique pour accéder au sommets d'une certaine face (il faut avancer progressivement grace au nombre de sommets de chaque face). Donc au début du programme, j'alloue de l'espace pour un tableau structures "face" avec un nombre de sommet fixe (une dizaine)...
Le but est évidemment de limiter la taille de stockage des données...
Pour chaque vaisseau, je définis une liste de points, une liste de polys, une liste de points "extrémités" et une liste de points "canons".
Ces informations sont regroupées dans un structure SHIP_INFO pour chaque vaisseau :
/**************************** Définition du TIE Bomber ****************************/
Vertex tieBVertices[40] = {{80,30,-70}, ...};
short tieBPolys[]= {6, 9,8,7,2,1,0, 0,
6, 7,6,5,4,3,2, 0,
6, 10,11,12,17,18,19, 0,
6, 12,13,14,15,16,17, 0, // Facades avant et arrières
4, 0,1,11,10, 0, // Corps
4, 2,12,11,1, 0,
4, 3,13,12,2, 0,
4, 4,14,13,3, 0,
4, 5,15,14,4, 0,
4, 6,16,15,5, 0,
4, 7,17,16,6, 0,
4, 8,18,17,7, 0,
4, 9,19,18,8, 0,
4, 0,10,19,9, 0,
2, 20,21, 1, // Bras
4, 22,23,27,26, 1, // Aile
4, 23,24,28,27, 1,
4, 24,25,29,28, 1,
2, 30,31, 1, // Bras
4, 32,33,37,36, 1, // Aile
4, 33,34,38,37, 1,
4, 34,35,39,38, 1 };
short tieBEnds[8] = {32,22,25,35,36,26,29,39};
short tieBCanons[2] = {20,30};
SHIP_INFO tieBInfo = {tieBVertices, 40, tieBPolys, 22, tieBEnds, tieBCanons, "TIE Bomber", -33, 0.5};
Il y a quelques différences entre ma feuille de cahier et le code au dessus, c'est parce que je m'étais gouré dans les orientations des faces...
La detection des collisions est faite uniquement grace au tableau tieBEnds.
Le temps de faire un ptit dessin et je vous explique comment je fais.