Drawing3d ist für Windows und für Nuget erhältlich
Erste Schritte(Windows)
Es gibt kaum eine einfachere Art der 3D-Programmierung als mit
Drawing 3d.
Mit zwei organisatorischen Schritten und drei Programmzeilen befinden wir uns mitten in der 3D Welt.
Zunächst fügen wir den Verweisen "Drawing3d.dll" hinzu
Wer sich damit nicht so genau auskennt...
Weiter stellen wir
using Drawing3d;
in die using Abteilung des Form1.cs.
Jetzt sind es noch drei Schritte:
- Definition einer eigenen Instanz von OpenGlDevice am Ende des Formulars
public class MyDevice :OpenGlDevice
{
public override void OnPaint()
{
base.OnPaint();
drawSphere(3);
}
}
- Definition und Erzeugung einer Instanz der Klasse MyDevice:
public Device = new MyDevice();
- Im Loadabschnitt vom Form wird der Device ein Control zuweisen, z.B: das Form selbst.
Bemerkung: Der Loadabschnitt wird durch Doppelklick auf das Formular erzeugt.
Device.WinControl = this;
Los geht's! Im OnPaint erfolgt nun die 3D-Ausgabe.
// z.B: Eine Kugel
drawSphere(3);
Bemerkung: Die Einheiten sind cm.
Wenns nicht so ganz geklappt hat:
Download von Hello World
Und das ist das Ergebnis:
Der Quelltext insgesamt :
Versuche folgendes:
-
Füge weitere 3D Körper in der OnPaintmethode hinzu:
Ein Quader an der Stelle (3,2,1) mit den Abmessungen Länge 3 Breite 4, Höhe 2.
void Device_OnPaint(object sender, EventArgs e)
{
....
drawBox(new xyz(3,2,1),new xyz(3,4,2));
...
}
Und das ist das Ergebnis:
Wir hätten gerne verschieden Farben.
Dazu setzen wir das ambiente Licht vor der Kugelausgabe auf blau und
vor der Quaderausgabe auf gelb.
public override void OnPaint()
{
Ambient = Color.Blue;
drawSphere(new xyz(0, 0, 0), 3);
Ambient = Color.Yellow;
drawBox(new xyz(3,2,1),new xyz(3,4,2));
}
-
Neben der Verwendung der Farben für Ambient, Specular und Emission gibt
es die Möglichkeit Materialien vor zu definieren, die entsprechende Farbwerte haben.
In Drawing3d.Materials gibt es einige vordefinierte Materialien.
So z.B.: Gold, Kupfer usw...
Wir verwenden nun Materialien statt der ambienten Farbe.
public override void OnPaint()
{
base.OnPaint();
Material = Materials.Gold;
drawSphere(new xyz(0, 0, 0), 3);
Material = Materials.Pearl;
drawBox(new xyz(3, 2, 1), new xyz(3, 4, 2));
}
Und das ist das Ergebnis:
An dieser Stelle rate ich dir, etwas zu experimentieren und
die Funktionen von der 3D Device und von Tools auszuprobieren.
Viel Spaß!
Erste Schritte(Nuget)
1: Installiere OpenGl.Drawing3d:
Im der Nugetpaketmanager "Install-Package OpenGL.Device -Version 3.3.0" eingeben:
(Extras->Nuget-Paket-Manager->Nuget-Paket-Console)
2: Eine OpenGlDevice erzeugen:
Renderer = new OpenTK.GLControl();
Device = new Drawing3d.OpenGlDevice(Renderer);
Renderer.Parent = this;
3: Die Events vom Renderer auf die Device biegen und das draw-Event der Device
belegen. Dort kann jetzt gezeichnet werden. Dieses Ereignis wird von Device.Refresh() aufgerufen.:
Renderer.SizeChanged += Renderer_SizeChanged;
Renderer.Dock = System.Windows.Forms.DockStyle.Fill;
Renderer.Paint += Renderer_Paint;
Device.Draw += Device_Draw;
private void Renderer_SizeChanged(object sender, EventArgs e)
{
Device.SizeChanged(Renderer.Width, Renderer.Height);
}
private void Renderer_Paint(object sender, PaintEventArgs e)
{
Device.Refresh();
}
private void Device_Draw(object sender, EventArgs e)
{
Device.drawSphere(4); // Hier können jetzt die Zeichenmethoden der Device aufgerufen werden.
}
Damit ist zwar ein Zeichnen möglich, aber die Device erhält keine Maus- und Tastenevents, sodass sie nicht automatisch navigieren kann. Dazu müssen noch folgende Events auf die Device gelegt werden:
Renderer.MouseDown += Renderer_MouseDown;
Renderer.MouseMove += Renderer_MouseMove;
Renderer.MouseUp += Renderer_MouseUp;
Renderer.MouseWheel += Renderer_MouseWheel;
Renderer.KeyPress += Renderer_KeyPress;
Renderer.KeyUp += Renderer_KeyUp;
Renderer.KeyDown += Renderer_KeyDown;
mit
private void Renderer_MouseMove(object sender, MouseEventArgs e)
{
Device.OnMouseMove(Drawing3d.MouseButtons.Left, 1, e.X, e.Y, 0);
}
private void Renderer_MouseDown(object sender, MouseEventArgs e)
{
Device.OnMouseDown(Drawing3d.MouseButtons.Left, 1, e.X, e.Y, 0);
}
private void Renderer_MouseUp(object sender, MouseEventArgs e)
{
Device.OnMouseUp(Drawing3d.MouseButtons.Left, 1, e.X, e.Y, 0);
}
private void Renderer_MouseWheel(object sender, MouseEventArgs e)
{
Device.OnMouseWheel(Drawing3d.MouseButtons.Left, e.Delta, e.X, e.Y, 0);
}
private void Renderer_KeyDown(object sender, KeyEventArgs e)
{
Device.OnKeyDown((Drawing3d.Keys)e.KeyCode);
}
private void Renderer_KeyUp(object sender, KeyEventArgs e)
{
Device.OnKeyUp((Drawing3d.Keys)e.KeyCode);
}
private void Renderer_KeyPress(object sender, KeyPressEventArgs e)
{
Device.OnKeyPress(e.KeyChar);
}
hinzugefügt werden.
Der Code ist in
Addons.txt enthalten.
Viel Spaß!
Hinzufügen zu den Verweisen:
1. Öffne den Projektinspektor
2. Suche dort "Verweise".
3. Rechte Maustaste --> Verweise hinzufügen
4. Dann dauert es eine Weile, bis ein Formular mit Foldern kommt..
5. Wähle Durchsuchen und navigiere ins HelloWorld/Bin/Debug
6. Dort sollten das Drawing3d.dll sein.
7. Anwählen und OK.
8. Jetzt müsste in den Verweisen im Projektinspektor Drawing3d.dll sein.