Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PROGRAMMATION DIRECTX8 TUTORIAL 5 : CHARGEMENT, AFFICHAGE, ANIMATION D'OBJETS PRE-CREES


Information sur la source

Catégorie :Direct X Niveau : Débutant Date de création : 08/12/2003 Date de mise à jour : 09/12/2003 23:20:57 Vu / téléchargé: 4 697 / 907

Note :
9,71 / 10 - par 7 personnes
9,71 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bonjour à tous, et bienvenu dans ce tutorial n°5 sur DirectX8
Dans ce nouveau Tutorial, vous allez découvrir comment après avoir créé une forme 3D avec un logiciel de dessin, vous pouvez la charger, l'afficher et la faire bouger
Pour vous avancer dans la scène, appuyez sur A, pour reculer, appuyez sur Q. Pour monter la caméra, appuyez sur P et pour descendre, appuyez sur M
Pour changer le sens de rotation de l'objet qui tourne, appuyez sur W ou sur X.
Je me suis un peu plus appliqué dans le code que dans le dessin 3D vous remarquerez, la forme apparaissant à l'écran étant un peu primaire, mais je voulais faire vite.


 

Conclusion

Placez les fichiers Dézippés du Programme dans C:\Tutorial 5. N'oubliez pas l'espace avant le 5. Si vous souhaitez changer de répertoire, modifier dans le code la valeur de Ppath dans le module initialisation.
Voila, merci de laisser vos commentaires, et d'indiquer tout problème que vous auriez avec ce code, ainsi que tout problème que vous auriez pour créer des fichiers en '.x'
A bientôt
La Patoshe


PS : Je n'arrive pas à placer des commentaires pour vous répondre, donc je me sert de cette mise à jour pour vous indiquer que si vous obtenez une erreur indiquant argument ou procédure incorrecte et que le code stoppe à la ligne Set Pmesh = Pd3dx.loadmeshfromx....., il faut modifier la valeur du format du backbuffer dans le module initialisation. Tapez au lieu de D3DFMT_R5G6B5, la valeur D3DFMT_A8R8G8B8, ou bien D3DFMT_R8G8B8, ou encore D3DFMT_X8R8G8B8.
Voilà, en espérant que le problème lié à la page Web sera bientôt réglé. Merci à tous

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Xav88 le 08/12/2003 17:21:52

Salut
Moi j'ai un petit problème :
Quand j'execute le prog j'ai une erreur
«Argument ou appel de procédure incorrect» dans le module «géométrie» sur la ligne :

Set Pmesh = Pd3dx.LoadMeshFromX(Ppath & "mesh.x", D3DXMESH_MANAGED, PDevice, Nothing, Pbuffer, nbmaterial)

Si quelqu'un peut m'aider......

Xav

signaler à un administrateur
Commentaire de DragonDo le 08/12/2003 19:10:27

Salut,
J'ai également une erreur à cette ligne !


@+

signaler à un administrateur
Commentaire de Xav88 le 08/12/2003 19:19:21

C'est encore moi

J'oubliais de préciser que j'ai bien changé le chemin d'accès Ppath !!!

Xav

signaler à un administrateur
Commentaire de LaPatoshe le 09/12/2003 23:22:06

essai

signaler à un administrateur
Commentaire de LaPatoshe le 09/12/2003 23:25:48

On dirait que la mise à jour de mon code ou du moins des explications du fonctionnement a permis de réparer cette page.
Donc, pour résumer, je pense avoir trouvé la solution au problème. Il faut changer le format du Backbuffer dans le module initialisation. Enlevez D3DFMT_R5G6B5, et essayez les formats D3DFMT_A8R8G8B8, ou D3DFMT_R8G8B8, ou D3DFMT_X8R8G8B8. Normalement cela devrait marcher.
A plus, et merci de laisser vos commentaires

signaler à un administrateur
Commentaire de remi1203 le 10/12/2003 09:52:28

petit truc : si tu mets Ppath = App.Path
ca te renvoie le repertoire courant où de trouve l'exe
apres, je te conseille de rajouter le ligne :
If Not Right(Ppath,1) = "" then Ppath = Ppath & ""
ca te mets un slash à la fin si il y est pas.

signaler à un administrateur
Commentaire de Guidelor le 10/12/2003 12:15:07

ça veut pas marcher chez moi...
J'ai eu beau changer le format , la résolution , mon nombre de bits , ...
mais toujours l' eternelle "Automation error" ou "Argument ou appel de procédure incorrect"...

signaler à un administrateur
Commentaire de LaPatoshe le 10/12/2003 13:22:29

Merci rémi du tuyau, Mauricet m'avait fait part de la même chose par message interne mais je n'avais pas pu le diffuser pour l'instant car la page buggait. J'ai remarqué également que si on ne met rien dans la variable Ppath, ça peut marcher.
Merci pour tous vos commentaires à venir. N'hésiter à dire si le programme marche ou pas chez vous, et à quel endroit ça plante, merci.

signaler à un administrateur
Commentaire de Xav88 le 10/12/2003 13:47:35

Génial !!!!!!!!
J'ai mis "D3DFMT_X8R8G8B8" en Backbuffer dans le module initialistation et ça marche !!!

Merci

Xav.

signaler à un administrateur
Commentaire de Xav88 le 17/12/2003 15:02:29

J'ai essayé de changer le mesh mais quand j'exécute le projet avec mon mesh, l'écran change de résolution reste noir 1 ou 2 seconde et revient sous visual basic comme si je n'avais rien fait.

Si quelqu'un sait pourquoi j'ai ce problème.........

Merci d'avance

Xav

signaler à un administrateur
Commentaire de Pascalitou le 17/12/2003 21:02:10

Message

Trés bon travail et trés bien explique le code source

Bref félicitations un amateur de programmation DIRECT X

A plus

signaler à un administrateur
Commentaire de joelmarie le 17/01/2004 22:50:12

super giga carement bien merci
11/10

signaler à un administrateur
Commentaire de rumik le 15/02/2004 18:43:09

merci pour ce pt programme bien instructif

signaler à un administrateur
Commentaire de gluk le 23/02/2004 23:09:50

Super bien détaillé,
merci pour ce tuto,
marche nikel Chez moi.

signaler à un administrateur
Commentaire de AbeLeMudokon le 05/04/2004 22:12:58

Excellente source, ca mérite 9/10
J'aurai quand meme une petite remarque à faire à propos du module d'animation : essaye ton code avec la rotation d'une centaine de mesh à chaque frame, et tu verras que le programme va ralentir tres sérieusement.
donc voici la solution miracle (qui est d'ailleurs un peu plus courte) :
1) créer un type Objet3D dans le module principal :
Type ModeleObjet3D
    Mesh As D3DXMesh
    NomFichierMesh As String
    Position As D3DVECTOR
    Rotation As D3DVECTOR
    Buffer As D3DXBuffer
    Texture() As Direct3DTexture8
    Material() As D3DMATERIAL8
    NombreMaterial As Long
End Type
(je pense que les noms des variables sont assez explicites pour que je n'aie pas à détailler)
2) pour le chargement, on fait comme d'habitude, mais sans les 2 dernieres lignes (GetNumVertices...)

3) dans le module d'affichage créer une sub :
Sub Objet3D_Afficher(Objet As ModeleObjet3D)
Dim MatriceWorld As D3DMATRIX
Dim MatriceTemporaire As D3DMATRIX
Dim n As Byte
'Calculer les transformations de l'objet
D3DXMatrixIdentity MatriceWorld
D3DXMatrixRotationY MatriceTemporaire, Objet.Rotation.y
D3DXMatrixMultiply MatriceWorld, MatriceWorld, MatriceTemporaire
D3DXMatrixTranslation MatriceTemporaire, 0, 0, 10
D3DXMatrixMultiply MatriceWorld, MatriceWorld, MatriceTemporaire
DX.Device.SetTransform D3DTS_WORLD, MatriceWorld
'Afficher l'objet
For n = 0 To Objet.NombreMaterial - 1
    DX.Device.SetMaterial Objet.Material(n)
    DX.Device.SetTexture 0, Objet.Texture(n)
    Objet.Mesh.DrawSubset n
Next n
End Sub
(ici il par économie de place je n'ai mis que la rotation en y, il faudrait faire de meme avec les axes x et y)

4) dans la sub Prendu, entre le BeginScene et le EndScene :
Objet3D_Afficher Voiture  'où Voiture est un objet ModeleObjet3D
5) Pour faire une rotation de l'objet on rajoute dans la boucle principale :
Voiture.Rotation.y = Voiture.Rotation.y + 0.1

voila A+

signaler à un administrateur
Commentaire de AbeLeMudokon le 05/04/2004 22:18:33

un petit détail : g mis :
D3DXMatrixTranslation MatriceTemporaire, 0, 0, 10
mais il faudrait plutot mettre :
D3DXMatrixTranslation MatriceTemporaire, objet.position.x, objet.position.y, objet.position.z
voila c'était tout

signaler à un administrateur
Commentaire de Xav88 le 01/05/2004 15:07:42

Salut AbeLeMudokon,
Je voudrais bien essayer ta technique mais je n'arrive pas a la mettre en place comme tu l'explique ( Je n'ai jamais utiliser les Type...End Type)
Si tu pouvais m'envoyer le tuto avec tes modification ce serait très sympa...

Voici mon mail : xavroi2003@hotmail.com

Merci d'avance

Xav

signaler à un administrateur
Commentaire de LaPatoshe le 24/06/2004 23:35:47

Salut à tous, et merci pour les mails qui me sont parvenus. Je vous informe ici, que j'ai découvert récément deux nouvelles fonctions, propres aux rotations et translations de mesh (avec la formule du tuto, j'ai vu que cela pouvait bugger).
Il faut comme dans le tutorial extraire les points du Mesh et les placer dans un tableau de points mais il faut déclarer ces points en type D3DVECTOR que ce soit pour les vecteurs de normales, que pour les vecteurs de position. Puis, au lieu d'utiliser la fonction D3DXVec4Transform pour déplacer ces vecteurs, il faut utiliser pour le déplacement des vecteurs de position la matrice : D3DXVec3TransformCoord

Pour le déplacement des vecteurs de normale il faut utiliser la fonction
D3DXVec3TransformNormal

Nota : Pour déplacer un Mesh avec ces opérations de transformation il n'est pas utile de multiplier les matrices si on veut que en une fois nos points fassent par exemple un rotation et une translation. Il suffit d'utiliser les fonctions que je vient de citer deux fois : une fois pour la rotation des points et des normales avec une matrice Rotation, et une autre fois pour la translation avec une matrice Translation.

Voilà, testez cette petite modif, si vous aviez eu des buges avec D3DXVec4Transform, ils devraient disparaitre.

A plus

signaler à un administrateur
Commentaire de Xav88 le 27/08/2004 20:21:29

Bonjour à tous,
J'ai utilisé la technique de AbeLeMudokon (même si je n'est pas idée de laquelle est la meilleure ...) et je me trouve face a un comportement étrange en effet sur le Tutorial modifié comme il l'a expliquer j'ai changé :


1) ///////////////////
'Variables globales
Global Objet(1) As ModeleObjet


2) ///////////////////
Sub Main()

'Définir le répertoire par défaut
ChDir App.Path

'Initialiser DirectX
DirectX_Initialiser

'Charger le mesh
Mesh.NomFichier = "Mesh.x"
Objet3D_Charger Mesh

'Initialiser les différents objets
Objet(1).Position = CreerD3DVECTOR(-3, 0, 20)
'Objet(2).Position = CreerD3DVECTOR(100, 100, 100)
'Objet(3).Position = CreerD3DVECTOR(100, 100, 100)
Objet(1).Rotation.y = 3.14597 / 2 'Permet de voir le mesh de profil.
'Initialiser l'éclairage
CreerLumiereDirectionnelle CreerD3DCOLORVALUE(1, 1, 1, 1), CreerD3DVECTOR(0, 0, 1), 0

'Début de la boucle principale
Do
    
    'Traitement des évenements Windows
    DoEvents

    'Effectuer les rotations des objets
    Objet(1).Rotation = CreerD3DVECTOR(Objet(1).Rotation.x + 0.1, Objet(1).Rotation.y, Objet(1).Rotation.z)
'    Objet(2).Rotation = CreerD3DVECTOR(Objet(2).Rotation.x, Objet(2).Rotation.y, Objet(2).Rotation.z + 0.01)
'    Objet(3).Rotation = CreerD3DVECTOR(Objet(3).Rotation.x + 0.1, Objet(3).Rotation.y, Objet(3).Rotation.z)
    
    'Rendu de la scène
    DirectX_Rendu
    
Loop

End Sub

3) ///////////////////
'Afficher les objets
For n = 1 To 1
    Objet3D_Afficher Mesh, Objet(n).Position, Objet(n).Rotation
Next n

Ceci fais comme si mon mesh (en l'occurence un avion) faisait des loopings sur place. Et le probleme est que :

Lorsque l'avion est parllèle au sol il fait une certaine longueur (~15 cm chez moi) et lorsqu'il est vertical, il est comme conpacté (ce qui fait que ca longueur est de ~13 cm chez moi)

Au secour, Je n'y comprend rien !!!!

Xav88

signaler à un administrateur
Commentaire de AbeLeMudokon le 29/08/2004 11:37:29

envoie ta source (hongueul@wanadoo.fr) avec le mesh et je verrai ce que je peux faire :)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.