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

Aktuelle Zeit: Fr Jul 18, 2025 08:10

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Mär 28, 2009 09:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Hallo,

kann mir jemand sagen, wie ich die Entfernung des aktuellen Rotationspunkts zur Near Clipping Plane herausfinden kann?

Danke,

Andree


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 28, 2009 10:06 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
was genau ist der aktuelle rotationspunkt? und warum ausgerechnet zur near clipping plane? wäre der betrachter nicht auch gut? betrachter bekommst du, wenn du von der modelviewmatrix die ersten drei einträge der letzte spalte betrachtest, das für einen vektor hältst und einfach dessen länge betrachtest. bei der ncp ists dann schon ekeliger, da musst du die NCP bestimmen - wird z.B. im Frustum tutorial gemacht - sie in hesse normalform bringen und dann setzt du wieder den punkt den du aus der letzten spalte extrahiert hast in die normalform und dann sollte da der abstand herausfallen... sofern ich mir das jetzt grad alles richtig vorstelle und ich deinen rotationspunkt richtig interpretiere.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 28, 2009 11:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 04, 2006 15:42
Beiträge: 78
Wohnort: Bonn
Programmiersprache: Python, C++, Delphi
Hesse-Form schön und gut, aber ist der Normalenvektor der Near- und Far-clipping-plane
nicht die Z-Achse? Mit anderen Worten: Der Abstand eines jeden Punktes zur Near-clip-plane
ist sein Z-Wert (minus der Entfernung der Plane zum Nullpunkt).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 28, 2009 11:57 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Ich als gebürtiger Franke kann freilich mit einer "Hesse"-Form nur wenig anfangen :)
Den Rotationspunkt würde ich als den Punkt interpretieren, um den (mit glTranslates...) die Kamera rotiert, wenn man danach glRotate aufruft. (Oder davor *g*)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: schön und gut ...
BeitragVerfasst: Sa Mär 28, 2009 15:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Hallo,

vielen Dank erst mal für Euere Antworten.

Folgendes Problem stellt sich mir:

Ich möchte meine Szene verschieben und zwar auf der Z-Achse, also in den Bildschirm hineien oder aus ihm heraus.
In meinem aktuellen Rotationspunkt (dem Punkt, um den sich die Szene bei einem GLROTATE dreht) befindet sich ein
Fadenkreuz. Kommt dieses Fadenkreuz näher an den Betrachter heran, soll sich die Bewegung verlangsamen, entfernt es sich,
soll alles wieder schneller werden. Das klappt auch, aber ich berechne den Abstand zum Betrachter nur dann korrekt,
wenn sich die Kamera- bzw. Betrachterprosition genau im Nullpunkt befindet. Da sich bei einem verschieben der Szene nicht
der Rotationspunkt ändert sondern der Punkt des Betrachters, habe ich leider keine feste Bezugsgröße. Deswegen wollte
ich die Entfernung des Fadenkreuzes zur Near Clipping Plane berechnen.

Oder weiß jemand einen Rat, wie es anders gehen könnte?

Danke,

Andree


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 28, 2009 16:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Transformiere deinen...äh..."Rotationspunkt", also den Koordinatenursprung (0,0,0,1) mit der Matrix der Kamera, also das was z.B. gluLookAt produziert hat. (Nicht die Projektionsmatrix...)
Dann hast du den "Rotationspunkt" im Koordinatensystem der Kamera. Egal wie deine Kamera definiert war, die Kamera befindet sich nun bei 0,0,0 und du blickst in Richtung der negativen Z-Achse. Die Y-Achse ist oben. Nun projizierst du deinen transformierten "Rotationspunkt", ich nenne ihn mal R, auf die Bildebene. Da du in Z-Richtung blickst geht das leicht über den Strahlensatz.
R' = R * (near / R.z)
(Möglicherweise sind hier die Vorzeichen falsch)

Da die Kameramatrix nur eine Roation+Translation ist und diese Operationen Abstände nicht verändern, ist der Abstand von R und R' die gesuchte Entfernung deines "Rotationspunkts" von der NearPlane.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: so sollte es gehen?
BeitragVerfasst: So Mär 29, 2009 08:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Hallo,

ich habe mir also die folgende Funktion geschrieben:

Code:
  1. .
  2. .
  3. .
  4.  
  5.   TGLVector = packed record
  6.     X,Y,Z: GLdouble;
  7.   end;
  8.   TArrMatrix = array [0..15] of GLdouble;
  9.   FPointOfRotation: TGLvector;
  10. .
  11. .
  12. .
  13.  
  14. function TCamera.DistanceFromRotationPoint (dNear: double): double;
  15. // gibt die Entfernung des Betrachters vom Drehpunkt (Fadenkreuz) zurück
  16. // dNear is die Near Clipping Plane
  17. var
  18.   rVec, rVec_: TGLVector;
  19.   tmpMatrix: TArrMatrix;
  20. begin
  21.   glGetDoublev(GL_MODELVIEW_MATRIX, @tmpMatrix);  // Multiply sind überladene Funktionen
  22.   rVec := Multiply (tmpMatrix, FPointOfRotation);         // FPointOfRotation ist eine property der Kameraklasse
  23.   rVec_ := Multiply (rVec, dNear / rVec.Z);                 // das sollte meiner Meinung nach R' ergeben
  24.   result := Magnitude (SubtractVector (rVec, rVec_));  // gibt die länge des ergebnisvektors zurück
  25. end;
  26.  


Ist das so korrekt?

(Ist eigentlich eine rhetorische Frage, weil es so nämlich nicht geht)

Danke,

Andree


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 29, 2009 09:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Du verwendest die ModelViewMatrix, nicht nur die Viewmatrix ;)

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 3 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.008s | 17 Queries | GZIP : On ]