IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

direct3d et VB6


Sujet :

DirectX

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 102
    Points
    102
    Par défaut direct3d et VB6
    Bonjour,
    Tout d'abord merci à tous pour votre précieuse aide car sans elle , beaucoup d'entre nous n'avançerait pas dans ce dur monde du développement ou la documentation ( surtout en directx direct3d est très modeste).
    Maintenant voici mon problème c'est tout simple:
    Ayant conçu un petit programme en VB6 et direct3d je voudrais savoir comment peut on faire pour afficher une image fixe dans un monde 3D c'est à dire que mème si l'on fait bouger le monde par l'intermédiaire des matrices , mon image doit toujours rester à la mème place?.
    Voilà , je ne vous demande pas un listing complet mais au moins une piste pour pouvoir avançer.
    Merci d'avance et cordiales salutations

  2. #2
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    Citation Envoyé par yvanovitch Voir le message
    afficher une image fixe dans un monde 3D c'est à dire que mème si l'on fait bouger le monde par l'intermédiaire des matrices , mon image doit toujours rester à la mème place?.
    Qu'entends tu par image fixe ?

    Une image qui quand tu tournes autour d'elle reste face caméra ? une image sur la fenêtre qui servirai a afficher une mini map ? Autre chose ?

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 385
    Points
    20 385
    Par défaut
    Citation Envoyé par yvanovitch Voir le message
    Ayant conçu un petit programme en VB6 et direct3d je voudrais savoir comment peut on faire pour afficher une image fixe dans un monde 3D c'est à dire que mème si l'on fait bouger le monde par l'intermédiaire des matrices , mon image doit toujours rester à la mème place?.
    quelle version de Direct X ? Quelles technologies utilisées ?
    Si tu veux une image fixe sous D3d9 ( et D3d8 je crois aussi) tu peux utiliser un D3dxpsrite que tu affiches dans une partie de la boucle de rendu..
    un D3dxpsrite est très souple et aisé à utiliser pour afficher une simple bitmap 2d.
    Avec D3dxpsrite tu n'as pas besoin de faire de transformations avec ID3dDevice::SetTransform et il suffit d'appeler la méthode Draw de cette interface.
    Sinon tu peux aussi utiliser un quad vertex texturé initialisé dans un Vertex Buffer...
    pour les versions antérieures de Direct X c.a.d Direct X 7 et en-dessous tu peux simplement obtenir une DirectDrawSurface et dessiner dessus , afficher une bitmap ( voir le fichier ddrawutil.cpp du SDK )
    Mais je ne conseille pas trop d'utiliser DirectDraw avec les cartes plus récentes il risque d'y avoir des incompatibilités.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 385
    Points
    20 385
    Par défaut
    Salut Yvanovitch dur dur de se remettre à VB6
    bon j'ai transposé du code C++ ( de mon jeu ) vers du code VB6
    J'ai crée un projet avec juste une Form
    Pour ceux que cela intéresse je peux envoyer le projet mais j'ai pas trop testé il faudra faire des ajustements le SDK de Direct X est vivement conseillé

    Donc voilà le module modD3d.bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    Option Explicit
    Global ObjDX8 As DirectX8
    Global ObjD3d8 As Direct3D8
    Global Objd3dDevice As Direct3DDevice8
    Global ObjD3Dx As D3DX8
    Global ObjSprite As D3DXSprite
    Global ObjTexture As Direct3DTexture8
     
    Public Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type
     
    Public Sub main()
      Load Form1
      Render
    End Sub
     
     
    Public Sub InitD3d(frm As Form)
    Dim D3Ddm As D3DDISPLAYMODE
    Dim d3dpp As D3DPRESENT_PARAMETERS
    Dim ImageInfo As D3DXIMAGE_INFO
      Set ObjDX8 = New DirectX8
      Set ObjD3d8 = ObjDX8.Direct3DCreate
      ObjD3d8.GetAdapterDisplayMode 0, D3Ddm
      d3dpp.Windowed = True
      d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD
      d3dpp.BackBufferFormat = D3Ddm.Format
      d3dpp.hDeviceWindow = frm.hWnd
      'd3dpp.BackBufferWidth = frm.ScaleHeight
      'd3dpp.BackBufferHeight = frm.ScaleWidth
      d3dpp.BackBufferWidth = 800
      d3dpp.BackBufferHeight = 600
      d3dpp.BackBufferCount = 1
      d3dpp.EnableAutoDepthStencil = True
      d3dpp.AutoDepthStencilFormat = D3DFMT_D16
      Set Objd3dDevice = ObjD3d8.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, frm.hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp)
      Set ObjSprite = ObjD3Dx.CreateSprite(Objd3dDevice)
      Set ObjTexture = ObjD3Dx.CreateTextureFromFileEx("MonImage.bmp", 0, 0, 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT, RGB(0, 0, 0), ImageInfo, 0)
    End Sub
     
    Public Sub Render()
    Dim pos As D3DVECTOR2
    Dim rot As D3DVECTOR2
    Dim vecScale As D3DVECTOR2
     
     
    Dim rectSrc As RECT
    rectSrc.Left = 0
    rectSrc.Top = 0
    rectSrc.Right = 256
    rectSrc.Bottom = 256
    Objd3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, RGB(255, 0, 0), 1, 0
     
    Objd3dDevice.BeginScene
    ObjSprite.Draw ObjTexture, rectSrc, 0, 0, 0, RGB(0, 0, 0)
    Objd3dDevice.EndScene
    Objd3dDevice.Present 0, 0, 0, 0
    End Sub
    puis la form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Option Explicit
     
    Private Sub Form_Load()
      InitD3d Me
    End Sub
    Important
    Il faut que la taille de la texture soit multiple de 2 je crois sous Direct X 8 sinon il faut passer le paramètre D3DX_DEFAULT_NONPOW2 qui vaut -2
    Je conseille vivement d'utiliser Direct X 9 que Direct X 8 car la méthode de DXSprite permet de passer un RECT destination et RECT source pour dessiner

    Sinon j'avais commencé un exemple d'utilisation de DxSprite en C++ pour les contributions de DVP

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 102
    Points
    102
    Par défaut direct3d
    Bonjour,
    En fait c'est tout simple , je voudrais dans un monde 3d composé de plusieurs objets , ne pouvoir en bouger qu'un seul( donc ne pas agir sur la matrice World).
    Un exemple en VB6 composé de deux triangles vu de face et pour un des deux pouvoir faire une rotation sans que le 2eme bouge résoudrait mon problème.
    Encore merci pour votre aide à tous

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 385
    Points
    20 385
    Par défaut
    Citation Envoyé par yvanovitch Voir le message
    Bonjour,
    En fait c'est tout simple , je voudrais dans un monde 3d composé de plusieurs objets , ne pouvoir en bouger qu'un seul( donc ne pas agir sur la matrice World).
    Un exemple en VB6 composé de deux triangles vu de face et pour un des deux pouvoir faire une rotation sans que le 2eme bouge résoudrait mon problème.
    Encore merci pour votre aide à tous

    salut Yvanovitch pour bouger un objet on est obligé d'appliquer des transformations sur la matrice World de toute façon..
    je ne connais pas d'autres possibilités.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Direct3D sous VB6
    Par yvanovitch dans le forum DirectX
    Réponses: 1
    Dernier message: 06/01/2012, 08h41
  2. vb6/Directx8 et direct3D
    Par yvanovitch dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/11/2009, 09h06
  3. direct3d sous VB6
    Par yvanovitch dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/11/2009, 00h28
  4. vb6/directx8 et direct3d
    Par yvanovitch dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/11/2009, 00h36
  5. Direct8X/Direct3D sous VB6, probleme de récup d'animations
    Par John Blobsmith dans le forum DirectX
    Réponses: 3
    Dernier message: 28/04/2004, 10h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo