OpenGL - Doppelrotation

Für Fragen von Einsteigern und Programmieranfängern...

OpenGL - Doppelrotation

Beitragvon Minits » 18. Feb 2017, 22:57 OpenGL - Doppelrotation

Hallo!

ich programmiere derzeit ein 3D-Sonnensystem. Meine Planeten sollen sich zum einen um die Sonne und zum anderen um ihre eigene Achse drehen. Diese Einzelbewegungen habe ich hinbekommen, doch an der Verknüpfung scheitere ich noch.
Lasse ich die Planeten nämlich zuerst um die eigene Achse rotieren und setze dann den Koordinatenursprung als Rotationszentrum, ist dieses nicht senkrecht zur x-Achse, sondern parallel zur Rotationsachse der Kugel. Kann mir jemand helfen? :)
Minits
 
Beiträge: 24
Registriert: 30. Okt 2016, 21:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 19. Feb 2017, 01:26 Re: OpenGL - Doppelrotation

wp_xyz
 
Beiträge: 1800
Registriert: 8. Apr 2011, 08:01

Beitragvon Minits » 19. Feb 2017, 12:39 Re: OpenGL - Doppelrotation

Danke für die Verlinkung!
Nur funktioniert bei mir der Befehl glRotated nicht. Ich musste deshalb sowas eingeben:

Code: Alles auswählen
  glRotatef(cube_rotationxk,cube_rotationyk,cube_rotationzk,0.0);
  glRotatef(180,0,270,270);
  speed:=double(openglcontrol1.FramedifftimeinMsecs)/20;
  cube_rotationx += 2.15 * Speed;
  cube_rotationy += 0.5 * Speed;
  cube_rotationz += 20.0 * Speed;
  cube_rotationxk += 1.15 * Speed;
  cube_rotationyk += 0.5 * Speed;
  cube_rotationzk += 10.0 * Speed;


Die Bibliothek GL habe ich eingefügt...
Zuletzt geändert von Lori am 20. Feb 2017, 18:16, insgesamt 1-mal geändert.
Grund: Highlighter
Minits
 
Beiträge: 24
Registriert: 30. Okt 2016, 21:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Mathias » 19. Feb 2017, 17:03 Re: OpenGL - Doppelrotation

Code: Alles auswählen
glRotatef(180,0,270,270);

Dies ist schon mal total falsch.

Siehe: https://wiki.delphigl.com/index.php/glRotate

Code: Alles auswählen
glRotatef(winkel, x, y, z);

Wen du zB. 90° um eine Achse drehen willst, sieht dies folgendermassen aus.

Code: Alles auswählen
glRotatef(90, 1.0, 0.0, 0.0)// X
glRotatef(90, 0.0, 1.0, 0.0)// Y
glRotatef(90, 0.0, 0.0, 1.0)// Z

Wen du um 2 Achsen drehen willst, dann rufst du am besten glRotatef zwei mal auf.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2447
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 19. Feb 2017, 17:22 Re: OpenGL - Doppelrotation

Minits hat geschrieben:Nur funktioniert bei mir der Befehl glRotated nicht.

Was heißt das? Fehler beim Compilieren? Absturz? Eigentlich ist glRotated dasselbe wie glRotatef, nur mit Double-Zahlen ("d") statt Float ("f") (https://www.khronos.org/registry/OpenGL ... Rotate.xml), und wenn glRotatef "funktioniert" muss auch glRotated "funktionieren".
wp_xyz
 
Beiträge: 1800
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 19. Feb 2017, 17:32 Re: OpenGL - Doppelrotation

Was heißt das? Fehler beim Compilieren? Absturz? Eigentlich ist glRotated dasselbe wie glRotatef, nur mit Double-Zahlen ("d") statt Float ("f")

Wen ich etwas mit OpenGL mache, dann nehme ich generell immer Float(Single), ich habe noch nie erlebt, das ich grössere Genauigkeit brauche.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2447
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Minits » 6. Mär 2017, 16:23 Re: OpenGL - Doppelrotation

Hallo :)

Ich komme bei der Transformation der Rotationsbahn zu der Ellipse leider nicht weiter und hoffe, dass mir jemand helfen kann :)

Code: Alles auswählen
 
    // Erde
  glPushMatrix;
  glRotatef(EarthRot,0,1,0);
  gltranslatef(9.94043905,0,0);
  glPushMatrix;
  glrotatef(EarthSpin,0,1,0);
  glPushMatrix;
  glrotatef(23.44,1,0,0);
  Kugel(0.171, 15, 15);
  glPopMatrix;
  glPopMatrix;
  glPopMatrix;


Das erste PushMatrix könnt ihr übrigens ignorieren, die anderen beiden sind natürlich dafür da, dass sich die Rotationen nicht gegenseitig stören
Minits
 
Beiträge: 24
Registriert: 30. Okt 2016, 21:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Minits » 6. Mär 2017, 16:24 Re: OpenGL - Doppelrotation

Um meine zu lüften:

Wo in den Code muss das glScale und wie muss ich es verkapseln?
Minits
 
Beiträge: 24
Registriert: 30. Okt 2016, 21:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Mathias » 6. Mär 2017, 17:39 Re: OpenGL - Doppelrotation

Das erste PushMatrix könnt ihr übrigens ignorieren,

Genau dieses ist wichtig, die anderen beiden kannst ignorieren.

Das einfachst wird sein, du klammerst mal alle Rotate und Translate aus.
Dann probierst mal was passiert, anschliessend entfernst du eine Ausklammerung nach dem anderen und guckst was mit deiner Erde passiert.
Dies ist eine gute Methode den Fehler zu finden.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2447
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 6. Mär 2017, 18:39 Re: OpenGL - Doppelrotation

Im Anhang habe ich in der schnelle ein kleine Planetarium geschrieben.

Die Daten der Planeten habe ich nur schnell au dem Kopf genommen, vor allem die Tage stimmen überhaupt nicht.

Aber es geht ja ums Funktionsprinzip von OpenGL.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2447
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Frank Ranis » 7. Mär 2017, 13:09 Re: OpenGL - Doppelrotation

Hallo Mathias,

vielen Dank für dein schnuckeliges Planeten-Demo.

Ich hätte da eine Bitte .

Legst Du demnächst noch die aktuell von dir benutzte dglOpenGL.pas (oder auch sonstigen Quelltext , der benötigt wird) mit dabei.

Es ist immer sehr anstrengend , wenn man eine Demo läd und es feht dieses und jenes und man dann stundenlang nach passenden Files suchen muß.

Es gibt viele tolle Demos für FPC und Lazarus und wenn man dann mal etwas ausprobieren möchte , dann scheitert es sehr oft , weil bestimmte Files oder Pakete fehlen.

Und dann sucht und sucht man und findet eventuell auch was , aber die falsche Version .

Wenn ich die dritte , vierte ..... Fehlermeldung (kann File nicht finden) vom Compiler bekomme , dann schmeiß ich die Sachen in die Ecke und habe keine Lust mehr.

Gerade ein Anfänger wird an so etwas verzweifeln .

Gruß

Frank
www.flz-vortex.de
Frank Ranis
 
Beiträge: 67
Registriert: 24. Jan 2013, 21:22
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 7. Mär 2017, 13:40 Re: OpenGL - Doppelrotation

dglOpenGL ist übrigens für diese Demo überhaupt nicht erforderlich, ersetze sie in der uses-Zeile durch das mit fpc mitgelieferte gl. Und die Zeilen, der der Compiler dann anmeckert, kannst du auskommentieren. Auch das von Mathias standardmäßig immer wieder eingebundene Package ogl_Package kannst du entfernen.
wp_xyz
 
Beiträge: 1800
Registriert: 8. Apr 2011, 08:01

Beitragvon Frank Ranis » 7. Mär 2017, 14:46 Re: OpenGL - Doppelrotation

Hallo wp_xyz,

wp_xyz hat geschrieben:dglOpenGL ist übrigens für diese Demo überhaupt nicht erforderlich, ersetze sie in der uses-Zeile durch das mit fpc mitgelieferte gl. Und die Zeilen, der der Compiler dann anmeckert, kannst du auskommentieren. Auch das von Mathias standardmäßig immer wieder eingebundene Package ogl_Package kannst du entfernen.


