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.
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.
si tu calcules la 3D toi même pourquoi pas
sinon passe en wpf ou xna
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...
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
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
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)
Rien ne t'empêche de faire tes propres routines de tracés 3d avec des lignes tu peux dessiner en fil de fer..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
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)
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.
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".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".
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+
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 ...
Bonjour,
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.mais il a aussi d'autre modes de rendu tirant parti des perfs des cartes graphiques
Si vous avez connaissance de la nature du "bidouillage" ça m'intéresse car j'aimerai l'appliquer en GDI (% transparence d'un polygone ).gdi+ qui gère la transparence, c'est du bidouillage quand même
A+
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
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.
Bonjour,
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.toutes les methodes de drawing ne prennent en charge que le x et y
A+
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:
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 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
ce qui produit un dessin comme dans les imgs de pj.
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
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
Ou est ta question ?A ce sujet ma question sur le StretchDIBits en .NET reste sans réponse ...
A+
Peut-être est-tu obligé de passer par les API win32
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+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager