OpenGL - Doppelrotation

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Minits
Beiträge: 30
Registriert: So 30. Okt 2016, 21:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

OpenGL - Doppelrotation

Beitrag von Minits »

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? :)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: OpenGL - Doppelrotation

Beitrag von wp_xyz »


Minits
Beiträge: 30
Registriert: So 30. Okt 2016, 21:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: OpenGL - Doppelrotation

Beitrag von Minits »

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 Mo 20. Feb 2017, 18:16, insgesamt 1-mal geändert.
Grund: Highlighter

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGL - Doppelrotation

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: OpenGL - Doppelrotation

Beitrag von wp_xyz »

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".

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGL - Doppelrotation

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Minits
Beiträge: 30
Registriert: So 30. Okt 2016, 21:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: OpenGL - Doppelrotation

Beitrag von Minits »

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: 30
Registriert: So 30. Okt 2016, 21:13
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: OpenGL - Doppelrotation

Beitrag von Minits »

Um meine zu lüften:

Wo in den Code muss das glScale und wie muss ich es verkapseln?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGL - Doppelrotation

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGL - Doppelrotation

Beitrag von Mathias »

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.
Dateianhänge
Planeten.zip
(125.55 KiB) 55-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: OpenGL - Doppelrotation

Beitrag von Frank Ranis »

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

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: OpenGL - Doppelrotation

Beitrag von wp_xyz »

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.

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: OpenGL - Doppelrotation

Beitrag von Frank Ranis »

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

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: OpenGL - Doppelrotation

Beitrag von wp_xyz »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGL - Doppelrotation

Beitrag von Mathias »

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.
Dateianhänge
Planeten.zip
(125.66 KiB) 44-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten