begin process at 2012 02 13 00:01:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Direct X

 > PROGRAMMATION DIRECTX 8 TUTORIAL 1 : INITIALISATION DE DIRECT3D 8

PROGRAMMATION DIRECTX 8 TUTORIAL 1 : INITIALISATION DE DIRECT3D 8


 Information sur la source

Note :
9,8 / 10 - par 10 personnes
9,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Direct X Niveau :Débutant Date de création :02/11/2003 Vu :8 943

Auteur : LaPatoshe

Ecrire un message privé
Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note

 Description

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

  • '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
'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 ...)



 Sources du même auteur

Source .NET (Dotnet) LIMITER LA FRAPPE DANS DES ZONES COMBO OU TEXT À DES CHIFFRE...
Source avec Zip Source avec une capture PROGRAMME DE TRANSFORMATION DE TEXTURES
Source avec Zip Source avec une capture PROGRAMMATION DIRECTX8 TUTORIAL 5 : CHARGEMENT, AFFICHAGE, A...
Source avec Zip Source avec une capture DIRECTX8 PROGRAMME D'ETUDE DES ECLAIRAGES
Source avec Zip Source avec une capture PROGRAMMATION DIRECTX8 TUTORIAL 4 : GEOMETRIE 3D ECLAIRAGES

 Sources de la même categorie

Source avec une capture HAPPY LAND - 3D VB6 GAME - OPEN SOURCE CODE par ZaidMarkabi
Source avec une capture METAL GEAR SOLID - 3D VB6 GAME - OPEN SOURCE par ZaidMarkabi
Source avec une capture FIGHT COMBAT II - 3D VB GAME - OPEN SOURCE par ZaidMarkabi
Source avec Zip Source avec une capture UTILISER LA CAMERA POUR DIRECTX par zulrigh
Source avec une capture STREET FIGHTER - 3D VB GAME - OPEN-SOURCE par ZaidMarkabi

Commentaires et avis

Commentaire de vr3h le 03/11/2003 07:57:28

C'est sympa, et bien commenté.

Commentaire de lapinblanc260780 le 03/11/2003 10:59:43

Vraiment très bien commenté. C'est agréable pour ceux qui n'ont jamais touché au directx. Merci

Commentaire de chouchou123 le 03/11/2003 18:51:46

C vraiment trop de la balle, Merci LaPotoshe !!!!
A quand la suite LOL

Commentaire de Antony le 03/11/2003 19:35:01

Super bien commenté ! rien à redire !! on attend la suite avec impatience !!!! :)

Commentaire de tooffy123 le 04/11/2003 00:57:41

Excellent ! Je voulais justement me mettre a directx, mais pourait-on disposer d'une source exemple ?
A+
tooffy123

Commentaire de Mauricet le 04/11/2003 08:52:11

Cela me semble très bon
Mais, j'essaye et j'ai tout de suite "Erreur automation"
Et comme je débute avec DirectX, je ne sais quoi faire
J'ai bien fait référence à DirectX (d3vb8)
Peux-tu m'aider ?
Merci

Commentaire de Mauricet le 04/11/2003 09:00:37

Une rectification
J'ai bien fait référence à DirectX 8
Avec "DirectX 8 for Visual Basic Type Library"
Soit "dx8vb.dll" et non d3vb8
Mais j'ai toujours "Erreur automation"
Merci

Commentaire de Fripouil le 04/11/2003 18:14:53

Trés bien expliqué
Chapeau

Commentaire de Mauricet le 04/11/2003 19:33:48

J'ai rectifié ce qui n'allait pas
Set PDirect3Ddevice8 = Pdirect3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, PstructParameters)
et j'obtiens un écran blanc en 640 x 480

J'attends la suite avec impatience

Commentaire de Mauricet le 04/11/2003 20:06:07

Je continue
Je ne sais pas afficher la form en mode fenêtre
Si je mets "PstructParameters.Windowed = True"
Le tout plante
Help

Commentaire de LaPatoshe le 05/11/2003 00:30:04

