Programmation directx8 tutorial 5 : chargement, affichage, animation d'objets pre-crees

Soyez le premier à donner votre avis sur cette source.

Vue 6 625 fois - Téléchargée 1 150 fois

Description

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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

AbeLeMudokon
Messages postés
15
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
5 mai 2006
-
envoie ta source (hongueul@wanadoo.fr) avec le mesh et je verrai ce que je peux faire :)
Xav88
Messages postés
178
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
25 septembre 2008
-
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
cs_LaPatoshe
Messages postés
53
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
19 décembre 2009
-
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
Xav88
Messages postés
178
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
25 septembre 2008
-
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
AbeLeMudokon
Messages postés
15
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
5 mai 2006
-
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.