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

VB.NET Discussion :

dessiner en 3D avec GDI+


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de jesslegende
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 102
    Points
    102
    Par défaut dessiner en 3D avec GDI+
    bonjour à tous,
    je compte sur votre aide les amis pour savoir s'il vous plait s'il y a des possibilités de dessiner en 3D avec le GDI+, aussi pour savoir si je peux attribuer ces dessins au background de mes contrôles.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    si tu calcules la 3D toi même pourquoi pas

    sinon passe en wpf ou xna

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,
    GDI+ ne gère pas la 3D,mais seulement le 2D. Il n'y a pas non plus l'accélération matérielle derrière. Donc il va te falloir voir la 3D par toi même où avec une librairie externe mais les perfs seront bien vite très limites...

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    si tu as déjà une appli windows form avancée, il est possible de mettre de wpf dedans sans recoder toute l'appli en wpf

  5. #5
    Membre régulier Avatar de jesslegende
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 102
    Points
    102
    Par défaut
    bonjour et merci à vous pol63 et cybermaxs de votre aide.
    une solution avec seulement GDI+ aurait pu nous faire eviter la perte du temps non? encore une petite chose j'ai déja vu des exemples de graphics 3D avec du gdi+ en CSharp ce qu'il me fait penser que ca devrait être possible en vb.net puisque les deux travaillent sur les mêmes classes du framework.net

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 379
    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 379
    Points : 20 447
    Points
    20 447
    Par défaut
    Citation Envoyé par jesslegende Voir le message
    une solution avec seulement GDI+ aurait pu nous faire eviter la perte du temps non?

    Non ce n'est pas possible de faire de la 3d avec GDI+ !
    Le GDI+ comme son nom le laisse supposer c'est une extension du Graphic Device Interface avec plus de fonctionnalités et en mode "managed".
    Le GDI de base qui est contenu dans gdi32.dll ( pour Windows 32bits) permet de dessiner les fenêtres faire des tracés graphiques etc..
    Si tu veux faire des formes 3d le mieux vraiment est d'utiliser les Windows Presentation Form ( WPF)
    Pour de la 3d temps réelle avec accélération matérielle il y a DX Managed mais Microsoft a abandonné le support ( regarder alors Slim DX)

    encore une petite chose j'ai déja vu des exemples de graphics 3D avec du gdi+ en CSharp ce qu'il me fait penser que ca devrait être possible en vb.net puisque les deux travaillent sur les mêmes classes du framework.net
    Rien ne t'empêche de faire tes propres routines de tracés 3d avec des lignes tu peux dessiner en fil de fer..
    mais il faudra que tu fasses toutes les transformations 3d les calculs sur les matrices rotation,translation, mise à échelle.
    Le problème ce sera pour appliquer une bitmap sur les facettes et puis les techniques de 3d sont assez pointues à mettre en oeuvre comme l'antialiasing ( anticrénelage)

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par jesslegende Voir le message
    bonjour et merci à vous pol63 et cybermaxs de votre aide.
    une solution avec seulement GDI+ aurait pu nous faire eviter la perte du temps non? encore une petite chose j'ai déja vu des exemples de graphics 3D avec du gdi+ en CSharp ce qu'il me fait penser que ca devrait être possible en vb.net puisque les deux travaillent sur les mêmes classes du framework.net
    Il ne faut pas confondre, on peut faire avec il faut faire. Bien sûr que certains arrivent à faire de la 3D, enfin à dessiner un truc qui a l'air en 3D ; mais c'est au prix d'efforts considérables et surtout contre-nature.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    La 3D : il faut déjà définir ce que c'est ... Dans le monde du SIG on parle de 2D et demi et de 3 D, ce qui n'a rien à voir avec la 3D "animation" des jeux, qui n'a rien à voir avec la 3D de KATIA ou AUTOCAD (qui soit dit en passant est entièrement basé sur du GDI).

    Si vous avez l'intention de vous lancer dans l'écriture d'algo 3D, je vous conseille l'excellent livre de Rémy Malgouyres "Algorithmes pour la synthèse d'image et l'animation 3D", ceci dit il faut avoir un minimum de connaissances en maths.

    Le GDI+ comme son nom le laisse supposer c'est une extension du Graphic Device Interface avec plus de fonctionnalités et en mode "managed".
    Oui, mais honnêtement la GDI+ est loin d'être aussi interresante que la GDI en matière de performances. Si elle apporte une fonctionnalité supplémentaire en matière de transparence, en revanche elle est très limité en matière de mémoire et n'est bonne que pour du dessin "bureautique".

    Essayez de gérer (rotation par exemple) des gros bitmap en bicolore ou 256 couleurs vous allez rigoler (moi pas) , essayez de dessiner un rectangle de sélection avec la souris idem pas de gestion de rasterop ... Bref pour ma part la GDI+ est une restriction de la GDI, elle est certes plus facile à mettre en oeuvre et plus "safe" mais automatiquement limitée.

    A ce sujet ma question sur le StretchDIBits en .NET reste sans réponse ...

    A+

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    autocad peut peut-etre fonctionner en gdi, mais il a aussi d'autre modes de rendu tirant parti des perfs des cartes graphiques

    et gdi+ qui gère la transparence, c'est du bidouillage quand même ...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    mais il a aussi d'autre modes de rendu tirant parti des perfs des cartes graphiques
    Oui, c'est pour cela que je parlais de "définition" de la 3D, car dès que l'on s'attaque à du rendu, textures, éclairage etc il faut oublier la GDI, par contre pour du "fil de fer" c'est jouable.

    gdi+ qui gère la transparence, c'est du bidouillage quand même
    Si vous avez connaissance de la nature du "bidouillage" ça m'intéresse car j'aimerai l'appliquer en GDI (% transparence d'un polygone ).

    A+

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 174
    Points : 25 115
    Points
    25 115
    Par défaut
    je ne connais pas gdi+ particulièrement, mais je pense avoir assimilé le fonctionnement des controles .net

    quand on défini un controle avec une couleur de fond transparente, le controle demande à son parent de se déssiner sur lui, puis se dessine
    donc c'est pas de la transparence réelle où le controle ne déssinerait que ses parties visibles (et donc moins performant, car les contrôles non seulement se dessinent trop souvent (des centaines de fois sur win xp), mais en plus se redessinent sur leurs enfants)

    donc le cas où sur un form tu mets un backcolor rouge
    tu poses un controle sur le form, background transparent et png transparent autour, rendu ok
    tu poses un autre controle sur le form, background transparent et png transparent, mais qui se chevauche légèrement avec le premier controle
    la parent du 2eme controle étant le form, il demande au form de se redessiner sur lui (fond rouge) avant de dessiner son png par dessus

    au final, le ARGB existe bien, mais ce n'est pas vraiment de la transparence car le 2ème controle se chevauchant avec le 1er il devrait laisser paraitre un morceau du 1er controle, ce qui n'est pas le cas

  12. #12
    Membre régulier Avatar de jesslegende
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 102
    Points
    102
    Par défaut
    voilà, contrairement à la 3d la transparence est traitée dans le .Net alors que pour comprendre la différence entre la 3d et la 2d il faut déja avoir de la 3d chose qui reste pour moi illogic puisque je travaille sur un ecran 2d aussi la 3d tel qu'en la connait est basé sur la 2d plus des calcules, et je comprends les amis quand ils disent non c'est pas possible c'est ce je pense quand je vois que toutes les methodes de drawing ne prennent en charge que le x et y et c'est justement pourquoi je parlais de possibilités.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    toutes les methodes de drawing ne prennent en charge que le x et y
    Et il n'y a pas besoin de plus pour faire de la 3D sur un écran, tout n'est que projections. C'est pour cela que je conseillais un bouquin, et conseillais aussi d'avoir de solides connaissances en maths.

    A+

  14. #14
    Membre régulier Avatar de jesslegende
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 102
    Points
    102
    Par défaut dessiner un cub
    re,
    je voulais partager avec vous mon modest essaie pour dessiner un cub il est un nul mais je me suis dis que ca peut servir à d'autre personnes.

    pour faciliter ma tache j'ai creé un point 3d:
    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
     
    Public Class point3dxy
     
        Private x As Single
        Private y As Single
        Private z As Single
        Private point3d As New Point
     
        Public Sub New(ByVal x As Single, ByVal y As Single, ByVal z As Single)
     
            Me.x = x : Me.y = y : Me.z = z
     
            point3d.X = x + z / 2
            point3d.Y = y + z / 2
     
        End Sub
     
        Public ReadOnly Property getpoint3d() As Point
            Get
                Return Me.point3d
            End Get
        End Property
     
    End Class
    et pour creer le cube:
    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
     
    Imports System.Drawing
    Imports System.Drawing.Drawing2D
    Imports System.Drawing.Imaging
     
    Public Class Form1
        Dim gr As Graphics
        Dim point3dxy As point3dxy
        Dim point3d As Point
        Dim x As Single = 150 : Dim y As Single = 150 : Dim z As Single = 0
        Dim x1 As Single = 150 : Dim y1 As Single = 150 : Dim z1 As Single = 100
        Dim wid As Single = 200
        Dim heigh As Single = 200
     
     
        Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
     
            Dim mypen As New Pen(Color.DarkSlateBlue, 4)
            gr = e.Graphics
     
            point3dxy = New point3dxy(x, y, z)
            point3d = point3dxy.getpoint3d
            gr.DrawRectangle(mypen, New Rectangle(point3d, New Size(wid, heigh)))
            point3dxy = New point3dxy(x, y, z1)
            point3d = point3dxy.getpoint3d
            gr.DrawRectangle(mypen, New Rectangle(point3d, New Size(wid, heigh)))
     
            'une solution pou faire vite, c-a-d si vous changer les coordonnés ca risque...
     
            gr.DrawLine(mypen, x, y, (x1 + (z1 / 2)), (y1 + (z1 / 2)))
            gr.DrawLine(mypen, x, (y + heigh), (x1 + (z1 / 2)), (y1 + (z1 / 2)) + heigh)
            gr.DrawLine(mypen, x + wid, y, (x1 + (z1 / 2)) + wid, (y1 + z1 / 2))
            gr.DrawLine(mypen, x + wid, y + heigh, (x1 + (z1 / 2)) + wid, (y1 + (z1 / 2)) + heigh)
     
            mypen.Dispose()
            gr.Dispose()
     
        End Sub
     
    End Class
    ce qui produit un dessin comme dans les imgs de pj.
    Images attachées Images attachées  

  15. #15
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 379
    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 379
    Points : 20 447
    Points
    20 447
    Par défaut
    Citation Envoyé par Geo2A Voir le message
    Bonjour,

    La 3D : il faut déjà définir ce que c'est ... Dans le monde du SIG on parle de 2D et demi et de 3 D, ce qui n'a rien à voir avec la 3D "animation" des jeux, qui n'a rien à voir avec la 3D de KATIA ou AUTOCAD (qui soit dit en passant est entièrement basé sur du GDI).
    Autocad je ne sais pas mais pour Catia il y a erreur , Catia doit utiliser partiellement le GDI sous Windows; Catia utilise massivement Open GL
    A ce sujet ma question sur le StretchDIBits en .NET reste sans réponse ...

    A+
    Ou est ta question ?
    Peut-être est-tu obligé de passer par les API win32

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Points : 390
    Points
    390
    Par défaut
    Bonjour,

    Pour Catia je ne parlais pas de GDI32, car j'ai écrit "est" non pas "sont". Ceci dit je vous l'accorde la phrase est ambigüe.

    Ma question est là :

    http://www.developpez.net/forums/d88...dibits-vb-net/

    Je retravaille ce sujet et je commence à avoir une petite idée sur la problématique du .bisize, peut-être faut-il utiliser un marshal.sizeof() pour définir la taille de la structure ?

    De même le fait que le pointeur sur l'adresse du paquets de bits de l'image soit attribué par une dll non managée le rend inutilisable directement dans mon code ? Dans ce cas comment faire pour pouvoir l'utiliser ?

    A+

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

Discussions similaires

  1. Dessin avec GDI+
    Par frankthechamp dans le forum Windows Forms
    Réponses: 7
    Dernier message: 01/12/2008, 03h45
  2. Dessiner avec GDI dans un CWindowDC
    Par squale32 dans le forum MFC
    Réponses: 0
    Dernier message: 22/04/2008, 16h00
  3. Réponses: 2
    Dernier message: 02/07/2005, 19h14
  4. Dessiner un repere avec GDI ?
    Par djiwalloo dans le forum MFC
    Réponses: 19
    Dernier message: 12/10/2004, 11h57
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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