Programmation directx 8 tutorial 1 : initialisation de direct3d 8

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 727 fois - Téléchargée 30 fois

Contenu du snippet

Ce code muni d'un tutorial s'adresse à toute personne programmant en Visual Basic 5 et 6, ayant une connaissance de ce langage au niveau programmation des classes.
Ce premier tutorial que je viens d'écrire va vous permettre de découvrir comment initialiser DirectX8 pour faire du graphisme avec son module Direct3D8

Pour faire du graphisme 2D ou 3D dans Direct3D, plusieurs étapes sont nécessaires (initialisation, géométrie crée ou chargement d'objets précrés, création de lumières, création de matrices, ... rendu.)

Ce programme initialise les variables nécessaires, puis effectue un rendu sans dessiner. Il se contente d'effacer l'écran en blanc. Il correspond à l'étape Initialisation et à l'étape Rendu de Direct3D dans leurs parties les plus simples.

Pour quitter le programme, cliquez sur l'écran.

Source / Exemple :


'TUTORIAL 1 - INITIALISATION DE DIRECTX POUR LE GRAPHISME
'P. ROUSSEAU Alias LaPatoshe

'Introduction
'DirectX contient le composant Direct3D qui lui même contient plusieurs autres 
'  composants permettant de créer une application graphique 2D ou 3D.
'Ces sous composants de DirectX (tel que Direct3D ou DirectDevice8) peuvent être 
'  définis par Dim comme toute variable Visual Basic. En revanche, pour être 
'  initialisés, il n'utiliseront pas le mot clef New comme le composant de Base mais 
'  une routine de leur composant hiérarchiquement supérieur dans directX.
'  Lors de la création de ces sous composants, certains paramètres devront être 
'  passés aux fonctions de créations. Il s'agira de paramètres seront de type 
'  variables simple (long, string...) et d'autres de type Structure et constantes 
'  reconnaissables par DirectX.

'Début de l'initialisation
'  Nous sommes dans la déclaration Générale d'une feuille nommée Form1 de   
'  notre projet. Nous aurions u aussi choisir de placer notre code dans un module, 
'  mais j'ai choisi la première méthode.
'  Pour faire du Graphisme en 2D ou 3D, on a besoin de créer un objet DirectX que 
'  nous initialisons en même temps.
'  On créé également divers objets dont la fonctionnalité est expliquée pour chacun
'  Au préalable, veuillez préparer Visual Basic à utiliser DirectX8 en installant 
'  DirectX8 SDK, et en indiquant à VB de faire référence à DirectX8 dans le menu 
'  Projet / Référence

Dim PDirectX As New DirectX8  ' Déclaration et initialisation de l'Objet DirectX
Dim Pdirect3D As Direct3D8 'Composant permettant la création de sous composants 
'                                       graphiques
Dim PDirect3Ddevice8 As Direct3DDevice8 ' Il s'agit de l'élément qui va permettre 
'                                       de reproduire nos graphismes à l'écran. C'est lui qui 
'                                       va  mettre en place les rendus graphique, les lumières, 
'                                       les options de représentation ...
Dim PstructParameters As D3DPRESENT_PARAMETERS 'Il s'agit d'une structure que 
'                                       nous déclarons et qui va contenir des données que 
'                                       nous choisirons et qui seront utiles à la création du 
'                                       Direct3DDevice8 vu précédement.

'Notez que dans DirectX, les éléments définies en lettres capitales sont des 
'structures (renfermant uniquement des variables).Nous verrons dans d'autres 
'tutorials des éléments qui sont des classes qui elles sont écrites en minuscules et 
'qui elles renferment des variables et des fonctions (telle que Direct3DTexture8)

Private Sub Form_Load()
'Maintenant que nos objets sont définis, nous allons les créer selon notre bon 
'vouloir.
'En premier lieu, nous créons l'objet Direct3D8

Set Pdirect3D = PDirectX.Direct3DCreate() 'Nous utilisons la fonction sans paramètre 
'                                                           Direct3dcreate de DirectX pour créer 
'                                                           notre objet Direct3D8 .

'Nous allons maintenant créer notre Device en utilisant une fonction de notre objet 
'Direct3D8 qui est la fonction CreateDevice
'Cette fonction nécessite le passage de 5 paramètres. Elle demande la passage de 
'l'adaptateur graphique qui va être utilisé, si il faut utiliser l'acceleration materielle 
'de l'adaptateur, la feuille du projet qui va être utilisée pour l'affichage, le mode de 
'dessin des graphisme, et le paramétrage de l'affichage.
'C'est le paramétrage de l'affichage que nous allons voir maintenant avant de créer 
'le Device, puisque il en a besoin.
'Ce paramétrage s'effectue en entrant des donées et constantes dans notre 
'variable PstructParameters qui est de type D3DPRESENT_PARAMETERS

PstructParameters.BackBufferCount = 1  'Nombre d'arrière plan utilisé. L'arrière plan 
'                                                         va se voir dessiner tous notre graphismes 
'                                                         avant leur aparition à l'écran

PstructParameters.BackBufferFormat = D3DFMT_A8R8G8B8 'Il s'agit du mode 
'                                                                    graphique utilisé au niveau des 
'                                                                    couleurs. La il s'agit du mode 32 
'                                                                    Bit. Si votre carte graphique ne le 
'                                                                    supporte pas, utilisez le mode 24 
'                                                                    Bits en tapant :
'                                      PstructParameters.BackBufferFormat = D3DFMT_R8G8B8
'                                                                    ou 16 Bits
'                                      PstructParameters.BackBufferFormat = D3DFMT_R5G6B5

PstructParameters.BackBufferHeight = 600 'Résolution écran en hauteur

PstructParameters.BackBufferWidth = 800 'Résolution écran en largeur

PstructParameters.hDeviceWindow = Form1.hWnd 'Feuille sur laquelle Direct3D et 
'                                                                      son Device vont travailler

PstructParameters.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC ' Mode du placage 
'                                                           de l'arrière plan à l'écran. On aurait 
'                                                           pu aussi utiliser le D3DSWAPEFFECT_FLIP

PstructParameters.Windowed = False 'Indique que nous travaillerons en plein 
'                                       ecran. Si on avait mis True, on aurait un mode fenêtré

'Nota : dans notre création du D3DPRESENT_PARAMETERS, je n'ai pas mis de garde 
'fou. Ainsi, si par exemple le mode graphique et le nombre de couleurs que vous 
'choisissez n'est pas supporté par votre adaptateur graphique, vous obtiendrez une 
'erreur à l'éxécution. Il existe une alternative pour que tout marche sans garde fou, 
'c'est d'utiliser le mode graphique actuel de votre machine en créant une variable 
'de type D3D_DISPLAYMODE dans les déclarations générales tel que:
'Dim Pdisplaymode as D3D_DISPLAYMODE
'Puis, avant de paramétrer PstructParameters, charger dans la variable 
'Pdisplaymode la résolution actuelle de votre machine en programmant :
'Pdirect3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, Pdisplaymode
'Pour info, D3DADAPTER_DEFAULT est votre carte graphique et de ce fait votre 
'mode graphique par défaut
'Ainsi, vous verrez que votre Variable PDisplaymode contiendra votre mode 
'd'affichage actuel que vous pourrez attribuer à votre variable PstructParameters en 
'inscrivant
'PstructParameters.BackBufferFormat = Pdisplaymode.Format
'PstructParameters.BackBufferHeight = Pdisplaymode.Height
'PstructParameters.BackBufferWidth = Pdisplaymode.wist

'Nous allons pouvoir créer notre Device, c'est à dire la machine qui va nous 
'permettre de dessiner. En gros, c'est notre feuille de dessin

Set PDirect3Ddevice8 = Pdirect3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Form1.hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, PstructParameters)

