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

Aktuelle Zeit: Di Jul 15, 2025 21:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kamera Dreh-Probleme
BeitragVerfasst: Di Sep 27, 2005 17:44 
Offline
DGL Member

Registriert: Di Sep 27, 2005 17:39
Beiträge: 9
Ich benutze die Maus um mich in meiner Welt umzuschauen. Nach rechts und nach links im Moment nur. Das Problem ist das man sich bei glrotated (scheinbar) nicht um die eigene Axe dreht sondern um einen Punkt der ein paar Meter vor einem ist.
In einem anderen Forum habe ich den Typ bekommen das ich vorher in den PROJECTION-Mode umschalten soll bevor ich drehe. Aber jetzt drehts sich irgendwie schief -.-

EDIT : Außerdem dreht die Kamera dann dauerhaft in eine Richtung :roll:

Code:
  1. procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  2.   Y: Integer);
  3. begin
  4. if x < 50 then begin
  5.   mauspos := 1; // =  Integer
  6. end
  7. else
  8. if x > Form1.ClientWidth -50 then begin
  9.   MausPos := 2;
  10. end
  11. else MausPos := 0;
  12. end;


Code:
  1. procedure Render;
  2. begin
  3. ...
  4. if Mauspos = 1 then begin
  5.   Grad := Grad - (0.5 * timefactor); // Timefactor : Double = 20/40;
  6. end;
  7. if Mauspos = 2 then begin
  8.   Grad := Grad + (0.5 * timefactor);
  9. end;
  10. glMatrixMode(GL_PROJECTION);
  11. glrotated(Grad,0,1,0);
  12. glMatrixMode(GL_MODELVIEW);
  13. ...
  14. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 17:50 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Hi,
du drehst die Szene im Modelview-Modus. Deine Beschreibung hört sich danach an, dass du die Reihenfolge von glRotatef und glTranslatef verwechselt hast. In deinem Fall müsstest du zuerst rotieren, und dann bewegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 17:54 
Offline
DGL Member

Registriert: Di Sep 27, 2005 17:39
Beiträge: 9
Tu ich (glaube ich) doch...

Code:
  1.  
  2. procedure Render;
  3. begin
  4. ....
  5.  if Mauspos = 1 then begin
  6.   Grad := Grad - (0.3* timefactor);
  7.  end;
  8.  if Mauspos = 2 then begin
  9.   Grad := Grad + (0.3* timefactor);
  10.  end;
  11. // glrotated(Grad,0,1,0);
  12.  
  13.  
  14.  if GetAsyncKeystate(Ord('W')) <> 0 then begin
  15.    PosX := PosX + sin(degtorad(Grad)) * 0.1 * Timefactor;
  16.    PosZ := PosZ - cos(degtorad(Grad)) * 0.1 * Timefactor;
  17.  end
  18.  else
  19.  if GetAsyncKeystate(Ord('S')) <> 0 then begin
  20.    PosX := PosX - sin(degtorad(Grad)) * 0.1 * Timefactor;
  21.    PosZ := PosZ + cos(degtorad(Grad)) * 0.1 * Timefactor;
  22.  end;
  23.  
  24.  glMatrixMode(GL_PROJECTION);
  25.   glrotated(Grad,0,1,0);
  26.  glMatrixMode(GL_MODELVIEW);
  27.  gltranslated(PosX,0,PosZ);
  28.  end;


Abgesehen davon das die Kamera irgendwie schief ist, rotiert die Kamera dauernd. Man kann sie nicht anhalten, nur die Richtung ändern :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 18:05 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Weil das OnMouseMove auch nur ausgeführt wird, wenn die Maus auch bewegt wird ;) Also wird MausPos nie 0 sein.
Und nochmal:
Das Rotieren aus dem Perspective Modus rausnehmen!
Code:
  1. glMatrixMode(GL_PROJECTION);
  2. glLoadIdentity;
  3. glMatrixMode(GL_MODELVIEW);
  4. glLoadIdentity;
  5. glrotatef(Grad,0,1,0);
  6. gltranslatef(PosX,0,PosZ);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 18:10 
Offline
DGL Member

Registriert: Di Sep 27, 2005 17:39
Beiträge: 9
so geht bei mir gar nix^^ ich seh dann nur schwarz :D

2 Zusatzfragen : Was bringt eigentlich glLoadIdentity; ?
Was ist der Unterschied zwischen z.B glrotatef und glrotated ?


EDIT : Wenn ich die glLoadIdentity's bei deinem Vorschlag weglasse sehe ich wieder was aber es dreht sich halt immernoch nicht richtig...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 19:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
glloadidentity setzt deine postion, rotation, scalierung und der gleichen zurück. :wink: (Bild bleibt aber da...)
Und die Buchstaben nach einer GL-Funktion geben meinst den Typ an... mit d kann ich nichts anfangen aber
Code:
  1. glrotatef
steht für einen Float als paramater (von 0..1) und
Code:
  1. glrotateub
für unsigned bytes, also von 0..255! :wink:
Und mein Delphi (3.0) kann eine Hilfe bei F1 aufrufen! :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 19:11 
Offline
DGL Member

Registriert: Di Sep 27, 2005 17:39
Beiträge: 9
Thx aber meine Hauptfrage bleibt dadurch immernoch unbeantwortet :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 27, 2005 19:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
glrotated bedeutet, dass die Werte als Double variable (8Byte-float) übergeben werden, statt wie bei der f variante als single (4Byte-Float). Da double kein für nativer typ für die graka is sollte bevorzugt die single variante benutzt werden (meistens reicht die genauigkeit davon eh aus).
Zitat:
steht für einen Float als paramater (von 0..1) und

nur das keine missverständnisse auftreten: es ist nicht auf 0..1 beschränkt.

als erstes wie schon gesagt den rotate aus der projection matrix in die modelview ziehen.
wenn nicht um die eigene achse gedreht wird, sondern um einen punkt irgendwo, ist vermutlich die reihenfolge von translate und rotate falsch. schau dir am besten mal die tutorials auf dieser seite an.
dass sich die kamera ständig dreht liegt entweder wie schon erwähnt daran, dass die mauspos nie 0 wird oder, du hast vergessen glloadidentity aufzurufen.

wenn in der projectionmatrix loadidentity aufgerufen wird, muss der viewport auch wieder neu gesetzt werden


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 28, 2005 00:47 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was sehen meine traurigen Augen? Ein Neuling der nicht die ersehnten Infos aus dem Wiki verlinkt bekommt? ;)

Also... Was die Befehle machen steht in den Befehlsspezifikationen... Die sind aber leider Englisch.... da hier aber der deutsche OpenGL Himmel ist, und nicht "irgendeine Seite" gibts die hier auch auf deutsch: http://wiki.delphigl.com/index.php/OpenGL-Funktions%FCbersicht

"Was bedeuten die Lustigen Buchstaben am Ende einer Funktion?" Diese und weitere Fragen werden ebenfalls im Wiki erklärt:
http://wiki.delphigl.com/index.php/Funktions_Anhang

Es ist nicht so, dass im Wiki alles steht... leider nein ... Aber es ist schon soooo viel, dass man da ne Menge interessanter Sachen finden kann.
Deshalb schnappt euch Sprühdosen und schreibt es an alle Wände in der Nachbarschaft: "Nutzt das DGL Wiki!" ;)

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


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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 | 15 Queries | GZIP : On ]