Make your own free website on Tripod.com

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 :