Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 12:13

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Achsen mitkippen?
BeitragVerfasst: Di Aug 30, 2005 15:45 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 10:30
Beiträge: 28
Moin !

Ich weiss ich nerve im Mom, aber ich bastele gerade wieder an meiner GPS Visualisierung und da hab ich nu wieder ne Frage :roll:

Also, die Sache ist irgendwie kompliziert zu beschreiben. Aber ich versuchs mal. Ich nehme mal dieses Bild zur Hilfe:
Bild

Soderle ... Wenn ich dieses Flugzeug um die Y Achse kippe dann geht das wunderbar. So nun will ich um die Z Achse drehen. Diese Achse ist aber beim kippen um Y nicht mitgekippt worden. Deshalb dreht sich alles eher merkwürdig um den Mittelpunkt.
Ich beschreibe es nochmal mit einem Gitter als Boden. Also ich kippe das Gitte über die Y Achse nach vorne runter. Jetzt sehe ich das Gitter halt schräg im Raum. Wenn ich nun um die Z Achse drehen will, dann sollte sich das Gitter nur um den Mittelpunkt drehen. Da bei mir aber die Z Achse immer noch senkrecht steht, wird das Gitter um diese Achse gedreht und es sieht nicht sonderlich toll aus.

Also ich denke die Kernfrage ist: Wie kippe ich die Achsen beim drehen mit und nicht nur die Objekte?

Hoffe ich habe mich da halbwegs verständlich ausgedrückt ... :roll:

_________________
Greetz Moelski


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 30, 2005 16:02 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Es klingt so aus als würdest du irgenwo zwischen 2 Kippen einen glLoadIdentity aufrufen. So müsste es (glaube ich) gehen:
Code:
  1. glLoadIdentity();
  2. glRotate(angy,0,1,0);
  3. glRotate(angx,1,0,0);

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 30, 2005 19:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Schau mal in unsere Tutorialsektion unter Mathe. Dort gibt es 2 Tutorials zu genau diesem Thema samt Beispielanwendung.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 31, 2005 00:34 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Tutorials behandeln ein wesentlich krasseres Problem...nämlich trotz drehung die Richtung net zu verlieren. Also ich denke sniper_w hat das so richtig gesagt...sollte eigentlich nur ein kleiner Fehler im Code sein...

(Die Tutorials solltest du dir aber Trotzdem angucken... lesenswert. ;) )

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 31, 2005 04:39 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 10:30
Beiträge: 28
Moin !

Zitat:
Es klingt so aus als würdest du irgenwo zwischen 2 Kippen einen glLoadIdentity aufrufen


Ich glaube nicht. HIer mein Code:

