[C++] D3D

D3D [C++] - C++ - Programmation

Marsh Posté le 28-02-2003 à 18:30:41    

Bonjour,
 
Je suis en train de creer un moteur 3D, j'ai une classe qui charge un fichier x et l'afficher à l'écran.  
 
J'utilise ce type de fonction :
 
D3DXMatrixTranslation
D3DXMatrixRotation
 
pour effectuer des mouvements sur la scene en entiere. COmment proceder pour changer la position d'un seul object a la fois. Quelles sont les variables a utiliser pour changer la position de mes objets.
 
Voici les variables de ma classe CMeshes:
LPD3DXBUFFER pD3DXMtrlBuffer;
D3DXMATERIAL* d3dxMaterials;
LPD3DXMESH g_pMesh;
D3DMATERIAL8* g_pMeshMaterials;
LPDIRECT3DTEXTURE8* g_pMeshTextures;
DWORD g_dwNumMaterials;
LPD3DXBUFFER g_pMeshPoints;
 
Je suis perdu aidez moi  :cry:

Reply

Marsh Posté le 28-02-2003 à 18:30:41   

Reply

Marsh Posté le 28-02-2003 à 18:44:42    

Si mes questions demandent précisions, dites le moi :)

Reply

Marsh Posté le 28-02-2003 à 18:46:42    

Tu appelles
 
IDirect3DDevice9::SetTransform(D3DTS_WORLD, maMatrice)


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 28-02-2003 à 19:05:59    

void CMeshes::LoadFileX(char* name, LPDIRECT3DDEVICE8 TheDevice)
{
 D3DXLoadMeshFromX( name, D3DXMESH_SYSTEMMEM,  
                                   g_pd3dDevice, &g_pMeshPoints,  
                                   &pD3DXMtrlBuffer, &g_dwNumMaterials,  
                                   &g_pMesh );
 
 d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
    g_pMeshMaterials = new D3DMATERIAL8[g_dwNumMaterials];
    g_pMeshTextures  = new LPDIRECT3DTEXTURE8[g_dwNumMaterials];
 
     
 for( DWORD i=0; i<g_dwNumMaterials; i++ )
    {
        // Copy the material
        g_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;
 
        // Set the ambient color for the material (D3DX does not do this)
        g_pMeshMaterials[i].Ambient = g_pMeshMaterials[i].Diffuse;
     
        // Create the texture
        if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice,  
                                               d3dxMaterials[i].pTextureFilename,  
                                               &g_pMeshTextures[i] ) ) )
        {
            g_pMeshTextures[i] = NULL;
        }
    }
 
 
    // Done with the material buffer
    pD3DXMtrlBuffer->Release();
 
 
 
}
 
C'est ma fonction qui charge un fichier x, ou est ce que je peux récuperer ma matrice de mon objet ?

Reply

Marsh Posté le 28-02-2003 à 19:34:44    

ghiby a écrit :


C'est ma fonction qui charge un fichier x, ou est ce que je peux récuperer ma matrice de mon objet ?


 
Quelle "matrice de ton objet" ?  :heink:


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 28-02-2003 à 19:45:44    

Je souhaite faire une translation sur un objet issue de ma classe, j'ai une fonction draw, load, il me faut faire move maintenant ! Ma phrase n'est pas trés rigoureuse je te l'accorde, mais mon but est de translater une instance de ma classe CMeshes, tu me proposes d'effectuer une translation sur "maMatrice" mais je ne sais pas quel matrice utiliser.
 
la fonction HRESULT D3DXLoadMeshFromX(
  LPSTR pFilename,
  DWORD Options,
  LPDIRECT3DDEVICE8 pDevice,
  LPD3DXBUFFER* ppAdjacency,
  LPD3DXBUFFER* ppMaterials,
  PDWORD pNumMaterials,
  LPD3DXMESH* ppMesh
);
 
stock les coordonnées de l'objet ds ppMesh si je me trompe pas, mais dois-je acceder a cette variable pour changer la position ou ya t-il une autre methode (changer ppMesh me semble pas correct non ?)

Reply

Marsh Posté le 28-02-2003 à 19:50:01    

Ouhla. Faudrait que tu passes un peu de temps à etudier le principe des transformations matricielles en 3D.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 28-02-2003 à 19:53:41    

lol ok ca marche, en fait je n'ai pas de bouquin et j'ai du mal à comprendre avec les quelques aides que je trouve sur le net, tu connais des cours corrects, qui me permette d'aller plus loin qu'un carré qui tourne avec une lumiere ? ou me conseilles-tu d'acheter un bouquin ?


Message édité par ghiby le 28-02-2003 à 20:04:58
Reply

Marsh Posté le 28-02-2003 à 20:06:39    

La 2D, en VGA d'abord, puis en directDraw ne m'a pas poser de probleme, en revanche la 3D, c'est un autre morceau :ouch:

Reply

Marsh Posté le 01-03-2003 à 04:58:03    

ghiby a écrit :

lol ok ca marche, en fait je n'ai pas de bouquin et j'ai du mal à comprendre avec les quelques aides que je trouve sur le net, tu connais des cours corrects, qui me permette d'aller plus loin qu'un carré qui tourne avec une lumiere ? ou me conseilles-tu d'acheter un bouquin ?


 
Lis le programming guide du sdk Direct 3D
ils expliquent le fonctionnement du pipeline
de transformations Direct3D.
 
Ce n'est pas un vrai cours mais ça couvre les bases...
 
Sinon c'est vraiment un vaste sujet
et il vaut peut-etre mieux acheter un bouquin
ou suivre un cours si tu veux y comprendre quelque chose...
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed