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

  • VB

  • Jannik
  • 1955 Aufrufe 6 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

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

    Hallo Leute,

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

    PHP-Quellcode

    1. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    2. Dim pen As Pen = New Pen(Color.Black, 2)
    3. Dim GR As Graphics = e.Graphics
    4. '9 Würfel vorne
    5. GR.DrawRectangle(pen, 200, 200, 75, 75)
    6. GR.DrawRectangle(pen, 200, 275, 75, 75)
    7. GR.DrawRectangle(pen, 200, 350, 75, 75)
    8. GR.DrawRectangle(pen, 275, 200, 75, 75)
    9. GR.DrawRectangle(pen, 275, 275, 75, 75)
    10. GR.DrawRectangle(pen, 275, 350, 75, 75)
    11. GR.DrawRectangle(pen, 350, 200, 75, 75)
    12. GR.DrawRectangle(pen, 350, 275, 75, 75)
    13. GR.DrawRectangle(pen, 350, 350, 75, 75)
    14. 'Diagonale Rechts 1
    15. GR.DrawLine(pen, 425, 425, 463, 387)
    16. GR.DrawLine(pen, 425, 350, 463, 312)
    17. GR.DrawLine(pen, 425, 275, 463, 237)
    18. GR.DrawLine(pen, 425, 200, 463, 162)
    19. GR.DrawLine(pen, 463, 387, 463, 162)
    20. 'Diagonale Rechts 2
    21. GR.DrawLine(pen, 463, 387, 502, 349)
    22. GR.DrawLine(pen, 463, 312, 502, 274)
    23. GR.DrawLine(pen, 463, 237, 502, 199)
    24. GR.DrawLine(pen, 463, 161, 502, 124)
    25. GR.DrawLine(pen, 502, 349, 502, 124)
    26. 'Diagonale Rechts 3
    27. GR.DrawLine(pen, 502, 349, 540, 311)
    28. GR.DrawLine(pen, 502, 274, 540, 236)
    29. GR.DrawLine(pen, 502, 199, 540, 161)
    30. GR.DrawLine(pen, 502, 123, 540, 86)
    31. GR.DrawLine(pen, 540, 311, 540, 86)
    32. 'Oben
    33. GR.DrawLine(pen, 200, 200, 314, 86)
    34. GR.DrawLine(pen, 275, 200, 389, 86)
    35. GR.DrawLine(pen, 350, 200, 464, 86)
    36. GR.DrawLine(pen, 314, 86, 540, 86)
    37. GR.DrawLine(pen, 276, 124, 501, 124)
    38. GR.DrawLine(pen, 238, 161, 463, 161)
    39. End Sub
    Alles anzeigen


    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.
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von wasawasa ()

  • 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 ...).
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...
  • 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.
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]