AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi OpenGL Kamera Problem - Drehung
Thema durchsuchen
Ansicht
Themen-Optionen

OpenGL Kamera Problem - Drehung

Ein Thema von Neutral General · begonnen am 27. Sep 2005 · letzter Beitrag vom 3. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

OpenGL Kamera Problem - Drehung

  Alt 27. Sep 2005, 16:27
Ich glaube Kamera-Probleme mit OpenGl sind nicht so selten
Also. Ich habe ne kleine, texturierte Ebene gebaut. Man kann sich auch bewegen und so und auch mit der Maus die Kamera drehen. NUR : Das Problem ist das man sich (scheinbar) nicht um seine eigene Axe dreht sondern um einen bestimmten Punkt kreist. Wie kann man sich "richtig" drehen ?

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if x < 50 then begin
  mauspos := 1; // = Integer
 end
 else
 if x > Form1.ClientWidth -50 then begin
  MausPos := 2;
 end
 else MausPos := 0;
end;
Delphi-Quellcode:
procedure Render;
begin
...
if Mauspos = 1 then begin
  Grad := Grad - (0.5 * timefactor); // Timefactor : Double = 20/40;
 end;
 if Mauspos = 2 then begin
  Grad := Grad + (0.5 * timefactor);
 end;
glrotated(Grad,0,1,0);
...
end;
Naja ich gestehe das ich die Techniken aus nem Tutorial habe aber viel anders gehts eh nicht...
und verstanden hab ichs auch
Michael
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#2

Re: OpenGL Kamera Problem - Drehung

  Alt 27. Sep 2005, 16:53
Der Trick besteht darin, dass IMMER um den aktuellen Koordinatenursprung gedreht wird. Du musst also vor dem Drehen dafür sorgen, dass der Koordinatenursprung mit der Kameraposition übereinstimmt (mit glTranslatef), dann drehen, dann die Verschiebung rückgängig machen (wieder glTranslatef).
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: OpenGL Kamera Problem - Drehung

  Alt 27. Sep 2005, 16:54
Ja sowas hab ich mir auch gedacht, das ich dann die Koordinaten ändern muss und danach zurücksetzten und so nur ich wusste nicht wohin ich translaten soll..
Und ich weiß es immernoch nicht
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#4

Re: OpenGL Kamera Problem - Drehung

  Alt 27. Sep 2005, 17:03
Warum drehst du nicht im GL_Projection Modus? Ich empfehle dir übrigens eher da zu fragen: www.delphigl.com
Felix K.
Zitat:
Siehst du diesen Park da unten?
Jeden Tag lernen sich leute kennen und verlassen einander, und du hast dein ganzes Leben Zeit darin zu gehen!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: OpenGL Kamera Problem - Drehung

  Alt 27. Sep 2005, 17:55
ok thx ich werds ma probieren bzw fragen
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#6

Re: OpenGL Kamera Problem - Drehung

  Alt 1. Okt 2005, 11:24
Also in der Regel steht die Kamera ja immer im Uhrsprung ... deshalb muss auch um den Uhrspung gedreht werden, wenn eine brauchbare Kameradrehung hinbekommen will.
Das Ergebniss: man muss immer als erstes alle rotate-befehle ausführen, die irgendwie zu der Kamera gehören und dann zu dem Punkt, wo die Kamera stehen soll translaten (die Kamera bewegt sich ja an sich nicht, sondern die Objekte vor die Kamera) ...
Macht man es andersrum, also erst translaten und dann rotieren, so rotiren alle ab dann gezeichneten Objekte um den Punkt drum zu du dem Translated wurde ... ganz simpel alles an sich
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: OpenGL Kamera Problem - Drehung

  Alt 1. Okt 2005, 17:06
Delphi-Quellcode:
 if Mauspos = 1 then begin
  Grad := Grad - (0.3* timefactor);
 end;
 if Mauspos = 2 then begin
  Grad := Grad + (0.3* timefactor);
 end;

 if GetAsyncKeystate(Ord('W')) <> 0 then begin
   PosX := PosX + sin(degtorad(Grad)) * 0.1 * Timefactor;
   PosZ := PosZ - cos(degtorad(Grad)) * 0.1 * Timefactor;
 end
 else
 if GetAsyncKeystate(Ord('S')) <> 0 then begin
   PosX := PosX - sin(degtorad(Grad)) * 0.1 * Timefactor;
   PosZ := PosZ + cos(degtorad(Grad)) * 0.1 * Timefactor;
 end;

 glTranslated(PosX,0,PosZ);
 glrotated(Grad,0,1,0);
Ich verzweifele... ist das etwa nicht zuerst translated und dann rotated ?? -.-
Bitte zeigt mir wie das geht
Ich verzweifle -.-
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#8

Re: OpenGL Kamera Problem - Drehung

  Alt 1. Okt 2005, 19:51
Ja eben ... nur die Kamera sitzt immer im Uhrsprung, deshalb darfst du nicht translaten, sondern musst erst rotieren
Versuchs also mal so:

Delphi-Quellcode:
if Mauspos = 1 then begin
  Grad := Grad - (0.3* timefactor);
end;
if Mauspos = 2 then begin
  Grad := Grad + (0.3* timefactor);
end;

if GetAsyncKeystate(Ord('W')) <> 0 then begin
   PosX := PosX + sin(degtorad(Grad)) * 0.1 * Timefactor;
   PosZ := PosZ - cos(degtorad(Grad)) * 0.1 * Timefactor;
end
else
if GetAsyncKeystate(Ord('S')) <> 0 then begin
   PosX := PosX - sin(degtorad(Grad)) * 0.1 * Timefactor;
   PosZ := PosZ + cos(degtorad(Grad)) * 0.1 * Timefactor;
end;

glrotated(Grad,0,1,0);
glTranslated(PosX,0,PosZ);
Das sollte denn Klappen
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: OpenGL Kamera Problem - Drehung

  Alt 1. Okt 2005, 20:22
Passt auf.. ich glaube so langsam ihr versteht mich nicht xD

Schaut euch das ma an.. Es soll so wie bei nem normalen Ego-Shooter sein..
Angehängte Dateien
Dateityp: rar waterloo_battle_3d_201.rar (123,9 KB, 20x aufgerufen)
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#10

Re: OpenGL Kamera Problem - Drehung

  Alt 1. Okt 2005, 20:49
Doch doch, das war mir schon vorher klar
Deshalb kannste mir auch ruhig glauben: das sollte so wie ich es sagte Funktionieren an sich mit dme drehen ...
hier mal n Stückchen Source von nem kleinen Demo, das ich selber geschrieben hab

Delphi-Quellcode:
if rdir = 1 then
begin
rot := rot-5*timefactor;
end;

if rdir = 2 then
begin
rot := rot+5*timefactor;
end;

if getasynckeystate(vk_up) <> 0 then
begin
my_x := my_x-0.4*sin(degtorad(rot))*timefactor;
my_y := my_y+0.4*cos(degtorad(rot))*timefactor;
end;

if getasynckeystate(vk_down) <> 0 then
begin
my_x := my_x+0.4*sin(degtorad(rot))*timefactor;
my_y := my_y-0.4*cos(degtorad(rot))*timefactor;
end;

if getasynckeystate(vk_right) <> 0 then
begin
my_x := my_x+0.2*sin(degtorad(rot-90))*timefactor;
my_y := my_y-0.2*cos(degtorad(rot-90))*timefactor;
end;

if getasynckeystate(vk_left) <> 0 then
begin
my_x := my_x+0.2*sin(degtorad(rot+90))*timefactor;
my_y := my_y-0.2*cos(degtorad(rot+90))*timefactor;
end;

...

glrotate(rot,0,1,0);
gltranslate(my_x,-1.1,my_y);
Also genau das gleiche: erstmal rotieren (um den ursprung halt) und dann verschieben .. geht einwandfrei
NUr dmait man mir auch glaubt: der ganze Source und das Programm selber im Anhang ^^ (ist ein Delphi 2005 Personal Source ... lässt sich aber auch mit Delphi 5 kompilieren ... ich denke damit auch mit allen Versionen dazwischen)
Angehängte Dateien
Dateityp: zip beispiel_912.zip (540,7 KB, 28x aufgerufen)
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz