Name der DLL:
GDI3D oder auch Graphics3D
Beschreibung:
Da ich mich in der letzten Zeit wieder mal mit DirectX beschäftigt habe, mir aber das seitenlange coden, Errorhandling, OnLostDevicehandling, usw, usw, langsam auf den Senkel ging, habe ich mich nach einer Alternative umgeschaut, konnte aber kaum etwas brauchbares finden. Durch diesen Thread kam mir die Idee von GDI3D.
GDI3D ist eine Klassenbibliothek, mit der man schnell und einfach 3D zeichnen kann - mit GDI.
Dazu können alle möglichen sogenannte Meshes (also Drahtgittermodelle) aus Dateien geladen werden.
Das (zur Zeit einzige) unterstützte Dateiformat ist das *Obj-Format von Wavefront. Nahezu jede Modeller-Software (auch Blender!) kann dieses Format exportieren.
Was mich selbst überrascht hat, ist die relativ hohe Performance von GDI. Erst ab etwa 5000 Polygonen pro Frame, kommt es bei mir zum leichten Ruckeln.
Open Source!
Anwendung:
GDI3D lässt sich leicht integrieren.
Wichtig sind jedoch folgende Schritte:
• Instanziierung der Graphics3D-Klasse und Übergabe der Zeichengröße
• Festlegen der World-, View-, und Projection-Matrizen (wer schon einmal mit DX gearbeitet hat, sollte das kennen)
Und schon kann es losgehen. Hier ein Beispiel-Code zum zeichnen eines Meshes, das aus einer Datei geladen wurde, in die gesamte Form "Form1":
Spoiler anzeigen
Screenshot und Video:
Und hier noch ein tolles Video.
Verwendete Programmiersprache:
VB.Net
Systemanforderungen:
• .NET Framework 2.0
• Es ist keine DirectX-Runtime nötig.
Lizenz:
LGPL
Download:
GDI3D Release (10 KB)
Source-Code-Projekt (30 KB)
Beispiel OBJ-Mesh (45 KB)
Demo-Projekt
Viel Spaß!
GDI3D oder auch Graphics3D
Beschreibung:
Da ich mich in der letzten Zeit wieder mal mit DirectX beschäftigt habe, mir aber das seitenlange coden, Errorhandling, OnLostDevicehandling, usw, usw, langsam auf den Senkel ging, habe ich mich nach einer Alternative umgeschaut, konnte aber kaum etwas brauchbares finden. Durch diesen Thread kam mir die Idee von GDI3D.
GDI3D ist eine Klassenbibliothek, mit der man schnell und einfach 3D zeichnen kann - mit GDI.
Dazu können alle möglichen sogenannte Meshes (also Drahtgittermodelle) aus Dateien geladen werden.
Das (zur Zeit einzige) unterstützte Dateiformat ist das *Obj-Format von Wavefront. Nahezu jede Modeller-Software (auch Blender!) kann dieses Format exportieren.
Was mich selbst überrascht hat, ist die relativ hohe Performance von GDI. Erst ab etwa 5000 Polygonen pro Frame, kommt es bei mir zum leichten Ruckeln.
Open Source!
Anwendung:
GDI3D lässt sich leicht integrieren.
Wichtig sind jedoch folgende Schritte:
• Instanziierung der Graphics3D-Klasse und Übergabe der Zeichengröße
• Festlegen der World-, View-, und Projection-Matrizen (wer schon einmal mit DX gearbeitet hat, sollte das kennen)
Und schon kann es losgehen. Hier ein Beispiel-Code zum zeichnen eines Meshes, das aus einer Datei geladen wurde, in die gesamte Form "Form1":
VB.NET-Quellcode
- Imports GDI3D
- Public Class Form1
- Private Sample_Graphics As Graphics3D
- Private Sample_Mesh As Mesh
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer, True)
- ' Das Mesh wird geladen
- Sample_Mesh = Mesh.FromFile("C:\Dokumente und Einstellungen\Lukas\Desktop\untitled3.obj")
- ' Initialisierung der Graphics3D-Instanz und der Matrizen
- Sample_Graphics = New Graphics3D(Me.ClientSize)
- Sample_Graphics.Transform_World = Matrix.Identity
- Sample_Graphics.Transform_View = Matrix.Translation(0, 0, -5)
- Sample_Graphics.Transform_Projection = Matrix.Projection(Math.PI / 4, Me.ClientSize.Width / Me.ClientSize.Height, 0.1, 1000)
- End Sub
- Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
- ' Das Mesh soll sich um die Y-Achse drehen (Wichtig: Die Winkel sind in Radiant anzugeben)
- Sample_Graphics.Transform_World = Matrix.Rotate_Y_Axis(Now.Millisecond * (Math.PI * 2) / 1000)
- ' Das Mesh wird gezeichnet
- Sample_Graphics.Draw_Mesh(e.Graphics, Sample_Mesh, Color.FromArgb(240, 100, 20), GDI3D.Graphics3D.DrawMode.Fill Or GDI3D.Graphics3D.DrawMode.Wireframe)
- Me.Invalidate()
- End Sub
- Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
- ' Da sich nun das Sichtfenster verändert hat, muss auch die Zeichenfläche und
- ' das Seitenverhältnis der Projektion verändert werden
- If Sample_Graphics IsNot Nothing Then
- Sample_Graphics.Bounds = Me.ClientSize
- Sample_Graphics.Transform_Projection = Matrix.Projection(Math.PI / 4, Me.ClientSize.Width / Me.ClientSize.Height, 0.1, 1000)
- End If
- End Sub
- End Class
Screenshot und Video:
Und hier noch ein tolles Video.
Verwendete Programmiersprache:
VB.Net
Systemanforderungen:
• .NET Framework 2.0
• Es ist keine DirectX-Runtime nötig.
Lizenz:
LGPL
Download:
GDI3D Release (10 KB)
Source-Code-Projekt (30 KB)
Beispiel OBJ-Mesh (45 KB)
Demo-Projekt
Viel Spaß!
Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „nikeee13“ ()