Benutzerdefinierte Suche

Wie macht ne Grafikarte Würfel??

  1. Zwergenkönig

    Zwergenkönig Thread StarterMacUser Mitglied

    Mitglied seit:
    09.05.2004
    Beiträge:
    994
    Zustimmungen:
    16
    Ich versuche seit einigen Wochen in einer 2D Programiersprache einen Würfel zu zeichnen, den man drehen kann...

    Ich habe eine Datei, in der die Eckpunkte des Würfels in 3 Koordinaten gespeichert werden,
    also so ungefähr
    Code:
    x1
    y1
    z1
    x2
    y2
    z2
    usw..

    Im Programm zeichne ich die Linien folgendermaßen:

    Code:
    xx1=x1*cos(alpha)+z1*sin(alpha)
    yy1=y1*cos(beta)-z1*sin(beta)
    xx2=x2*cos(alpha)+z2*sin(alpha)
    yy2=y2*cos(beta)-z2*sin(beta)
    line xx1,yy1,xx2,yy2
    
    Erklärung:

    cos = coSinus
    sin = Sinus
    alpha = Variable, mit der man den Würfel um seine y Achse dreht
    beta = Variable, mit der man den Würfel um seine x Achse dreht..
    line x1,y1,x2,y2= zeichne-Linie-befehl, von x1/y1 nach x2/y2

    Das ganze funktioniert auch, wenn man den Würfel nur um eine Achse dreht, wenn man versucht ihn um beide Achsen gleichzeitig zu drehen, wird der Würfel verzerrt...
     
    Zwergenkönig, 20.08.2004
  2. Tatcher a Hainu

    Tatcher a HainuMacUser Mitglied

    Mitglied seit:
    03.02.2004
    Beiträge:
    711
    Zustimmungen:
    2
    Hej!

    Mit der Grafikkarte hat das eigentlich gar nichts zu tun, es liegt eher an der Mathematik.
    Ich würde sagen das du zwei Drehmatritzen brauchst.

    Ich stell mir das so vor. Nehmen wir an dein Würfel dreht sich um die x-Achse. Als zweite Bewegung soll er sich um die y-Achse drehen. dh. Dreht sich der Würfel auf der x-Achse ein Stückchen nach rechts, muß in der selben Zeit, bei entsprechendem Drehsinn, auch die z-Komponenten des Würfels zunehmen (da er sich ja um y dreht).

    Ich würde deshalb sagen das wenn du die Ergebnisse für eine Achse hast, die Werte nochmal in eine Drehmatrix steckst die dir die Rotation um die nächste Achse besorgt.
    Ob das wirklich so funktioniert kann ich nicht versprechen. Ganz durchdacht habe ich es auch nicht.

    Viel Erfolg!

    Christian
     
    Tatcher a Hainu, 20.08.2004
  3. Jerry

    JerryMacUser Mitglied

    Mitglied seit:
    22.11.2003
    Beiträge:
    287
    Zustimmungen:
    1
    joa, ich denke mal, dann stimmt mit deiner Drehfunktion was nicht. Probier mal folgende Rotationsmatrix:

    Rotation in der xy-Ebene um Winkel a:

    | cos a -sin a 0 |
    | sin a cos a 0 |
    | 0 0 1 |

    Rotation in der xz-Ebene um Winkel b:

    | cos b 0 sin b |
    | 0 1 0 |
    | -sin b 1 cos b |

    Rotation in der yz-Ebene um Winkel c:

    | 1 0 0 |
    | 0 cos c -sin c |
    | 0 sin c cos c |

    Damit sollte es dann klappen.
    Warum nimmst Du nicht einfach OpenGL? Die Rotationsalgos sind da hochoptimiert und du musst nur mit einem einzigen Befehl den Würfel drehen? Außerdem entfällt das selberzeichnen der Würfellinien, weil OpenGL das übenimmt. Du musst ihm nur die Eckpunkte angeben.

    Jerry
     
    Jerry, 21.08.2004
  4. Tatcher a Hainu

    Tatcher a HainuMacUser Mitglied

    Mitglied seit:
    03.02.2004
    Beiträge:
    711
    Zustimmungen:
    2
    Hej!

    Hier noch die mathematischen Grundlagen:

    http://mathworld.wolfram.com/RotationMatrix.html

    Ich würde das ganze mal so versuchen:

    [x1' x2' x3']=Rx(a)Ry(b)Rz(c)[x1 x2 x3]

    Sollten die Eigenwerte dieser Matrix Rx(a)Ry(b)Rz(c)

    1) alle 1 sein
    2) einer 1 und die beiden anderen -1
    3) oder 1 und die beiden anderen kompl konj von e^iy, e^-iy

    und die Determinaten gleich eins sein,

    sein, ist das Ding eine orthogonale Transformation und müsste die Form eigentlich behalten.

    Grüße

    Christian
     
    Tatcher a Hainu, 21.08.2004
  5. Zwergenkönig

    Zwergenkönig Thread StarterMacUser Mitglied

    Mitglied seit:
    09.05.2004
    Beiträge:
    994
    Zustimmungen:
    16
    @ Jerry, Der sinn des Ganze lioegt ja darin, dass ganze selbst zumachen, um das mal zu verstehen..
     
    Zwergenkönig, 21.08.2004
  6. Jerry

    JerryMacUser Mitglied

    Mitglied seit:
    22.11.2003
    Beiträge:
    287
    Zustimmungen:
    1
    Da Du ja nicht erwähnt hast, wozu Du das überhaupt machst, wollte ich Dir damit nur sagen, daß es mit OpenGL schneller und einfacher geht. Da muß man das Rad nicht neu erfinden
     
    Jerry, 21.08.2004
  7. ?=?

    ?=?MacUser Mitglied

    Mitglied seit:
    09.02.2004
    Beiträge:
    941
    Zustimmungen:
    14
    Hmm, die Rotation im Raum wurde ja ausführlich diskutiert (abgesehen von der Optimierung, zuerst alle Matrizen miteinander zu multiplizieren, um die Koordinaten anschließend nur noch mit der Ergebnis-Matrix multiplizieren zu müssen).

    Was ich in der Diskussion vermisse ist das verwendete Verfahren zur Projektion der 3D auf die auszugebenden 2D Koordinaten.
    Zumindest muss dein Betrachtungspunkt weit genug vom Objekt entfernt liegen, damit es nicht zu unnatürlich wirkenden Verzerrungen kommt.


    Gruß,

    ?=?
     
  8. Jerry

    JerryMacUser Mitglied

    Mitglied seit:
    22.11.2003
    Beiträge:
    287
    Zustimmungen:
    1
    Die Projektion ist auch kein größeres Problem. Man definiert sich bei einer Parallelprojektion einfach einen Projektionsvektor und erzeugt eine Gerade durch die 3D-Punkte des Würfels mit dem Projektionsvektor als Richtungsvektor. Anschließend berechnet man einfach den Schnittpunkt mit der Bildschirmebene. Bei der Zentralprojektion ist der Projektionsvektor abhängig vom Ortsvektor des Projektionszentrums und vom Ortsvektor des zu projizierenden Punktes. Muß also immer neu berechnet werden. Ansonsten ist es das gleiche Verfahren. Die unnatürlich wirkenden Verzerrungen kommen dann nur dadurch zustande, wenn das Projektionszentrum zu nah am Würfel liegt.

    Jerry
     
    Jerry, 21.08.2004
Die Seite wird geladen...
Ähnliche Themen - macht Grafikarte Würfel
  1. heinetz
    Antworten:
    1
    Aufrufe:
    810
    heinetz
    27.03.2014
  2. frauenPower
    Antworten:
    6
    Aufrufe:
    986
    frauenPower
    05.07.2011
  3. frapu
    Antworten:
    3
    Aufrufe:
    1.928
    oneOeight
    10.10.2006
  4. Bas-T
    Antworten:
    21
    Aufrufe:
    1.610