Nun, folgendes: Ich habe mir das EinsteigerTutorial von Phobeus (war das sein Name?) angeschaut und versucht umzusetzen.... das ging gründlich daneben da ich mit der WinAPI absolut nicht vertraut bin...
Nachdem ich mir das Template dazu gezogen habe, hab ichs einigermaßen kapiert.... und hab mit den nächsten Tutorials weiter gemacht.
Ich hänge derzeit bei der Sache mit dem Sonnensystem und den Dreiecken fest....
Also die Sache mit der Rotation ist mir ein Rätsel.
Eine einfache Rotation eines Objektes kriege ich hin. Soweit reicht mein Verständniss für die Matrizen noch aus.
Aber sobald ich eine zweite machen soll, z.b. das sich ein Dreieck um den Punkt 0,0,0 auf der Y-Achse dreht und dabei sich nochmal um seine eigene Achse, da schaltet sich meion Gehirn ab.... ^^
Ich hoffe ihr habt verstanden was mein Problem ist..... quasi das Verständniss von Matrizen....
Hat dazu vielleicht jemand nen passenden "Rat"?
PS: Ich hoffe ich habe jetzt nicht ne Frage gestellt die schon Zweihunderttausend mal vorgekommen is.... bin halt neu und würde gerne OpenGL lernen, wenn ihr so freundlich wärt mir zu helfen, weil alleine nur mit Tuts is das schwer....
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hatte damals ein Sonnensystem gebaut als ich das Tut geamcht hab und Phob geschickt....mal sehn obs bei mir noch rumliegt....
*kram*
Oh jeh...das sit noch Uraltcode... Das Template worauf das aufbaut darf glaub ich niemand sehen... Ich poste mal den neutralen Code... Lass dich vond er kamerabewegung nicht abschrecken...das sind glaub ich durch Try&Error entschadene Werte. @AlleAnderen: So würde ich meinen Code nichtmehr formatieren
Code:
var
Form1: TForm1;
angel:word=0;
angel2:real=0.0;
procedure render;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);//Farb und Tiefenpuffer löschen
glLoadIdentity;// World Matrix zurücksetzen
//ab hier kommen die Objekte hin
//Kamerabewegung
gltranslatef(0,0,-15*sin(angel2)-18);
glrotatef((sin(angel2)*45)+40,1,0,0);
//Sonne
gltranslatef(0,0,-3);
glrotatef(angel,0,1,0);
glbegin(gl_triangles);
glColor3f(1.0,0.5,0.0);
//Boden
glVertex3f(-1.5,0,0);
glVertex3f(1.5,0,0);
glVertex3f(0,0,-1.5);
glColor3f(1.0,1.0,0.0);
//Links
glVertex3f(-1.5,0,0);
glColor3f(1.0,0.0,0.0);
glVertex3f(0,1.5,-0.7);
glColor3f(1.0,1.0,0.0);
glVertex3f(0,0,-1.5);
//Rechts
glVertex3f(1.5,0,0);
glColor3f(1.0,0.0,0.0);
glVertex3f(0,1.5,-0.7);
glColor3f(1.0,1.0,0.0);
glVertex3f(0,0,-1.5);
//Vorn
glVertex3f(-1.5,0,0);
glVertex3f(1.5,0,0);
glColor3f(1.0,0.0,0.0);
glVertex3f(0,1.5,-0.7);
glend();
//Erde
glrotatef(angel,0,1,0);//Drehung um die Sonne
gltranslatef(5,0,0);
glrotatef(angel,0,1,0);//Drehung um sich selbst
gltranslatef(0,0,0);
glrotatef(33,0,1,1);
glbegin(gl_triangles);
glColor3f(0.0,0.0,0.5);
//Boden
glVertex3f(-1,0,0);
glVertex3f(1,0,0);
glVertex3f(0,0,-1);
//Links
glVertex3f(-1,0,0);
glVertex3f(0,0,-1);
glColor3f(1.0,1.0,1.0);
glVertex3f(0,1,-0.5);
glColor3f(0.0,0.0,1.0);
//Rechts
glVertex3f(0,0,-1);
glVertex3f(1,0,0);
glColor3f(1.0,1.0,1.0);
glVertex3f(0,1,-0.5);
glColor3f(0.0,0.0,1.0);
//Vorn
glVertex3f(-1,0,0);
glVertex3f(1,0,0);
glColor3f(1.0,1.0,1.0);
glVertex3f(0,1,-0.5);
glend();
//Mond
glrotatef(angel,0,1,1);//Drehung um die Erde auf einer geneigten Bahn
gltranslatef(1.5,0.5,0);
glrotatef(angel,0,1,0);//Drehung um sich selbst
glbegin(gl_triangles);
glColor3f(0.5,0.5,0.5);
//Boden
glVertex3f(-0.5,0,0);
glVertex3f(0.5,0,0);
glVertex3f(0,0,-0.5);
glColor3f(1.0,1.0,1.0);
//Links
glVertex3f(-0.5,0,0);
glVertex3f(0,0,-0.5);
glColor3f(0.5,0.5,0.5);
glVertex3f(0,0.5,-0.25);
glColor3f(1.0,1.0,1.0);
//Rechts
glVertex3f(0.5,0,0);
glVertex3f(0,0,-0.5);
glColor3f(0.5,0.5,0.5);
glVertex3f(0,0.5,-0.25);
glColor3f(1.0,1.0,1.0);
//Vorn
glVertex3f(-0.5,0,0);
glVertex3f(0.5,0,0);
glColor3f(0.5,0.5,0.5);
glVertex3f(0,0.5,-0.25);
glend();
SwapBuffers(form1.myDC);//scene ausgeben
end;
procedure TForm1.Timer1Timer(Sender:TObject);
begin
inc(angel);
angel2:=angel2+0.006;
render;
Im Anhang noch die gezippte Exe. Die hatte ich sogar noch...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
Programmier einfach mal nen würfel und drhe den nacheinander um die x,y,z achse. Die winkel steuerst du durch drei trackbars oder so.
Dann guckste dir das ergebniss an und vertauscht mal die rotationsreihenfolge...
So bin ich dahinter gekommen! (ruhig mal ausprobieren, dürfte nicht alzu lange dauern)
Zensiert (Edit):
Im prinzip ist das problem, dass du bei der ersten rotation alle folgenden rotationsachsen nicht mitdrehst! Die bleiben im absultuen koordinatensystem immer gleich.
Beispiel: wenn du etwas verschiest und dannd rehst, verdreht sich die gantze szene. Wenn du erst drehst und dann schiebst, verschiebst du das gedrehte objekt ohne die Scene zu drehen
Also bleiben drehpunkt und drehachsen immer gleich, egal was du machts! und dass verwirrt anfangs etwas...
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Zuletzt geändert von geo am Fr Sep 23, 2005 00:23, insgesamt 2-mal geändert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
öhm...geo...bist du dir da so sicher...
Man dreht gerade die Achsen immer mit. Und wenn man erst dreht und dann in richtung Z verschiebt dann heißt das, dass sich das Objekt nicht auf einen zu bewegt, wie normal, sondern halt wo anders hin. Hab das gerade nochmal getestet und so sollte es stimmen. Die vorhergehende Rotation ändert das gesamte Weltskoordinatensystem. Das hat etwas für sich...so kann man Abhängige Rotationen bilden, wie z.B. mein Mond (siehe oben)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
Hm, ich habe mich damit am anfang mal n par tage rum geschlagen, dann habe ich alle rotationsprobleme in geometry units u.s.w. gelöst und seit dem nie wieder drüber nachgedacht!
Aber ihr habt natürlich recht, ich benutze das Prinzip ja auch gerade beim Schachspiel (erst Anstellwinkel der Kamera kippen, dann Schachbrett drehen)... Die Erklärung ist also richtig, nur halt genau falschrum
Aber wenn mann das mit nem Würfel einfach ausprobiert sieht man das wirklich gut! (sollte ich auch mal wieder machen / echt peinlich sowas)
*schlafen geh und ab*
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Er hilft mir vom Verständniss her auch weiter.... wie ich z.b. ne Rotation fortwährend machen kann.... durch die Variablen für die Drehung (hier mit Angle bezeichnet).
Der artikel über Matritzen in der Wiki hat mir auch weiter geholfen.
Zwar kann ich mein neues Wissen grad nich ausprobieren da Rechner schrott, aber ich versteht es wenigstens schonmal wesentlich besser wie das alles funktioniert ^^
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.