Danke für die Info's .

Ich kenne jetzt nicht alle Vorteil der dglOpenGL.pas , es wird wohl einige geben , sonst hätte man das Teil ja nicht geschrieben.
Habe ja auch nichts dabei , wenn Mathias diese benutzt , ich habe die ja auch schon oft eingebunden .

Nur als User solchen Code's ist es für mich von Interesse :
1) wo finde ich die benutzen Quellen , wenn sie nicht dem Projekt dabei liegen.
2) von welchem anderen Code ist die Anwendung abhängig , muß ich eventuell zuvor bestimmte Pakete installieren ? und wenn ja wo finden ich diese.
Ein paar Hinweise oben im Kopf des Prog's wären dann hilfreich.
3) Manch schöner Quell-Code , den man im WWW findet ist einfach nur noch Müll, weil man an bestimmte Sachen nicht mehr rannkommt (z.B. wenn Internetseiten nicht mehr erreichbar sind) , ist doch schade .

Es nützt ja dem User rein gar nichts , wenn der Verfasser alle tollen Sachen auf seinem Rechner installiert hat und bei ihm die Anwendung auch schön läuft .
Und der intessierte User kann dann nichts damit anfangen.
Denkt doch nur mal an die vielen DLL's , die zwar auf dem Verfasser-Rechner vorhanden sind , aber der Anwendung nicht beiliegen , dann geht die Suche los und im schlimmsten Fall ist die Anwendung unbrauchbar .

In 10 Jahren liest vielleicht ein Einsteiger diesen Beitrag und dann gibt es die dglOpenGL.pas eventuell nicht mehr und schon ist der tolle Beitrag für die Katz .
Jetzt ist die Demo von Mathias noch brandaktuell und die benutzte dglOpenGL.pas kann man sich beschaffen , müßte doch aber nicht sein.

Wäre alles in der ZIP vorhanden , dann gäbe es keine Fragen , ein Doppelklick auf *.lpi und ein Klick auf den Startbutton und das Glück ist vollkommen.

Das soll jetzt keine Schimpfe gegen Mathias, sein , sondern eine Anregung für alle , um Frust zu vermeiden.

Gruß

Frank
www.flz-vortex.de
Frank Ranis
 
Beiträge: 67
Registriert: 24. Jan 2013, 21:22
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 7. Mär 2017, 15:20 Re: OpenGL - Doppelrotation

dglOpenGL unterstützt neuere OpenGL-Versionen als die mit fpc mitgelieferte gl. Das ist für High-End-Zocker sicher von Vorteil, nicht aber für Allerwelts-User wie mich, die statt der Ultra-Super-Dooper Graphik-Karte nur die eingebaute Intel-Graphik im System haben, kein Interesse an den neuesten Spielen haben, aber mit dem neuen OpenGL nur Abstürze produzieren.

Wenn ich mal etwas mit OpenGL mache, bleibt bei mir dglOpenGL außen vor.

Dein Wunsch, die dglOpenGL mit im zip zu haben, kann problematisch werden. Ich kenne das Lizenz-Modell von dglOpenGL nicht, aber es könnte sein, dass die Weiterverbreitung über andere als die Original-Webseite verboten ist. Alles hat seine Vor- und Nachteile... Gewöhne dich daran, dass die Antworten hier nicht immer perfekt sind, die wenigsten werden das Problem exakt lösen, aber viele geben dem Fragesteller einen Hinweis auf die Lösung.
wp_xyz
 
Beiträge: 1800
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 7. Mär 2017, 18:27 Re: OpenGL - Doppelrotation

Legst Du demnächst noch die aktuell von dir benutzte dglOpenGL.pas (oder auch sonstigen Quelltext , der benötigt wird) mit dabei.

Du brauchst nur diese einte Unit.

Ich habe bei dem kleine Demo noch den Mond hinzugefügt.
Da sieht man mehr, was Push und Pop macht.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2447
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider] und 3 Gäste

porpoises-institution
accuracy-worried