Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1500 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Tutorial pour DirectX 9

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Tutorial pour DirectX 9

n°635276
hankmoon
Posté le 08-02-2004 à 18:39:55  profilanswer
 

Bonjour à tous,
Je suis en train de faire un moteur 3D sous directX 9. J'aimerais savoir ou je pourrais trouver un tutorial pour m'aider. L'help du SDK n'étant pas suffisante et n'ayant rien trouvé de concluant sur le net.
 
Peu être que vous seriez comment loader un fichier .X et ensuite l'afficher?
Merci bcp.

mood
Publicité
Posté le 08-02-2004 à 18:39:55  profilanswer
 

n°635278
chrisbk
-
Posté le 08-02-2004 à 18:40:48  profilanswer
 

cherche voir sur google  
 
drunken hyena
nexe
 
(c des noms de sites sur dx)
ca devrait faire ton bonheur

n°635296
hankmoon
Posté le 08-02-2004 à 18:52:40  profilanswer
 

Merci je zieute cela, ca parait interessant. bien que j'ai l'impression qu'il n'y ai pas tout ce dont j'ai besoin.

n°635297
chrisbk
-
Posté le 08-02-2004 à 18:53:40  profilanswer
 

regarde aussi les samples fournis avec DX

n°635299
hankmoon
Posté le 08-02-2004 à 18:58:38  profilanswer
 

J'ai déjà regardé ca mais c'est beaucoup trop compliqué au premier abord. J'ai trouvé un sample qui correspond a peu près a ce que je voudrais faire mais il y a trop de lignes de code pour comprendre.
Il faut que je prenne ca étape par étape. Sinon je m'en sortirais pas.

n°635313
chagarou
Posté le 08-02-2004 à 19:19:00  profilanswer
 

Hankmoon a écrit :

J'ai trouvé un sample qui correspond a peu près a ce que je voudrais faire mais il y a trop de lignes de code pour comprendre.


C'est quoi ce que tu voudrait faire?  
 
 
 

Hankmoon a écrit :


Il faut que je prenne ca étape par étape. Sinon je m'en sortirais pas.


Ca c'est clair :)

n°635364
hankmoon
Posté le 08-02-2004 à 20:04:15  profilanswer
 

et bien je chercher à loader un fichier .X qui contient une animation et à l'afficher tout simplement. C'est dans le projet de faire un moteur de jeu video. Enfin une API qui permettrait de loader des ficher .X et de les animer facilement sans utilisaion de code.
Il me faut donc apprendre comment marche les DirectX 9. Pour l'instant tout fonctionne, intitialisation, clavier, souris, fullscreen et là je chercher a loader un fichier .X et à l'afficher.

n°636293
hankmoon
Posté le 09-02-2004 à 18:29:45  profilanswer
 

Y'a un sample nommé SkinnedMesh dans le SDK mais le code est vraiment bordelique.
Vous pouvez m'aider?

n°636377
bjone
Insert booze to continue
Posté le 09-02-2004 à 19:37:56  profilanswer
 

