Wie macht ne Grafikarte Würfel??

Diskutiere mit über: Wie macht ne Grafikarte Würfel?? im Mac OS X Entwickler, Programmierer Forum

  1. Zwergenkönig

    Zwergenkönig Thread Starter MacUser Mitglied

    Beiträge:
    994
    Zustimmungen:
    16
    Registriert seit:
    09.05.2004
    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...
     
    Zuletzt bearbeitet: 20.08.2004
  2. Tatcher a Hainu

    Tatcher a Hainu MacUser Mitglied

    Beiträge:
    713
    Zustimmungen:
    2
    Registriert seit:
    03.02.2004
    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
     
  3. Jerry

    Jerry MacUser Mitglied

    Beiträge:
    287
    Zustimmungen:
    1
    Registriert seit:
    22.11.2003
    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
     
  4. Tatcher a Hainu

    Tatcher a Hainu MacUser Mitglied

    Beiträge:
    713
    Zustimmungen:
    2
    Registriert seit:
    03.02.2004
    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
     
  5. Zwergenkönig

    Zwergenkönig Thread Starter MacUser Mitglied

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

    Jerry MacUser Mitglied

    Beiträge:
    287
    Zustimmungen:
    1
    Registriert seit:
    22.11.2003
    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
     
  7. ?=?

    ?=? MacUser Mitglied

    Beiträge:
    941
    Zustimmungen:
    14
    Registriert seit:
    09.02.2004
    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

    Jerry MacUser Mitglied

    Beiträge:
    287
    Zustimmungen:
    1
    Registriert seit:
    22.11.2003
    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
     
Die Seite wird geladen...
Ähnliche Themen - macht Grafikarte Würfel Forum Datum
SVN macht wieder Ärger Mac OS X Entwickler, Programmierer 26.03.2014
Xcode 4: Was macht Analyze... Mac OS X Entwickler, Programmierer 05.07.2011
Java: Runtime.exec macht Probleme Mac OS X Entwickler, Programmierer 10.10.2006
Installation von Eclipse macht Probleme..startup.jar wird nicht gefunden Mac OS X Entwickler, Programmierer 03.05.2006
TableView macht kein reloadData Mac OS X Entwickler, Programmierer 17.08.2004

Diese Seite empfehlen

Benutzerdefinierte Suche