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

Aktuelle Zeit: Fr Jul 18, 2025 17:02

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Koords. eines "Klicks" auf Frustum
BeitragVerfasst: Mi Sep 13, 2006 18:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 12, 2006 22:56
Beiträge: 9
Wohnort: Berlin
Tach zusammen,

also: Ich klicke mit der Maus auf meine OpenGL-Szene und habe X- und Y-Koordinaten des "Mauseinschlags".
Wie bekomme ich raus, welche X-,Y- und Z-Koordinaten von der Front-Ebene des Frustums dadurch "angeklickt" wurden?

MfG Markhörnchen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 14, 2006 01:42 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
gluUnProject

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 14, 2006 07:57 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Da du einen "CAD" Editor bauen willst, könnte aber auch das Thema "Selektion" für dich von interesse sein.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 14, 2006 14:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
i0n0s hat geschrieben:


Objektkoordinaten? Wie soll das gehen? Ich kann doch nur einen Vektor in der 3D-Welt ausrechnen, wo man hingeklickt hat, Aber von 2D direkt zu 3D als Punkt das geht doch nicht.
Oder liegt der gelieferte Punkt einfach auf der Projektionsebene? Dazu steht leider nix weiter im Artikel.

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 14, 2006 16:28 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Es wird die Teife aus dem Tiefenpuffer ausgelesen und somit hast du einen 3D-Punkt.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 14, 2006 22:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 12, 2006 22:56
Beiträge: 9
Wohnort: Berlin
Hab die Funktion glUnProject mal ausprobiert und es funzt net. Soll heißen, die Funktion läuft prächtig, aber nicht für meine Zwecke. Aber es ist nützliche Funktion, werd ich auf jeden Fall im Editor gebrauchen können thx ^^.

Ich bin zurzeit am Auswahlmodus für die 3D-Ansicht meines Editors dran und da is son Selektionsrechteck für Mehrfachauswahl nicht fehl am Platz. glUnProject liefert mir leider nur die Punkte meines Drahtgitters :-(.

Öahm, den Punkt, den ich suche liegt auf der Projektionsebene (aka "Frontebene des Frustums" ähem...war vllcht etwas ungeschickt formuliert ^^).

Hab's schon mit der Frustum-Klasse von Sasha Willems probiert. Hab sie daraufhin erweitert, dass auch die 8 Eckpunkte des Frustums berechnet werden. Hab die jeweils 3 an einem Eckpunkt liegenden Frustumebenen in ein lineares Gleichungssystem gehauen und schon hat man den gewünschten Eckpunkt (seeehr lange Rechnung). Wenn man von der y-Achse herab auf die X-Z-Ebene schaut und was auswählt klappts, aber aus andern Perspektiven nicht....
Ich überschlag die Gleichung nomma vllcht isn Fehler drin...

Wenn ihr ne einfachere und vorallem kürzere Lösung habt, wäre ich euch sehr verbunden ^^.

MfG Markoernchen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 15, 2006 15:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 12, 2006 22:56
Beiträge: 9
Wohnort: Berlin
Jo, hab das Fehlerchen in der Gleichung ausgemerzt, funzt jetzt super mit dem Auswahlrechteck ^^.
Die folgende Funktion dient der Berechnung eines gemeinsamen Punktes von 3 Ebenen. Wenn die 3 Ebenen einen gemeinsamen Punkt haben wird True zurückgegeben, andernfalls False. Der gemeinsame Punkt wird als Variablen-Parameter übergeben.
Code:
  1.  
  2. type
  3.     TPlane3D = record
  4.         a,b,c,d: Single;
  5.     end;
  6.     TVector3D = record
  7.         x,y,z: Single;
  8.     end;
  9.  
  10. ...
  11.  
  12. function CommonPoint(P1, P2, P3: TPlane3D; var Pt: TVector3D): Boolean;
  13.     var x: Single;
  14. begin
  15.     Result:=False;
  16.  
  17.     //-=> Berechnung der Z-Koordinate
  18.     x:=p1.a*(p2.b*p3.c-p2.c*p3.b)+
  19.        p1.b*(p2.c*p3.a-p2.a*p3.c)+
  20.        p1.c*(p2.a*p3.b-p2.b*p3.a);
  21.     if(x=0)then Exit;
  22.  
  23.     Pt.Z:=-(p1.a*(p2.b*p3.d-p2.d*p3.b)+
  24.             p1.b*(p2.d*p3.a-p2.a*p3.d)+
  25.             p1.d*(p2.a*p3.b - p2.b*p3.a)
  26.           )/x;
  27.          
  28.     //-=> Berechnung der Y-Koordinate
  29.     x:=p1.b*p2.a-p1.a*p2.b;
  30.     if(x=0)then Exit;
  31.  
  32.     Pt.Y:=((-p1.c*p2.a + p1.a*p2.c)*Pt.Z + p1.a*p2.d - p1.d*p2.a)/x;
  33.  
  34.     //-=> Berechnung der X-Koordinate
  35.     if(p1.a=0)then Exit;
  36.     Pt.X:=(- p1.b*Pt.Y - p1.c*Pt.Z - p1.d)/p1.a;
  37.  
  38.     Result:=True;
  39. end;
  40.  


In Verbindung mit der Frustum-Klasse im DelphiGL-Wiki kann man dann die 8 Eckpunkte des Frustums berechnen.

Es lebe die Mathematik ^^ !!! Wär trotzdem schön, wenns ne kürzere Variante geben würde ^^.

MfG Markhoernchen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 16, 2006 10:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Flash hat geschrieben:
Es wird die Teife aus dem Tiefenpuffer ausgelesen und somit hast du einen 3D-Punkt.


ahso, sollte man evtl mit in den Wikie Artikel aufnehmen :).

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 20, 2006 10:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Mal nich ne Frage: der Source ausm Wikiartikel stimmt auch wirklich?
Wollte das auch grad benutzen, aber so richtig hauen die Ergebnisse bei mir nicht hin. Habe eigentlich nur C&P gemacht.
Anstatt des Nullpunkte z.B. bringt er mir als Ergebnis 106,106,106(hab gerundet).

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 20, 2006 14:34 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Sollte schon passen, du musst halt aufpassen zu welchem Zeitpunkt du dir die Matrizen holst. ZB Für die Modelview-Matrix könnte das in einer Anwendung so aussehen:

Code:
  1.  
  2. glMatrixMode( GL__MODELVIEW );
  3. glLoadIdentity();
  4. gluLookAt( .... );
  5. glPushMatrix();   // Hier ist nur die Kamera gesetzt
  6.  
  7. Objekte zeichnen wodurch du häufig wohl auch die Matrix veränderst
  8.  
  9. glPopMatrix();   // Wieder die Kamera-Matrix holen
  10.  
  11. WinPosTo3DPos( ... );
  12.  


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


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.028s | 15 Queries | GZIP : On ]