personnellement, je te conseillerais de commençer par faire ton propre loader de fichier .ASC / .ASE / .3DS.
je doutes que les fichiers .X seront utilisés en production pour un jeu, et tu apprendras plein de choses en faisant un loader pour un format connu (en encore mieux faire ton propre format et faire un plugin pour un soft connu, mais c'est plus cho)
 
sinon charger un fichier .X, la boite à outils du DirectX doit avoir ce qu'il faut normallement...

n°636381
bjone
Insert booze to continue
Posté le 09-02-2004 à 19:42:21  profilanswer
 

les fichiers .ASC sont les plus triviaux à charger...

mood
Publicité
Posté le 09-02-2004 à 19:42:21  profilanswer
 

n°640629
hankmoon
Posté le 12-02-2004 à 16:21:25  profilanswer
 

Salut!
J'ai un petit probleme. J'ai reussi a loader mon fichier.x et à l'afficher sur l'ecran et maintenant j'aimerais l'animer.
Le personnage que j'ai modelisé sous 3D max est deja animé et j'ai converti cette animation dans le fichier.X (du moins je crois).
Comment dois je traiter l'affichage de l'animation ensuite avec directX 9 ?

n°640706
StatuFab
Posté le 12-02-2004 à 17:27:24  profilanswer
 

Salut, je ne peux pas trop t'aider car je ne connais quasiment rien a Direct 3D, mais tu pourras peut-etre trouver ce que tu veux la :
 
http://www.flipcode.com/
http://www.gamedev.net/reference/l [...] yid=24#134

n°642709
hankmoon
Posté le 14-02-2004 à 14:06:25  profilanswer
 

Merci je regarde ca.

n°642892
hankmoon
Posté le 14-02-2004 à 20:23:26  profilanswer
 

J'ai une sale erreur quand je compile.
3dobject.obj : error LNK2001: unresolved external symbol _D3DXLoadMeshFromXA@32
 
Visiblement ma fonction qui load mon fichier .x est pas accepter. Je comprend pas l'erreur que j'ai fais.
 
D3DXLoadMeshFromX( "Teubet.x", D3DXMESH_SYSTEMMEM, g_peripherique3D, &pAdjacencyBuffer, &pMtrlBuffer, NULL, &m_dwNumMaterials, &m_pSysMemMesh);

n°642909
bjone
Insert booze to continue
Posté le 14-02-2004 à 20:59:50  profilanswer
 

tu n'as pas inclus le .LIB du D3DX.
genre le d3dx9.lib par exemple.
 
(fo regarder dans le MSDN/DOC du SDK:  
Header d3dx9mesh.h  
Import library d3dx9.lib  
)


Message édité par bjone le 14-02-2004 à 21:02:18
n°642910
hankmoon
Posté le 14-02-2004 à 21:01:22  profilanswer
 

un .lib? comment on include un .lib? c'est pas un .h que l'on fait generalement?

n°642912
bjone
Insert booze to continue
Posté le 14-02-2004 à 21:02:40  profilanswer
 

tu inclus le .H
et tu rajoutes à ton projet le .LIB.

n°642915
hankmoon
Posté le 14-02-2004 à 21:05:55  profilanswer
 

hooo merci ! :) ca marche.

n°642943
hankmoon
Posté le 14-02-2004 à 22:57:24  profilanswer
 

Un truc qui parrait bizarre, maintenant que j'ai loadé mon fichier.x et que je fais un Render de celui ci, a aucun moment on me demande où je souhaite l'afficher. Ce qui fait qu'au final je n'ai aucune image dans mon programme. Comment dois je faire?

n°643057
bjone
Insert booze to continue
Posté le 15-02-2004 à 02:16:59  profilanswer
 

heu lol...
 
tu dois définir tes matrices de monde, de vue et de projection ;) (si tu est en T&L fixe)
 
avec un VertexShader, tout ce petit monde se retrouve cumulé dans des regitres de constantes...


Message édité par bjone le 15-02-2004 à 02:18:02
n°643628
hankmoon
Posté le 15-02-2004 à 23:40:09  profilanswer
 

Oki, je commence à bosser ce gros bordel pour essayer d'y capter un choux, je vous recontacte si j'ai de mauvaises plantations ;) lol

n°645782
hankmoon
Posté le 17-02-2004 à 17:20:24  profilanswer
 

Voila j'ai fait mais 3 matrices: La matrice monde, la matrice view et la matrice projection. Je les ai toutes initialisé et j'ai lancé mon prog.... toujours rien... :/
Je vais vous schematiser mon prog:
WinMain{
//Init de la zindoz
 
//Loading de mon fichier X: D3DXLoadMeshFromX, OptimizeInplace,D3DXCreateTextureFromFile
item = new CD3DMesh("cube.x", jeu->Get_g_peripherique3D());
//Initialisation de mes matrices mondes, ...
init_matrices();
 
while(!g_app_done){
  //gestion des messages zindoz
  //gestion des peripheriques
  jeu->DebutRendu();
  //SetMaterial, SetTexture, DrawSubset
  item->Render(jeu->Get_g_peripherique3D() ,true ,true);
  jeu->Rendu();
}
}
 
Voila en résumé. Au final je n'ai aucune erreur. Je pense pas avoir fait d'erreur au niveau théorique (voir mon schema) donc je comprend pas trop d'où vient mon problème. Pourquoi j'ai rien qui s'affiche?
 
PS: Jeu est l'objet où je stock tout mes variables concernant directX et Item est l'endroit où sont stocké mes infos de mon fichier X.


Message édité par hankmoon le 17-02-2004 à 17:21:51
n°645874
bjone
Insert booze to continue
Posté le 17-02-2004 à 18:40:38  profilanswer
 

montre l'initialisation de tes matrices.
 

n°646370
hankmoon
Posté le 18-02-2004 à 01:29:04  profilanswer
 

Voila:
 
void init_matrices(void){
 D3DXMATRIX view_matrix;
 D3DXMATRIX projection_matrix;
 D3DXVECTOR3 eye_vector;
 D3DXVECTOR3 lookat_vector;
 D3DXVECTOR3 up_vector;
 D3DXMATRIX world_matrix;
 float aspect;
 
   //Here we build our View Matrix, think of it as our camera.
 
   //First we specify that our viewpoint is 8 units back on the Z-axis
   //eye_vector=D3DXVECTOR3( 0.0f, 0.0f,-8.0f );
   eye_vector=D3DXVECTOR3( 0.0f, 30.0f,39.0f );
 
 //We are looking towards the origin
   lookat_vector=D3DXVECTOR3( 0.0f, 0.0f, -5.0f );
 
   //The "up" direction is the positive direction on the y-axis
   up_vector=D3DXVECTOR3(0.0f,1.0f,0.0f);
 
   D3DXMatrixLookAtLH(&view_matrix,&eye_vector,
                                   &lookat_vector,
                                   &up_vector);
 
   //Since our 'camera' will never move, we can set this once at the
   //beginning and never worry about it again
   (jeu->Get_g_peripherique3D())->SetTransform(D3DTS_VIEW,&view_matrix);
 
   aspect=((float)800 / (float)600);
 
   D3DXMatrixPerspectiveFovLH(&projection_matrix, //Result Matrix
                              D3DX_PI/4,          //Field of View, in radians.
                              aspect,             //Aspect ratio
                              1.0f,               //Near view plane
                              100.0f );           //Far view plane
 
   //Our Projection matrix won't change either, so we set it now and never touch
   //it again.
   (jeu->Get_g_peripherique3D())->SetTransform(D3DTS_PROJECTION, &projection_matrix);
 
 
   //The World Matrix transforms Model Coordinates into World Space coordinates.
   //Setting it to Identity means there is no transformation, so Model Space is directly
   //mapped onto World Space.
   D3DXMatrixIdentity(&world_matrix);
   (jeu->Get_g_peripherique3D())->SetTransform(D3DTS_WORLD,&world_matrix);
 
 
}
 
Disons que c'est assez basic juste histoire de voir si ca marche. Mais après recherche il parait avoir des erreurs au niveaux des variables qui sont passé pour l'affichage des meshs. Faut que je regarde ca plus en détail demain.

n°646764
bjone
Insert booze to continue
Posté le 18-02-2004 à 11:28:19  profilanswer
 

mouef.
 
sinon tu mets 3 points dans un vertexbuffer, et tu fais un DrawPrimitive (voir un DrawPrimitibeUp avec un structure)

n°647606
hankmoon
Posté le 18-02-2004 à 18:36:23  profilanswer
 

Ouai j'y ai pensé aussi mais ca me fait enlever tout ce que j'ai fait avec mon load .x file. Et j'en ai pas trop envie surtout que techniquement tout est bon.... :( Il doit y avoir un petit erreur qui s'est inséré dans un coin... la merde pour la trouver.

n°647613
bjone
Insert booze to continue
Posté le 18-02-2004 à 18:44:31  profilanswer
 

bah ça permet de confirmer que tout est bon en amont...
 
enfin ché pas moé, j'ai jamais utilisé le format des mesh du D3DX  :whistle:

n°648050
hankmoon
Posté le 19-02-2004 à 00:03:50  profilanswer
 

Ca y est ca marche... prob de camera c'était bien ca. Le perso etait afficher en noir, sans les textures sur fond noir donc on ne voyait rien. J'ai fais des tests avec d'autres fichiers.X et finalement j'ai réussi a retrouver l'erreur.
héhé
Maintenant qui sait comment loader une animation via un fichier.x ? :)

n°648260
WhatDe
Posté le 19-02-2004 à 10:28:47  profilanswer
 

Bienvenue sur le topic "faites mon moteur 3d pas à pas" ;)

n°648392
bjone
Insert booze to continue
Posté le 19-02-2004 à 11:40:31  profilanswer
 

:lol:
c'est un peu ça :D

n°648975
hankmoon
Posté le 19-02-2004 à 20:33:49  profilanswer
 

looool ben oui, comme ca apres on aura un tuto tout bien fait sur DirectX 9, c'est pas cool ca?

n°657101
hankmoon
Posté le 27-02-2004 à 00:06:23  profilanswer
 

J'ai un petit problème. Je déclare une spot light et quand je lance ca bug... ai je mal déclaré ma lumière?
 
Light_Spot::Light_Spot(LPDIRECT3DDEVICE9 pd3dDevice){
 m_pd3dDevice = pd3dDevice;
 
 ZeroMemory( &m_light, sizeof(m_light) );
 m_light.Type = D3DLIGHT_SPOT;
 
 
 m_light.Diffuse.r  = 1.0f;
 m_light.Diffuse.g  = 1.0f;
 m_light.Diffuse.b  = 1.0f;
 m_light.Ambient.r  = 1.0f;
 m_light.Ambient.g  = 1.0f;
 m_light.Ambient.b  = 1.0f;
 m_light.Specular.r = 1.0f;
 m_light.Specular.g = 1.0f;
 m_light.Specular.b = 1.0f;
 
 m_light.Position.x = 0.0f;
 m_light.Position.y = 0.0f;
 m_light.Position.z = -300.0f;
 
 
 m_light.Theta        = 5.0f;
    m_light.Phi          = 6.0f;
    m_light.Falloff      = 1.0f;
 
 m_light.Attenuation0 = 1.0f;  
 m_light.Range        = 1000.0f;
 
 
 m_vecDir = D3DXVECTOR3(0.0f,
       0.0f,
       1.0f );
 D3DXVec3Normalize( (D3DXVECTOR3*)&m_light.Direction, &m_vecDir );
 
 m_pd3dDevice->SetLight( 1, &m_light );
 
}

n°657109
hankmoon
Posté le 27-02-2004 à 00:07:42  profilanswer
 

Ensuite je l'affiche avec cette fonction que j'ai repris du tutorial du SDK.
 
void Light_Spot::render(LPDIRECT3DDEVICE9 pd3dDevice){
 
 
 m_pd3dDevice->LightEnable( 1, TRUE);
 
 m_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
 m_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0x00202020 );
 
}
 
Quand je lance mon programme, il s'arrete desuite sans me faire d'erreur. Bizarre....

n°657299
bjone
Insert booze to continue
Posté le 27-02-2004 à 10:48:02  profilanswer
 

bah tu lances en debug, et tu regardes si ça cries....
tu compiles avec quoi VS ou autre ?

n°658532
hankmoon
Posté le 28-02-2004 à 14:57:22  profilanswer
 

VS oui, mais c'est bon j'ai réussi à trouver l'erreur. Par contre ma lumière éclaire les surfaces de devant et de derrières. Visiblement toutes les surfaces sont dessiner alors que celle qui se trouvent derrière ne devraient pas l'être.
Ce qui fait que ma lumière fait ressortir les surfaces de l'arrière et ca fait un truc très moche.
Il n'y a pas un truc à faire à l'initialisation pour empécher ca?

n°659475
bjone
Insert booze to continue
Posté le 29-02-2004 à 18:50:48  profilanswer
 

régler le culling ?

n°659538
hankmoon
Posté le 29-02-2004 à 19:35:40  profilanswer
 

C'est la distance a partir de laquel les polygones sont affiché?
En openGL y'a une fonction qui dit que les triangles dessinés a l'envers ne sont pas rendu, donc qu'il n'y aura pas de lumière dessus. Il n'y aurait pas un truc similaire en DirectX ?

n°659722
bjone
Insert booze to continue
Posté le 29-02-2004 à 22:13:24  profilanswer
 

non. c'est pas lié à la distance...
le backface culling...
 
http://msdn.microsoft.com/archive/ [...] 3dcull.asp
 
http://msdn.microsoft.com/archive/ [...] tetype.asp
 
->SetRenderState( D3DRS_CULLMODE, ... );
 

n°660279
hankmoon
Posté le 01-03-2004 à 19:08:01  profilanswer
 

Non apparament c'est pas ca. J'ai testé toute les valeurs du CULLMODE et rien de bien convaincant.
 
Est que vous savez par hasard comment lire une animation venant d'un fichier.X. C'est une partie pas du tout expliqué dans le SDK et pas traiter par les tuto d'internet, ni même par mon book du directX. Il m'explique comment est fait le fichier mais pas comment le lire et traiter l'animation frame par frame.

n°660462
bjone
Insert booze to continue
Posté le 01-03-2004 à 22:45:19  profilanswer
 

bin à mon avis tu dois spécifier le temps au niveau du D3DX Mesh, et lors du rend, le D3DX doit configurer tout ce qu'il faut...
 
y'a un exemple dans le SDK...

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Tutorial pour DirectX 9

 

Sujets relatifs
tutorial pro*c / oracleTutorial PlugIn sous Eclipse
debugueur de visual C++ et application directX[ADA] Où trouver un bon tutorial
[DirectX] Fog et les Drivers ATITutorial javadoc en français ?
[JAVA] Un bon tutorial sur GridBaglayout[evb] cherche tutorial evb en pdf
Tutorial EclipseProjet de topic tutorial sur la programmation d'effets graphiques
Plus de sujets relatifs à : Tutorial pour DirectX 9


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR