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

Aktuelle Zeit: Mo Jul 14, 2025 04:58

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kamera mit Anleitung (1)
BeitragVerfasst: Fr Okt 14, 2005 11:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Nachdem ich viel Zeit damit verbracht habe eine funktionierende Kamera
zu bauen und es nun endlich geschafft habe, wollte ich diese Funktionalität
auch anderen zur Verfügung stellen.
Da mir schon viel geholfen wurde, kann ich so einen Teil meiner "Schuld"
zurück zahlen.

Die folgend beschriebene Kamera kann sich um alle drei Achsen drehen und sich
in allen ebenen bewegen. Der Drehpunkt um den sich die Kamera dreht wird mit
dem Aufruf der Prozedur PositionCamera festgelegt. Sollte man diesen Dreh-
punkt benötigen (z.B. zum anzeigen eines Koordinatenkreuzes, ...) so kann man
auf die property PointOfRotation zugreifen (read only).

Die Kamera kann bis zu zehn Positionen speichern und auch wieder herstellen.
(SavePosition, RestorePosition)

Die Kamera kann sich selber zu jeder Zeit unter Beibehaltung der aktuellen
Position senkrecht zur Welt ausrichten.
(Adjust)

Um sicher zu sein, dass auch alle nötigen Definitionen und Funktionen zur
Verfügung stehen habe ich einfach mal einen Großteil meiner Funktionssammlung
beigefügt (OpenGLUtil.pas). Diese Funktionen/Prozeduren werden so oder in leicht
abgeänderter Form wohl bei jedem OpenGL Programmierer existieren.

Sollte es noch irgendwelche Fragen zu diesem Modul geben so stehe ich gerne
zur Verfügung.




Camera.pas

Gebrauch der Funktionen:

1. PositionCamera mit Vektoren für Position, Blickrichtung und Ausrichtung
aufrufen. Die Blickrichtung gibt auch gleichzeitig den Drehpunkt der Szene
an um den dann mit RotateCamera gedreht werden kann.

2. Aufruf der Funktionen RotateCamera und TranslateCamera um die Ausrichtung/Lage der
Kamera zu verändern. z.B.:
Code:
  1.  
  2. // FRightMousePressed, FLeftMousePressed,
  3. // FxDelta, FyDelta, FxStart, FyStart,
  4. // FxRot und Fyrot sind als var im aktuellen Modul definiert.
  5.  
  6. procedure TExample.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  7.                                  Y: Integer);
  8. begin
  9.    //Dragging is happening only if the mouse button is down
  10.    if not (FRightMousePressed or FLeftMousePressed) then exit;
  11.  
  12.    //Calculate how much the mouse has moved
  13.    FxDelta := FxStart-X;
  14.    FyDelta := FyStart-Y;
  15.  
  16.    //Adjust rotation and scale so it is'nt too fast
  17.    FxRot := FxRot - FyDelta/20;
  18.    Fyrot := FyRot - FxDelta/20;
  19.  
  20.    //Next time, we start from here
  21.    FxStart := X;
  22.    FyStart := Y;
  23.  
  24.    if FRightMousePressed then
  25.    begin
  26.      if FxRot <> 0 then FCamera.RotateCamera (FxRot, 0, 0);
  27.      if FyRot <> 0 then FCamera.RotateObject (0, FyRot, 0);
  28.    end;
  29.    if FLeftMousePressed then
  30.    begin
  31.      if FxRot <> 0 then FCamera.TranslateCamera (FxRot, 0, 0);
  32.      if FyRot <> 0 then FCamera.TranslateCamera (0, FyRot, 0);
  33.    end;
  34.    Paint;
  35.  
  36.    FxRot := 0;
  37.    FyRot := 0;
  38. end;
  39.  

Dieses Beispiel is vereinfacht dargestellt und es kann sein, dass man
daran noch etwas herumspielen muss. Ich habe noch das Mausrad eingesetzt
um in den Bildschirm hinein- oder aus ihm herauszuzoomen (TranslateCamera(0,0,?)).

3. Szene zeichnen:

Lichteigenschaften setzen
Materialeigenschaften setzen
halt die üblichen Vorbereitungen treffen

FCamera.Apply

Szene zeichnen

Swapbuffers...

usw.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 14, 2005 13:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
Ein großes Danke von mir. Ich hoffe das mir ein Vergleich mit meinem Projekt zeigt was ich noch falsch mache, bevor mein Haupthaar noch komplett zur Neige geht. :)

Grüße, DNA

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 14, 2005 14:03 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Kannst du das vielleicht ins Wiki eintragen? Weil hier im Forum wird es mit der Zeit untergehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 15, 2005 20:54 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Da sag ich glatt mal DANKE. Das man in so konkreter form etwas an die Community zurückgibt ist leider viel zu selten. Und da du da noch nen schönen Wikiartikel draus gemacht hast ist das noch toller. SUPER...

_________________
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  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]