begin process at 2012 05 29 13:11:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

DirectX

 > 

Mesh: mise à l'echelle


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Mesh: mise à l'echelle

dimanche 4 juin 2006 à 15:51:35 | Mesh: mise à l'echelle

THEwarrior333

Salut a tous

Voila j'arrive à afficher des meshs et a les animer mais je souhaiterais les mettre à l'echelle car certains meshes .x sont super grands (comme la tiny du sdk). Je pense qu'il faut multiplier les vertices du mesh par une matrice du genre
|s   0   0   0|
|0   s   0   0|
|0   0   s   0|
|0   0   0   1|
avec s<1 ca devrait pouvoir réduire le mesh.
mais je sais pas comment on accede aux vertices du mesh animé ou non. Peut etre aussi qu'il y a une autre méthode...
Si qqun pouvait m'aider je lui serai tres reconnaissant.

< body>

mardi 6 juin 2006 à 14:08:00 | Re : Mesh: mise à l'echelle

Galmiza

Réponse acceptée !
Salut,

Attention !
Un sommet (vertice) est un ensemble de données qui concerne un point, c'est à dire :
des positions, des normales, des binormales, des tangentes, des couleurs, des coordonnées textures, des constantes, bref TOUT ce qu'on veut.
La plupart du temps (1 position, 1 normale, 1 couple de coordonnées textures, 1 couleur).
Chaque donnée est caractérisée (entre autres) par un usage (ex: position) et un format (ex: 3 floats).


1. Récupérer la déclaration des vertices:


LPDIRECT3DVERTEXDECLARATION9    m_pVertexDeclaration;
UINT uiMaxSize = MAX_FVF_DECL_SIZE;

D3DVERTEXELEMENT9 m_Declaration[uiMaxSize ]; // permet d'accéder à l'usage et

GetVertexDeclaration(&m_pVertexDeclaration);

m_pVertexDeclaration->GetDeclaration(m_Declaration, &uiMaxSize );

2.
Localiser les informations sur la position de chaque vertice:

J'ai pas fait de code dessus. Regarde les propriétés de D3DVERTEXELEMENT9 et tu comprendras comment procéder.

3. Lire et d'ecrire sur le vertex buffer

void *pVertices;  // pointeur pour pointer les vertices
m_pVertexBuffer->Lock(0, m_dwNumBytePerVertex*m_dwNumVertices, &pVertices, 0);  // récupération de l'adresse des vertices

 // . écriture ou lecture
m_pVertexBuffer->Unlock();  // on débloque le buffer


Avec ça tu as de quoi trouve ton bonheur.
Si j'ai le temps je ferais une source dessus.

mardi 6 juin 2006 à 18:45:58 | Re : Mesh: mise à l'echelle

THEwarrior333

OK merci bcp pour ta réponse bien complete.
Afin que cela serve à d'autres, voici une explication de ma situation:
jusqu'ici pour réduire la taille de mes meshes j'optais pour la solution suivante:

D3DXMatrixScaling(&matScaling, 0.0035f, 0.0035f, 0.0035f); // On définit une matrice de mise a l'echelle

  g_pd3dDevice->SetTransform( D3DTS_WORLD, &(matScaling * matTranslation) );
// et aussi pourquoi pas * matRotation

  // AFFICHAGE du mesh , animé ou non  

Ca marche bien mais ca signifie que l'on doit effectuer une multiplication (matScaling * matTranslation) et un SetTransform à chaque boucle, même qd le mesh n'a pas à bouger. Donc pas tres optimisé...

C'est pourquoi je souhaitais mettre a l'echelle chaque mesh avant la boucle de rendu, une fois pour de bon, et ne transformer D3DTS_WORLD que lorsqu'un mesh doit bouger.
Je vais donc regarder ce que tu m'as indiqué, Galmiza, pour effectuer la conversion sur les coordonnées de chaque vertice (merci pour la précision, je suis allé un peu vite!).



Cette discussion est classée dans : echelle, mesh, vertices


Répondre à ce message

Sujets en rapport avec ce message

Création d'un Mesh sous Directx [ par Itsuki2 ] Bonjour,   Je cherche à créer un Mesh et non pas à en charger un à partir d'un .xComme j'ai un peu de mal avec l'anglais, et que la doc fourni dans le Deplacer un mesh ? [ par bilaloch ] Bonjour tout le monde,Comment pourrais je deplacer un objet 3D (mesh) en DirectX ? Je sais le charger, mais pour le deplacer dans le monde 3D je n'ai Probleme pour charger un objet 3D (.obj) dans une scene [ par adess00 ] Salut salut Donc en faite je vien de faire une f° qui recupere les vertices dans le fichier .obj . Pour tester j ai pris un cube, mais le probleme es Gestoin de souris en C++ [ par Wickedwolf ] Bonjour,je débute en C++ en suivant un cours d'infographie proposée dans mon cursus universitaire. Le projet de cette année consite en la création d'u initialiser les vertex dans une boucle for [ par StrikerFred ] salut a tousj'avance a petits pas dans la création d'un jeu 3d.je voulais faire un grand sol de plein de petits carré. Pour ca, (même technique que po les collisions [ par StrikerFred ] bonjour !bon maintenant que je sais créer des vertices (sans textures pour le moment) et me déplacer, j'aimerais mettre des collisionsalors vous allez D3DX CreateSphere [ par lrou13 ] < Création d'un mesh à partir de points. --> Stack overflow [ par rotfa ] Salut à tous.Je suis entrain de développer une game-engine spécifique qui pourrait être utilisé dans des cours pour faire des démos et développer des Utilisation d'une DLL sans .DEF et .LIB [ par ZJP ] Bonjour, Venant de Blitz3D (Basic) et developant depuis peu sous DEVC++ et Code::block, mon problême est le suivant: Comment utiliser des DLLs Class directx mesh face a la direction [ par sam20 ] Salut a tous.Voila mon pb.J'affiche la mesh et je lui donne une position ainsi qu'une direction.Je voudrai orienter ma mesh vers la direction.x,y,z =p


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales