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.
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).
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?
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.
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.
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.....
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.
PS: Ich hoffe du hast das oben net ernst genommen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
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.
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.
* Senkerechte berechnen (Lot) -> so verschieben, dass Lot durch Punkt1 bzw. Punkt2 geht -> ????
_________________ Blog: kevin-fleischer.de und fbaingermany.com
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?).
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
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
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:
function GleicheSeite(x1,y1,x2,y2,rx,ry,bx,by:single):boolean;
var
d,nx,ny:single;
begin
nx:=x1-x2;
ny:=y2-y1;
d:=-(x1*nx+y1*ny);
result:=(nx*rx+ny*ry+d)*(nx*bx+ny*by+d)>0;
end;
Zuletzt geändert von LarsMiddendorf am Di Aug 31, 2004 20:41, insgesamt 2-mal geändert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
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... DAMN!
_________________ Blog: kevin-fleischer.de und fbaingermany.com
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)
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.