Dans un nouveau fichier entête decl_vect_matr.h on a le code suivant :
#include <d3d9.h>
D3DMATRIX identite(void);
Puis dans le fichier vect_matr.cpp on aura la fonction identite :
#include "decl_vect_matr.h"
D3DMATRIX identite(void) {
// matrice identite
D3DMATRIX ident;
ZeroMemory( &ident, sizeof(D3DMATRIX));
// création de la matrice identité
ident._11 = ident._22 = ident._33 = ident._44 = 1;
return ident;
}
La structure D3DMATRIX qui représente une matrice carrée de 4 x 4 est définie ainsi :
_11 | _12 | _13 | _14 |
_21 | _22 | _23 | _24 |
_31 | _32 | _33 | _34 |
_41 | _42 | _43 | _44 |
La matrice Identité c'est :
1 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 0 | 0 | 1 |
Dans le fichier source principal on initialise les deux modules.
#include <windows.h>
#include "init_D3D.h"
#include "decl_init_D3D.h"
#include "tutor.h"
#include "decl_vect_matr.h"
...
// Initialise Direct3D
if(( SUCCEEDED( InitD3D(hCtrl_1, LONG_FENETRE, HAUT_FENETRE, &obj_Direct3D, &obj_Direct3DDevice))
&&
SUCCEEDED( InitD3D(hCtrl_2, LONG_FENETRE, HAUT_FENETRE, &obj_Direct3D2, &obj_Direct3DDevice2))
) == E_FAIL)
return -1;
_module_ *module1 = new _module_;
_module_ *module2 = new _module_;
module1->position_cam.x = 0.0f;
module1->position_cam.y = 0.0f;
module1->position_cam.z = -70.0f;
module1->monde = identite();
module1->rot_cam = 0.0f;
module1->coef_rotation_module = 0.0f;
module1->coef_vitesse_module = 0.0f;
module1->coef_cam = 0.0f;
module1->module_rot = 0.0f;
module1->coord_0.x = 0.0f;
module1->coord_0.y = 0.0f;
module1->coord_0.z = -50.0f;
module1->rayon = 20;
module1->collision = 0;
module1->missile = NULL;
module2->position_cam.x = 0.0f;
module2->position_cam.y = 0.0f;
module2->position_cam.z = -70.0f;
module2->monde = identite();
module2->rot_cam = 0.0f;
module2->coef_rotation_module = 0.0f;
module2->coef_vitesse_module = 0.0f;
module2->coef_cam = 0.0f;
module2->module_rot = 0.0f;
module2->coord_0.x = 0.0f;
module2->coord_0.y = 0.0f;
module2->coord_0.z = 50.0f;
module2->rayon = 20;
module2->collision = 0;
module2->missile = NULL;
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
On peut remarquer que la matrice représentant le Monde est à la base une matrice identité.
Téléchargez la source, cliquez ci-dessous :