La projection, le dessin du mesh

Une fois l'objet mit en place sur les matrice il faut effectuer une projection et dessiner l'objet. Dans cam_mde.cpp on aura :

void projection(D3DMATRIX *matrice, LPDIRECT3DDEVICE9* _obj_Direct3DDevice) {
(*_obj_Direct3DDevice)->SetTransform( D3DTS_WORLD, matrice);
}

la fonction obj2device_dessin_mesh quand a elle est placée dans mesh.cpp

void obj2device_dessin_mesh(unsigned int n, _mesh_ *mtm, LPDIRECT3DDEVICE9 *_obj_Direct3DDevice, LPD3DXMESH *_obj_mesh) {

for (unsigned int i=0; i<n; i++) {
(*_obj_Direct3DDevice)->SetMaterial(&(mtm->Materiaux[i]));
(*_obj_Direct3DDevice)->SetTexture(0, mtm->Textures[i]);
(*_obj_mesh)->DrawSubset(i);

}
}

Dans decl_cam_mde.h on aura :

#include <d3d9.h>

void vue(_module_*, D3DVECTOR, LPDIRECT3DDEVICE9*);
void vue_settransf(_module_*, LPDIRECT3DDEVICE9*);
D3DMATRIX* matr_persp(float, float, float);
void perspective(D3DMATRIX*, LPDIRECT3DDEVICE9*);

void projection(D3DMATRIX*, LPDIRECT3DDEVICE9*);

Et dans decl_mesh.h on aura :

#include <d3dx9mesh.h>
_mesh_ *charge_mesh(char*, LPDIRECT3DDEVICE9 *);

void obj2device_dessin_mesh(unsigned int, _mesh_*, LPDIRECT3DDEVICE9*, LPD3DXMESH*);

On aura dans la fonction rendu

perspective(mat_proj, &(*D3DD));

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

D3DMATRIX buff_mde = rp->monde;

rotation_Y(&rp->monde, -rp->rot_cam/4);

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

rp->monde = buff_mde;

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

on réinitialise la matrice monde, -15 permet de déplacer le module en avant. buff_mde permet de conserver les valeurs de la matrice monde après avoir effectuer une rotation sur l'axe des Y.

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