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

Aktuelle Zeit: Mi Jul 16, 2025 21:38

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: freie Rotation einer 3ds-Datei
BeitragVerfasst: Mo Jan 31, 2005 15:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hi leute,

Das laden der 3ds-Datei funzt ganz gut (dank gl3ds.pas :D )!, jedoch hab
ich folgendes Problem:

Wie kann ich die scene frei drehen mit Hilfe der Maus.
Hab folgende Variablen benutzt:

Opos, Npos :Tpoint; // zum speichern der alten und neuen Mausposition



Jetzt will ich daraus die entsprechenden Winkel in Grad berechnen: XRotate, bzw YRotate.

und dann die Scene rotieren:

...
glRotatef(XRotate,1,0,0);
glRotatef(YRotate,0,1,0);
...



Ich weiß, dass es was mit Sin() und Cos() zu tun hat. Hab schon viel rumprobiert und versucht es alleine zu lösen.
Leider ohne sichtbaren Erfolg. :cry:
Heraus kamen die unmöglichsten Rotationen, die man sich nur vorstellen kann.

Wäre euch sehr dankbar, wenn ihr mir die Formeln explizit für meinen Fall posten könnt.


Danke schon mal im Vorraus, :wink:
pheasant

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 31, 2005 15:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich habe auch ein paar Programme in denen ich den Inhalt mit der Maus drehe. Allerdings ist das wesentlich einfacher als du vielleicht denkst.

Ich habe es bei mir so gelöst, dass ich im FormMouseDown mir die Position gemerkt habe. Im FormMouseMove habe ich die Differenz zwischen der alten und der neuen Position einfach zu meinem globalen (bestandteil des Forms) XRotate und YRotate hinzugerechnet. Jeweils den X Anteil auf X und Y auf Y. Dabei aber aufgepasst. Ich habe dort die Werte durch einen Recht hohen Wert gerechnet, da es sich sonst viel zu schnell gedreht hätte. Anschließend habe ich im MouseMove die alten Position auf die Aktuelle gesetzt.

So hast du den Vorteil, dass du die Drehgeschwindigkeit durch anpassen des Divisionsfaktores anpassen kannst. Je nachdem was du vor hast ist das nicht unbedingt nachteilig.

Das war es eigentlich schon. Nur ganz leichte Addition. ;-)

Würde also in etwa so aussehen. Bei der 100 musst du mal rumspielen und testen wie du es haben willst. Kann dir das leider nicht so ganz sagen.
Code:
  1.   private
  2.     FMouseMove : Boolean;
  3.     FMousePos: TPoint;
  4.  
  5. ...
  6.  
  7. implementation
  8.  
  9. procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  10.   Y: Integer);
  11. begin
  12.   if FMouseMove then begin
  13.     FRotateX := FRotateX + (FMousePos.X - X) / 100;
  14.     FRotateY := FRotateY + (FMousePos.Y - Y) / 100;
  15.  
  16.     FMousePos.X := X;
  17.     FMousePos.Y := Y;
  18.   end;
  19. end;
  20.  
  21. procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  22.   Shift: TShiftState; X, Y: Integer);
  23. begin
  24.   FMouseMove := True;
  25.   FMousePos.X := X;
  26.   FMousePos.Y := Y;
  27. end;
  28.  
  29. procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  30.   Shift: TShiftState; X, Y: Integer);
  31. begin
  32.   FMouseMove := False;
  33. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: @Lossy eX
BeitragVerfasst: Di Feb 01, 2005 10:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Endlich funzt es!! :D
Und dabei war es ja so einfach. :wink:

Vielen dank für deine Hilfe !!!


pheasant

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 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.007s | 14 Queries | GZIP : On ]