Merci à tous qui avez apparement aimé ce tutorial. J'ai commencé la suite qui normalement devrait être diffusée sur ce site dans la semaine.
Pour Mauricet et éventuellement les autres qui n'arrivent pas à utiliser le mode fenêtré, sachez qu'en général, lorsque je programme en DirectX, je place tout mon code dans un module indépendant de la feuille form1 excepté pour les évènements permettant la sortie du programme. C'est ce module qui débute mon programme par la fonction Main et je l'indique à Visual Basic dans les options du Projet. Dans ce module, je commence par charger la feuille par Load Form1, et je la fait apparaitre Form1.show. Ensuite, j'y place tous le code qui pour ce tutorial est placé dans Form_Load.  Si vous programmez DirectX de cette façon, vous verrez que le mode fenêtré windowed =True fonctionne. J'ai écrit ce premier tutorial dans la Procédure Form_Load de la feuille pour plus de confort car je ne désirait pas le zipper. Attention , si comme moi vous utilisez Visual Basic 5, sauvegardez le programme si vous utilisez un module, car le tout premier lancement plante à chaque fois (et je ne sais absoluement pas pourquoi. On dirait que Visual Basic n'accepte pas que l'on passe du module à la feuille ou je ne sais pas).
Pour ce qui est du prochain tutorial il sera basé sur les capacités des adaptateurs graphiques (Résolution, Accélération matérielle ...)

PS : Le rectificatif qui a été fait par Mauricet et je l'en remercie ne fonctionne pas sur mon visual Basic 5. Je présume que ce rectificatif s'adresse au x possesseurs de Visual Basic 6. Si des types d'erreur Automation apparaissent et que lors du débuggage la déclaration du Device est surlignée, cela veut souvent dire que la carte graphique ne supporte pas un des modes employé (souvent c'est le format des couleurs ou l'accélération matérielle HAL)

A Bientôt et encore merci pour vos messages

Commentaire de vr3h le 05/11/2003 00:47:56

Coucou,
bon alors pour complèter un peu tout ca, le D3DSWAPEFFECT_COPY_VSYNC est source d'erreur automation chez moi (flip passe impec), et le mode 32 bits pour le back buffer est source d'erreur si la CG ne le supporte pas, il faut donc lui préférer un mode 16 bits style R5G6B5 (format accepte même sur les CG d'entrée de gamme).
voilà j'espere que cela vous permettra d'avancer et je vous dis a bientot

Commentaire de Mauricet le 05/11/2003 10:09:36

On progresse
J'ai modifié le code comme dit dans le Nota et le système est devenu stable. (Avant, destruction de l'environnement de programmation)

Option Explicit
Dim PDirectX As New DirectX8 'Déclaration et initialisation de l'Objet DirectX
Dim Pdirect3D As Direct3D8 'création de sous composants graphiques
Dim PDirect3Ddevice8 As Direct3DDevice8 ' Reproduire les graphismes à l'écran
Dim PstructParameters As D3DPRESENT_PARAMETERS
Dim Pdispmode As D3DDISPLAYMODE

Private Sub Form_Load()

Set Pdirect3D = ....
'
'
PstructParameters.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC

'Résolution actuelle de la machine (D3DADAPTER_DEFAULT est la carte graphique)
Pdirect3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, Pdispmode

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

PstructParameters.BackBufferFormat = Pdispmode.Format
PstructParameters.BackBufferHeight = Pdispmode.Height
PstructParameters.BackBufferWidth = Pdispmode.Width
A bientôt

Commentaire de Mauricet le 05/11/2003 10:58:03

J'ai mon mode fenêtré avec
Réponse = MsgBox("Affichage en plein écran ? ", vbYesNoCancel, "Etude DirectX8")
If Réponse = vbYes Then
Set PDirect3Ddevice8 = Pdirect3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, PstructParameters)
Else
If Réponse = vbCancel Then End
End If

J'attends la suite avec impatience

Commentaire de vr3h le 05/11/2003 13:21:40

Petite rectif : D3DCREATE_HARDWARE_VERTEXPROCESSING indique simplement que les Vertexs seront gérés par la CG et non par le CPU, mais bcp de CG pas forcément d'entrée de gamme ne le supporte pas et donc il faut mettre le SOFTWARE_VERTEXPROCESSING. Pour utiliser le HardWare pour dessiner, on le déclare à la création du device dans : D3DDEVTYPE_HAL (je crois ke HAL = Hardware Abstraction Level : et HEL = Hardware Emulation Level ou un truc du genre - dc en fait si vous utilisez la CG pr dessiner, vous mettez HAL, sinon vous mettez HEL - Il y a aussi le REF dispo sous DX9 et pt etre DX8 qui n'est dispo que pour le Dev Runtime de DirectX, il permet de débugger et verifier l'application que lon programme, ainsi, on peut faire du PixelShader 2.0 sans forcément avoir une CG le comprenant, mais il faut savoir que le REF n'est pas utilisable par qqn qui n'a pas le Dev Runtime ne pourra pas l'utiliser)

Commentaire de vr3h le 05/11/2003 13:26:15

PS : GG Mauricet, le plus sur est effectivement de reprendre les parametres d'affichages du bureau de windows. ceci assurant un max de compatibilité avec meme des anciennes CG.

Commentaire de LaPatoshe le 06/11/2003 21:12:50

J'envoie le Tutorial 2 dans 15 minutes environ. Il y aura un nota faisant un peu référence à ce que dit vr3h sur le VERETEXPROCESSING mais il s'agira vous verrez d'une question que je me pose. En ce qui concerne HEL, cela n'existe pas en directX8 pour VB, c'est le REF qui est l'utilisation du CPU pour la 3D. A plus

Commentaire de rachid777 le 17/02/2004 19:32:39

salut,
ce tutorial est excellent pour commencer la programmation directX, je vois que t'as pratiquement pensé à tout,
enfait  ce code ne marche pas chez moi, il y a une erreur d'automation au niveau de la procédure  pDirect3D.Clear, 0, etc... vers la fin,
j'utilise un p3 avec une carte graphique (sans accélératrice) de 8Mo, pour info
mais je voulais savoir ou est-ce qu'on peut trouver des info sur les procédures Clear, BeginScene etc... de DirectDraw sans avoir à télécharger le DirectX SDK?
Merci encore pour ton tutorial :-)

Commentaire de gluk le 17/02/2004 20:48:39

super source, tres bien realisée, indispensable pour un debut de comprehension à directx, merci.

Commentaire de vr3h le 19/02/2004 10:13:29

Bah comme resource sur directx, tu trouveras ce que tu veux sans doute sur le site msdn.microsoft.com/directx (pas de www) et pour ton pb, essaie de mettre Software_VertexProcessing au lieu de Hardware. Mais bon c'est pas sur que ca passe. si tas tjs un pb tu pourrais essayer de retrouver le message d'erreur via la code retourné (en général dans directx, tas une fonction qui te donne le message d'erreur en fonction du code retourné...
Voilà jespere que ca marchera sinon nhesite pas a demander ^^
a bientot

Commentaire de Horfee le 08/07/2004 15:55:35

est ce que tu sais prog direct x 8 en VB.NET ?parce que g des petits pb avec les fonctions sur les matrices...

Commentaire de Ze_Dam le 16/08/2004 10:10:10

Parfaitement ce qu'il me faut, on comprend directement l'utilisation de directX, même si on en a jamais fait. Je met 10/10.

Commentaire de Ze_Dam le 16/08/2004 10:10:13

Parfaitement ce qu'il me faut, on comprend directement l'utilisation de directX, même si on en a jamais fait. Je met 10/10.

Commentaire de bigbourin le 23/05/2005 22:26:00

Parfait pour moi aussi qui debute , 10 / 10 , continue ...

Commentaire de douera game le 16/12/2005 12:28:43

Merci pour ton aide, 10/10

Commentaire de yannickt le 31/12/2005 05:35:55

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.

Commentaire de LaPatoshe le 06/01/2006 01:08:03

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.

Commentaire de dthuler le 22/10/2006 08:18:09

Super idée, très utile pour qui commence! Allez, un p'tit 10 de plus!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales