Wie macht ne Grafikarte Würfel??

Z

Zwergenkönig

Aktives Mitglied
Thread Starter
Dabei seit
09.05.2004
Beiträge
1.001
Reaktionspunkte
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...
 
Zuletzt bearbeitet:
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
 
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
 
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
 
@ Jerry, Der sinn des Ganze lioegt ja darin, dass ganze selbst zumachen, um das mal zu verstehen..
 
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
 
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ß,

?=?
 
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
 
Zurück
Oben Unten