Code:
  1. procedure TGLForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  2. var _i:         Integer;
  3.     _j:         Double;
  4. begin
  5.   // In die Projektionsmatrix wechseln
  6.   glMatrixMode(GL_PROJECTION);
  7.   // Identitätsmatrix laden
  8.   glLoadIdentity;
  9.   // Viewport an Clientareal des Fensters anpassen
  10.   glViewPort(0, 0, Panel1.Width, Panel1.ClientHeight);
  11.   // Perspective, FOV und Tiefenreichweite setzen
  12.   gluPerspective(60, ClientWidth/ClientHeight, 1, 128);
  13.  
  14.   // In die Modelansichtsmatrix wechseln
  15.   glMatrixMode(GL_MODELVIEW);
  16.   // Identitätsmatrix laden
  17.   glLoadIdentity;
  18.   // Farb- und Tiefenpuffer löschen
  19.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  20.  
  21.   //1)
  22.   gltranslatef(0,0,-Trackbar1.Position/4);
  23.  
  24.   //2)
  25.   glrotatef(Trackbar2.Position,0,0,-1);
  26.   glrotatef(Trackbar3.Position,0,-1,0);
  27.   glrotatef(Trackbar4.Position,-1,0,0);
  28.  
  29.   //3)
  30.   gltranslatef(-Trackbar5.Position/10,-Trackbar6.Position/10,-Trackbar7.Position/10);
  31.  
  32.   if KreuzAnAus.Checked = True then begin
  33.     //  Koordinatenkreuz!!!
  34.     gllinewidth(1);
  35.     glbegin(gl_lines);
  36.       glcolor3f(1,0,0);
  37.       glvertex3f(0,0,0);
  38.       glvertex3f(2,0,0);
  39.       // Pfeilspitze
  40.       glcolor3f(0.8,0,0);
  41.       glvertex3f(2,0,0);
  42.       glvertex3f(1.8,0.2,0);
  43.       glvertex3f(2,0,0);
  44.       glvertex3f(1.8,-0.2,0);
  45.  
  46.       glcolor3f(0,1,0);
  47.       glvertex3f(0,0,0);
  48.       glvertex3f(0,2,0);
  49.       // Pfeilspitze
  50.       glcolor3f(0,0.8,0);
  51.       glvertex3f(0,2,0);
  52.       glvertex3f(0.2,1.8,0);
  53.       glvertex3f(0,2,0);
  54.       glvertex3f(-0.2,1.8,0);
  55.  
  56.       glcolor3f(0,0,1);
  57.       glvertex3f(0,0,0);
  58.       glvertex3f(0,0,2);
  59.       // Pfeilspitze
  60.       glcolor3f(0,0,0.8);
  61.       glvertex3f(0,0,2);
  62.       glvertex3f(0.2,0,1.8);
  63.       glvertex3f(0,0,2);
  64.       glvertex3f(-0.2,0,1.8);
  65.     glend;
  66.   end;
  67.  
  68.   // Bodenareal zeichnen ...
  69.   glLineWidth(1);
  70.   if GitterAnAus.Checked = True then begin
  71.     // Textureinbindung verfälscht Farben. Deswegen ausblenden !
  72.     glDisable(GL_TEXTURE_2D);
  73.     glbegin(gl_lines);
  74.       glcolor3f(0.75,0.75,0.75);
  75.       _j := -7;
  76.       repeat
  77.         glvertex3f(-7,0,_j);
  78.         glvertex3f(7,0,_j);
  79.         _j := _j + 0.5;
  80.       until _j > 7;
  81.       _j := -7;
  82.       repeat
  83.         glvertex3f(_j,0,-7);
  84.         glvertex3f(_j,0,7);
  85.         _j := _j + 0.5;
  86.       until _j > 7;
  87.     glend;
  88.   end;
  89.  
  90.   // Textur rendern
  91.   if BodenAnAus.Checked = True then begin
  92.     glcolor3f(1,1,1);
  93.     FTex.Bind;
  94.     glBegin(GL_QUADS);
  95.       glTexCoord2f(0, 1);  glVertex3f(- 3, -1.01, -3);
  96.       glTexCoord2f(1, 1);  glVertex3f(  3, -1.01, -3);
  97.       glTexCoord2f(1, 0);  glVertex3f(  3, -1.01, 3);
  98.       glTexCoord2f(0, 0);  glVertex3f(- 3, -1.01, 3);
  99.     glEnd;
  100.     glDisable(GL_TEXTURE_2D);
  101.   end;
  102.   glDisable(GL_TEXTURE_2D);
  103.  
  104.     //4)
  105.     gltranslatef(Trackbar8.Position/10,Trackbar9.Position/10,Trackbar10.Position/10);
  106.     //5)
  107.     glrotatef(Trackbar11.Position,1,0,0);
  108.     glrotatef(Trackbar12.Position,0,1,0);
  109.     glrotatef(Trackbar13.Position,0,0,1);
  110.     //6)
  111.     glscalef(Trackbar14.Position/10,Trackbar15.Position/10,Trackbar16.Position/10);
  112.  
  113.   // Daten zeichnen
  114.   glLineWidth(2);
  115.   glBegin(GL_LINE_STRIP);
  116.   for _i := 0 to length(x) - 1 do begin
  117.     if length(x) = 0 then break;
  118.  
  119.     glPushMatrix;
  120.  
  121.       //glColor3b(Round(y[_i] * 40)+ 40,Round(y[_i] * 80) + 50,0);
  122.       glcolor3b(127 - (speed[_i]-127) ,speed[_i]-127,speed[_i]-127);
  123.       glVertex3f(x[_i], y[_i], z[_i]);
  124.     glPopMatrix;
  125.   end;
  126.   glEnd();
  127.   glLineWidth(1);
  128.  
  129.   // Schatten zeichnen
  130.   if SchattenAnAus.Checked = True then begin
  131.     glBegin(GL_LINE_STRIP);
  132.     for _i := 0 to length(x) - 1 do begin
  133.       if length(x) = 0 then break;
  134.  
  135.       glPushMatrix;
  136.  
  137.         glColor3b(70,70,70);
  138.         glVertex3f(x[_i], 0, z[_i]);
  139.  
  140.       glPopMatrix;
  141.     end;
  142.     glEnd();
  143.  
  144.     // Schattenstriche nach unten zeichnen
  145.     glBegin(GL_LINES);
  146.     for _i := 0 to length(x) - 1 do begin
  147.       if length(x) = 0 then break;
  148.  
  149.       glPushMatrix;
  150.         if (_i mod trunc(SchattenStriche.Value)) = 0 then begin
  151.           glColor3b(20,20,35);
  152.           glVertex3f(x[_i],0, z[_i]);
  153.           glVertex3f(x[_i], y[_i], z[_i]);
  154.         end;
  155.       glPopMatrix;
  156.     end;
  157.     glEnd();
  158.   end;
  159.  
  160.   //glcolor3f(1,1,1);
  161.   ShowText;
  162.  
  163.   // Hinteren Puffer nach vorne bringen
  164.   SwapBuffers(DC);
  165.  
  166.   // Windows denken lassen, das wir noch nicht fertig wären
  167.   Done := False;
  168.  
  169.   // Nummer des gezeichneten Frames erhöhen
  170.   inc(Frames);
  171.   // FPS aktualisieren
  172.   if GetTickCount - StartTick >= 500 then begin
  173.     FPS       := Frames/(GetTickCount-StartTick)*1000;
  174.     Frames    := 0;
  175.     StartTick := GetTickCount
  176.   end;
  177. end;

_________________
Greetz Moelski


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 21, 2005 11:56 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 10:30
Beiträge: 28
Moin !

Zitat:
Dort gibt es 2 Tutorials zu genau diesem Thema samt Beispielanwendung

Die Beispielanwendung kann ich nicht finden. Wo genau sollen die liegen?

Zitat:
Die Tutorials behandeln ein wesentlich krasseres Problem...nämlich trotz drehung die Richtung net zu verlieren

Naja, das ist doch genau das was ich brauche ... Also ich beschreibe nochmal mit zwei Bildern mein Problem:

GPS Log 3.jpg
Zeigt meine Anwendung. Die Kamera wurde gekippt, damit man alles sehen kann.

GPS Log 4.jpg
Hier ist die Kamera gedreht. Aber eben diesen Effekt will ich nicht haben. Der Hintergrund soll so stehen bleiben wie auf Bild GPS Log 3. In GPS Log 3 habe ich mal die Drehrichtung eingezeichnet was ich gerne hätte. Ich möchte also um die Achse drehen die durch den grünen Pfeil gekennzeichnet ist.
Im Prinzip möchte ich den Effekt haben, der entsteht wenn ich das Objekt drehe. Nur das sich eben auch der Hintergrund (oder sagen wir mal besser die ganze 3D Welt) drehen soll.

Hoffe jemand hat da noch nen Tip.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Greetz Moelski


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 21, 2005 14:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Wenn ichs richtig verstanden habe, musst du nur die Reihenfolge der Rotationsbefehle tauschen!
Einfach ausprobieren... Das liegt daran, dass sich die nachfolgenden Rotationsachsen bei einer Rotation NICHT nitdrehen.

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]