.NET - 3D Würfel mit Farbe füllen

Status
Für weitere Antworten geschlossen.

jannik93

Well-known member
.NET - 3D Würfel mit Farbe füllen

Hallo Leute,

ich habe mir einen Würfel mit folgendem Code gezeichnet:

PHP:
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim pen As Pen = New Pen(Color.Black, 2)
        Dim GR As Graphics = e.Graphics
        '9 Würfel vorne
        GR.DrawRectangle(pen, 200, 200, 75, 75)
        GR.DrawRectangle(pen, 200, 275, 75, 75)
        GR.DrawRectangle(pen, 200, 350, 75, 75)
        GR.DrawRectangle(pen, 275, 200, 75, 75)
        GR.DrawRectangle(pen, 275, 275, 75, 75)
        GR.DrawRectangle(pen, 275, 350, 75, 75)
        GR.DrawRectangle(pen, 350, 200, 75, 75)
        GR.DrawRectangle(pen, 350, 275, 75, 75)
        GR.DrawRectangle(pen, 350, 350, 75, 75)
        'Diagonale Rechts 1
        GR.DrawLine(pen, 425, 425, 463, 387)
        GR.DrawLine(pen, 425, 350, 463, 312)
        GR.DrawLine(pen, 425, 275, 463, 237)
        GR.DrawLine(pen, 425, 200, 463, 162)
        GR.DrawLine(pen, 463, 387, 463, 162)
        'Diagonale Rechts 2
        GR.DrawLine(pen, 463, 387, 502, 349)
        GR.DrawLine(pen, 463, 312, 502, 274)
        GR.DrawLine(pen, 463, 237, 502, 199)
        GR.DrawLine(pen, 463, 161, 502, 124)
        GR.DrawLine(pen, 502, 349, 502, 124)
        'Diagonale Rechts 3
        GR.DrawLine(pen, 502, 349, 540, 311)
        GR.DrawLine(pen, 502, 274, 540, 236)
        GR.DrawLine(pen, 502, 199, 540, 161)
        GR.DrawLine(pen, 502, 123, 540, 86)
        GR.DrawLine(pen, 540, 311, 540, 86)
        'Oben
        GR.DrawLine(pen, 200, 200, 314, 86)
        GR.DrawLine(pen, 275, 200, 389, 86)
        GR.DrawLine(pen, 350, 200, 464, 86)
        GR.DrawLine(pen, 314, 86, 540, 86)
        GR.DrawLine(pen, 276, 124, 501, 124)
        GR.DrawLine(pen, 238, 161, 463, 161)
    End Sub

Klappt alles wunderbar, jetzt hab ich aber das Problem mit den kleinen Würfelflächen. Ich würde die gerne mit beliebigen Farben füllen, komme aber nicht wirklich weiter.

Später soll der Würfel dann auch noch ein wenig animiert werten.

Gehe ich an die Sache komplett falsch ran oder habt ihr Lösungsvorschläge. Ich würde mir nämlich gerne einen animierten Zauberwürfel (Zauberwürfel) zusammenprogrammieren, den man auch drehen kann und so weiter ;) Habe auch irgendwas mit WPF-Programm mitbekommen, damit habe ich aber überhaupt keine Erfahrung ;)

Vielen Dank für jeden hilfreichen Post hier,

Jannik :)
 
Das Thema hat einige Aspekte.
Ich mache leider recht wenig mit der GDI.
Darum mag es bessere Helfer geben, aber ich mache mal den Anfang.

1. Mit "DrawRectangle" wirst Du nicht wirklich ein gefülltes Rechteck bekommen. Dazu eignet sich "FillRectangle" besser.
2. Wird ein Rechteck gezeichnet so wird es hinterher nicht mehr geändert werden können, da das gezeichnete Bild nicht aus Objekten besteht. Also ist die Lösung aus meiner Sicht: neu zeichnen. (Sieht man meiner Meinung nach auch daran, dass die Zeichenmethoden keine Objektreferenz zurückgeben. Diese müsste man sich merken um sie später manipulieren zu können.)

Vorschlag:
Man könnte z.B. ein internes Abbild in einer Matrix halten und dort die Attribute hinterlegen. Wenn sich was ändert, kann man dann ein neues Bild zeichnen. Um ein Flackern zu verhindern, können zwei Ebenen verwendet werden. Eine versteckt, eine sichtbar. Wenn ein neues Bild gezeichnet wird, dann auf der versteckten Ebene. Wenn es fertig gemahlt ist, dann einfach umschalten.

Was mir noch aufgefallen ist:
Wenn nur Linien (DrawLine) gezeichnet werden, so kann man die nicht füllen. Es müssen schon Flächen sein. Um die Trapeze zu zeichen bietet sich "DrawPolygon" (respective "FillPolygon") an.
 
Danke, hat mir schonmal geholfen, also die ersten neun Würfel hab ich fertig ;)

Aber das Problem kommt jetzt bei der 3D Sicht, die 9 nächsten müssen 45° nach hinten und gefüllt sein ;)

Irgendwelche Ideen ? ;)
 
Hier laufe ich mal wieder Gefahr wegen DOPPELPOST gemaßregelt zu werden.
Aber ich zitiere mich mal:
Was mir noch aufgefallen ist:
Wenn nur Linien (DrawLine) gezeichnet werden, so kann man die nicht füllen. Es müssen schon Flächen sein. Um die Trapeze zu zeichen bietet sich "DrawPolygon" (respective "FillPolygon") an.

Damit habe ich die Würfel an den Seitenflächen angesprochen. Ich würde die Methode "zeichneWuerfel" machen. Die Frontwürfel sind Rechtecke und die Seitenwürfel sind Trapeze (Polygone). Die kann man dann auch farbig füllen. Wie etwas gezeichnet wird ist dann Sache der Methode. (Rechtecke wären in dem Sinne ja auch Polygone ...).
 
jannik93 was du da machst ist prinzipiell nichts anderes als einen eigenen 3D Software Renderer zu schreiben (was meiner Meinung nach für das was du vor hast etwas übertriben klingt ;) )

Du könntest alternativ z.B. XNA zum zeichnen des würfels benutzen. Wenn du dafür beispielsweise ein 3d modell eines würfels verwendest hast du beim rotieren auch schon funktionen die dir dabei helfen.
 
Das ist wohl wahr, aber bis man XNA gelernt hat dauert es auch ein Weilchen ...
 
Ich werds mir nochmal genauer überlegen, wie ich das jetzt genau mit meinem "Rubriks Cube" anstelle ;)
 
Status
Für weitere Antworten geschlossen.

Beliebte Schlagwörter

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

Zurück
Oben Unten