Placement du labyrinthe, du module adverse et du missile adverse dans le back buffer. 

Pour que le labyrinthe reste à sa place nous le déplaçons suivant la rotation et les coordonnées cartésiennes du module. Pour cela on effectue une translation combinée à la rotation.

cell = cell->suivant;
if (destr == 1) {destr = 0;}

}
rp->monde._41=rp->coord_0.x*cos(rp->module_rot)+rp->coord_0.z*sin(rp->module_rot);
rp->monde._43=-rp->coord_0.x*sin(rp->module_rot)+rp->coord_0.z*cos(rp->module_rot);

rotation_Y(&rp->monde, rp->module_rot);

projection(&rp->monde, &(*D3DD));

obj2device_dessin_mesh(mtm_laby->nbr_de_mat, mtm_laby, &(*D3DD), &mtm_laby->obj_mesh);

Pour placer le module adverse on réinitialise la matrice du module

rp2->monde._42 = -15.0f;
rp2->monde._43 = 0.0f;
rp2->monde._41 = 0.0f;
rp2->monde._11 = rp2->monde._33 = 1.0f; rp2->monde._13 = rp2->monde._31 = 0.0f;

On calcule ensuite le vecteur qui joint les deux modules :

v = (rp->coord_0.x-rp2->coord_0.x , rp->coord_0.z-rp2->coord_0.z)

unsigned int vz = rp->coord_0.z - rp2->coord_0.z;
unsigned int vx = rp->coord_0.x - rp2->coord_0.x;

Pour placer le module adverse on effectue une translation suivant le vecteur v combinée à la rotation du module 0. Puis on effectue une autre rotation suivant le module 1, mais comme il est à l'opposé de nous l'angle doit être inversé.
rp2->monde._41=vx*cos(rp->module_rot)+vz*sin(rp->module_rot);
rp2->monde._43=-vx*sin(rp->module_rot)+vz*cos(rp->module_rot);

rotation_Y(&rp2->monde, rp->module_rot-rp2->module_rot);

projection(&rp2->monde, &(*D3DD));

obj2device_dessin_mesh(mtm_moduleb->nbr_de_mat, mtm_moduleb, &(*D3DD), &mtm_moduleb->obj_mesh);

Enfin on effectue le même raisonnement pour tous les missiles adverses.

cell = rp2->missile;

while(cell) {

rp2->monde._42 = -15.0f;
rp2->monde._43 = 0.0f;
rp2->monde._41 = 0.0f;
rp2->monde._11 = rp2->monde._33 = 1.0f; rp2->monde._13 = rp2->monde._31 = 0.0f;

vz = rp->coord_0.z - cell->coord.z;
vx = rp->coord_0.x - cell->coord.x;

rp2->monde._41=vx*cos(rp->module_rot)+vz*sin(rp->module_rot);
rp2->monde._43=-vx*sin(rp->module_rot)+vz*cos(rp->module_rot);

rotation_Y(&rp2->monde, rp->module_rot - cell->t_rot);

projection(&rp2->monde, &(*D3DD));

obj2device_dessin_mesh(mtm_missile->nbr_de_mat, mtm_missile, &(*D3DD), &mtm_missile->obj_mesh);

cell = cell->suivant;
}

Téléchargez la source, cliquez ci-dessous :