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
29 août 2004 à 11:37
27 août 2004 à 20:21
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
24 juin 2004 à 23:35
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
1 mai 2004 à 15:07
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
5 avril 2004 à 22:18
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.