'CreateDevice est donc comme je l'ai dit, la fonction de Direct3D permettant de 
'créer notre Device (Notre feuille de dessin).
'Son premier paramètre est D3DADAPTER_DEFAULT : Il s'agit de l'adatateur 
'graphique par défault déclaré dans windows. Si vous avez une Carte GFORCE 
'installées et utilisée par Windows en ce moment, c'est elle que le device va utiliser 
'pour dessiner
'Le deuxième paramètre est D3DDEVICETYPE_HAL : Il s'agit de l'accélération 
'matérielle. On veut en fait utiliser les capacitées matérielles de notre carte 
'graphique pour dessiner. Si notre carte graphique ne possède pas d'accélération 
'matérielle 2D/3D, nous utiliserons
' l'accélération logicielle en utilisant la constante D3DDEVTYPE_REF.
'Le troisième paramètre est le suport 'matériel' de visual basic qui va recevoir nos 
'graphismes de notre device. Il s'agira de la feuille 1. On la désigne par son Hwnd 
'(Il s'agit d'une sorte de pointeur reconnu par Windows et DirectX)
'Le quatrième paramètre paramètre rejoint un peu le deuxième. Il s'agit de 
'D3DCREATE_HARDWARE_VERTEXPROCESSING. On veut en fait que nos dessins 
'soient effectués en utilisant les capacités matérielles de notre carte.
'Le cinquième paramètre, et bien il s'agit de notre PStructParameters que nous 
'avons implémenté précédemment. Pour l'instant, nous ne l'avons que faiblement 
'implémenté, mais plus tard, nous apprendrons à y placer d'autres paramètres tels 
'que par exemple les types de Textures (16 bits ou 32 bits...)
' mais pour l'instant, nous n'en avons pas besoin.
'Maintenant que notre Device est créé, nous devons effectuer notre procédure de 
'rendu.
'Pour l'instant, nous ne dessinerons pas, nous ne déclarons que notre device, et notre procédure de rendu.
'Cette Procédure de rendu sera contenue dans une boucle Do loop
'Dans cette boucle, nous allons demarrer le rendu, effacer l'écran, terminer le 
'rendu, et présenter la scène à l'écran.
'En effet, durant le rendu, tout se fait en arrière plan. Ce n'est qu'en présentant la 
'scène, que le device met notre arrière plan en avant en utilisant notament la 
'technique du FLIP ou du COPY_SYNC que nous avons défini dans notre structure 
'PStructParameters

Do ' Début de notre boucle
DoEvents ' Pour pouvoir garder la main sur windows

PDirect3Ddevice8.BeginScene 'début du dessin en arrière plan

PDirect3Ddevice8.Clear 0, ByVal 0, D3DCLEAR_TARGET, RGB(255, 255, 255), 1#, 0
'Il s'agit d'une procédre d'effacement du Device à laquelle on passe en paramètre 
'en premier, 0, Byval 0 pour effacer le rectangle formant l'écran en totalité, puis la 
'cible à effacer (TARGET)
'On passe ensuite la couleur d'effacement en Héxadécimal ou comme dans notre 
'exemple via la fonction RGB, on passe aussi 1# pour z et 0 pour le type de 
'pinceau à dessiner . Utilisez toujours ces paramètres, en général, ils marchent.

PDirect3Ddevice8.EndScene 'Fin du rendu en arrière plan

PDirect3Ddevice8.Present ByVal 0, ByVal 0, 0, ByVal 0 'ici, on place l'arrière plan en 
'                                        avant plan avec les paramètres par défaut 
'                                        indiquant qu'on passe tout l'arrière plan en avant plan.

Loop

'Voila, il ne reste plus qu'à placer un procédre de fin dans le click de la feuille 1 
'pour que l'utilisateur puisse quitter le prgramme

End Sub

Private Sub Form_Click()
'Dans cette partie, on décharge tous les objets DirectX lorsque l'utilisateur clique sur 
'la feuille et on termine le programme

Set PDirect3Ddevice8 = Nothing
Set Pdirect3D = Nothing
Set PDirectX = Nothing
End
End Sub

Conclusion :


Merci de me faire savoir si ce tutorial vous a plus, du moins, si son style vous semble satisfaisant pour comprendre Direct3D8, cela me permettra de poursuivre par d'autres qui seront relatif aux autres parties de Direct3D8 (Géométrie, matrices, Mesh ...)

A voir également

Ajouter un commentaire

Commentaires

Bravo! Vous maitrisez bien votre sujet et savez bien l'expliquer!
Messages postés
123
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
29 avril 2009

Super idée, très utile pour qui commence! Allez, un p'tit 10 de plus!
Messages postés
53
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
19 décembre 2009

salut. Je pense que ce serait une possibilité que l'on peut étudier à présent, vu que les cartes graphiques actuelles permettent le muti sortie. En revanche, il doit falloir pour cela utiliser deux adapteurs graphiques différents (1 pour chaque Devie créé) et je ne pense pas que sous DirectX8 il y ait de solution à cela. Maintenant, si quelqu'un a une idée elle est la bienvenue.
Messages postés
64
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
22 novembre 2011

Disons que nous avons deux ou plusieurs écrans, serait-il possible d'établir une "surface" sur chacun d'eux, avec d'autres forms? Cela serait intéressant de pouvoir avoir une gestion multi écrans, merci.
Messages postés
12
Date d'inscription
mercredi 10 août 2005
Statut
Membre
Dernière intervention
20 février 2007

Merci pour ton aide, 10/10
Afficher les 29 commentaires

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.