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

Aktuelle Zeit: Do Jul 17, 2025 23:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: So Aug 29, 2004 17:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,
ich suche eine Möglichkeit die Screen-Koordinaten eine Punktes nachdem er gerendert worden ist herauszubekommen, ohne allerdings zu Rendern. Es geht darum, dass eine Linie nur gezeichnet wird, wenn zwei Punkte auf der gleichen Seite einer Strecke durch die Punkte der zu zeichnenden Linie liegen. Gibts da eine Funktion oder kann man dass irgendwie berechnen.

Bin für jede Hilfe dankbar


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 29, 2004 18:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Du musst den Punkt ja nicht rendern, sondern kannst direkt die Position aus der Modelansichtsmatrix ermitteln. Zuerst die Matrix mit glGetMatrix von der GL holen, und dann hast du in der letzten Spalte deiner Matrix die Position des Punktes (Matrix[3,0] ist X, Matrix [3,1] ist Y und Matrix[3,2] ist Z).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 29, 2004 19:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,
hab ein kleines Verständnisproblem, soviel ich weiß wird in der Matrix doch nur gespeichert um welche Werte die einzelnen Vertices gestreckt, verschoben und gedreht werden sollen. Wens falsch is korrigier mich. Zu glGetMatrix hab ich nichts gefunden. Könntest du mir vielleicht ein Stückchen Code zeigen um die Werte auszulesen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 29, 2004 19:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie gesagt bekommst du wie oben gezeigt die Position deines Punktes (sofern du das nicht weisst) über die Modelansichtsmatrix. Danach kannst du mit gluProject diesen 3D-Punkt auf den Bildschirm projezieren und schon hast du deine Bildschirmkoordinaten.

Und glGetMatrix war leider falsch, ich meinte eigentlich glGet mit dem Argument GL_MODELVIEW_MATRIX. Danach die oben genannten Werte aus der Matrix an gluProject, und schon hast du die Bildschirmkoordinaten.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 29, 2004 19:59 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
viewtopic.php?t=2811&highlight=gluproject


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 30, 2004 22:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,
hab das jetzt soweit implementiert, ich muss nur noch rausfinden ob 2 Punkte auf der gleichen Seite einer Gerader durch 2 andere Punkte sind. Hab schon über Geradengleichungen nachgedacht, geht nur nicht, weil Gerade auch senkrecht stehen kann. Außerdem sollte es auch möglichst schnell gehen.

Ich bin für jede Idee offen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 00:31 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmm... Wenn du die Koaxialdrehung der Beiden Punkte um die Gerade berechnest und die dann durch den Abstand des 4. Punktes teilst, solltest du die Lösung haben..... 8)

Auf gut deutsch: Du müsstest deine Frage mal so stellen, dass wir wissen was du meinst. ich hab absolut keine Ahnung was
Zitat:
rausfinden ob 2 Punkte auf der gleichen Seite einer Gerader durch 2 andere Punkte sind
bedeuten soll. :roll:

PS: Ich hoffe du hast das oben net ernst genommen. :wink:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 09:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,
Ich habe 4 Punkte von denen ich mir jeweils mit gluProject die Bildschirmkoordinaten hole. Jetzt möchte ich eine Linie von dem 3. zum 4. Punkt zeichnen wenn der 1. und 2. Punkt auf der gleichen Seite dieser Linie liegen.

Im 1. Bild sind sie auf der gleichen Seite, im 2. Bild nicht. (es ist egal ob sie außerhalb der Linie liegen, deshalb hab ich oben ja auch "Gerade" geschrieben)


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 12:37 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das geht dann aber schon über Geradengleichungen. Du befindest dich ja im 2D Raum (wies scheint). Allerdings kannst du net einfach nen Schnittpunkt berechnen...hmmmm.....

Ich schätze man könnte das über ne senkrechte auf der geraden (3-4) machen. *
Aber ich kann dir hier auch nicht weiter helfen. :oops:

* Senkerechte berechnen (Lot) -> so verschieben, dass Lot durch Punkt1 bzw. Punkt2 geht -> ????

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 14:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,
ja ich bin im 2D Raum (Bildschirm). Ich müsste den Schnittpunkt der Strecke zwischen den Punkten 1 und 2 und der Geraden durch die Punkte 3 und 4 berechnen. Problem ist wenn die Gerade senkrecht steht, dann kann man keine Geradengleichung mehr nehmen (oder?).

Kann vielleicht einer Mathe?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 18:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
hmmm...doch das müsste gehn.
Das Ergebniss (der schnittpunkt) deines Gleichungssystems muss in dem Intervall liegen, das durch P1 und P2 gegeben ist. Und wenn die Gerade senkrecht zur X-Achse steht, dann checkst du die Y-koordinaten.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 18:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Verlege doch dein Koordianten System so das die X-Achse von Punkt 3 nach Punkt 4 geht.
Dann Prüfst du einfach ob die beiden Punkte unterschiedliche Vorzeichen haben und fertig.
Gegebenen Falls kannst du auch noch das gleiche nur anders herrum machen.(X-Achse von 1 nach 2)
Alles verstanden?

MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 18:33 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Gerade zwischen den beiden schwarzen Punkten kann man erstmal in Normalform darstellen. Im Gegensatz zur Form y=mx+b kann man damit alle Gerade darstellen.
Dann setzt man den roten und den blauen Punkt in die Normalform ein. Wenn die Ergebnisse beide positiv oder beide negativ sind, dann liegen sie beide auf der gleichen Seite. Also so wie bei Ebenen auch.

(x1,y1) (x2,y2) schwarze Punkte

nx=x1-x2
ny=y2-y1

Für jeden Punkt (x,y) auf der Geraden soll gelten: x*nx+y*nx+d=0
Da (x1,y1) auf jeden Fall auf der Geraden liegt, kann man einsetzen und so d erhalten:

d=-(x1*nx+y1*ny)

Normalform: x*nx+y*ny+d=0

In diese Normalform setzt man die Punkte dann ein. Wenn das Ergebnis größer 0 ist liegt der Punkt vor der Geraden und bei einem Ergebnis kleiner 0 hinter der Geraden.

So ungefähr müßte das gehen:

Code:
  1. function GleicheSeite(x1,y1,x2,y2,rx,ry,bx,by:single):boolean;
  2. var
  3.  d,nx,ny:single;
  4. begin
  5.  nx:=x1-x2;
  6.  ny:=y2-y1;
  7.  d:=-(x1*nx+y1*ny);
  8.  result:=(nx*rx+ny*ry+d)*(nx*bx+ny*by+d)>0;
  9. end;


Zuletzt geändert von LarsMiddendorf am Di Aug 31, 2004 20:41, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 18:35 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
:idea: :oops: Da hat IFlo verdammt Recht!!!!

Die Lösung war so simpel....damn!

Das kannst du nebenbei ganz einfach mit Matrizen machen.

Du nimmst ne Drehungsmatrix, die, wie IFlo schon sagt, die Gerade P3P4 deckungsgleich zur YAchse rotiert, und schmeist da einfach deine punktkoordinaten rein. Die gedrehten Koordinaten kommen dann am Ende raus, und da musste nur noch das Vorzeichen Checken.

Wie man so eine (und andere) Matrix aufstellt, steht in dem Mathescript. Zu finden unter Links -> General -> CompGeo.pdf (steht noch mehr interessantes Zeug drinnen)

Man IFlo....da hätt ich auch drauf kommen können... :roll: DAMN!

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 31, 2004 20:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 31, 2004 15:22
Beiträge: 15
Hi,
danke für die Antworten, werd mir das morgen mal alles angucken und auspropieren. Meld mich dann.

PS: Lars' Methode scheint auf den ersten Blick zu funktionieren. Für Die Rotationsmatrix brauch ich ja den Winkel zwischen der x-Achse und dem Punkt, wie bekomm ich den. Der Punkt ist doch ein Ortsvektor, geht das dann mit den Skalrprodukt oder wie das heißt. (Hab mich nocht nicht so mit Vektorrechnung und Matrizen beschäftig)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 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.010s | 14 Queries | GZIP : On ]