Registriert: Do Jun 22, 2006 19:13 Beiträge: 52 Wohnort: Lübeck
Hallo zusammen,
ich möchte eine Fläche (Quad) so verschieben und rotieren das sie genau 3 im Raum befindliche Punkte schneidet.
In meinem Beispiel habe ich 3 Punkte, an deren Ebene ich entlang schneiden (clippen) möchte. Zur Anschaung will ich erst einmal ein Quad anstelle der Clippingplane verwenden. (UpVector im Koordinatensystem = 0, 0, 1);
Also ich sehe da irgendwelche Winkelberechnungen, was machst du da?!
Also um eine Ebene mathematisch darzustellen gibt es zwei Möglichkeiten:
Implizite Darstellung durch 4 Koeffizienten (a,b,c,d): ax + by + cz + d = 0 Wenn du einen Punkt (x,y,z) in die Gleichung einsetzt kannst du testen auf welcher Seite der Ebene ein Punkt liegt oder ob er auf der Ebene ist: <0, >0 bzw. =0 Die Koeffizienten a,b,c sind die Normale der Ebene, d ist der Abstand vom Ursprung (0,0,0), zumindest wenn die Normale normalisiert wurde.
Explizite Darstellung durch einen Stützpunkt P und zwei Vektoren U,V: (x,y,z) = P + s*U + t*V Diese Darstellung eignet sich um Punkte auf der Ebene zu finden indem man einfach Werte für die Skalare s und t einsetzt.
Also wenn du dein Quad zeichnen willst brauchst du 4 Punkte. 3 hast du schon, benötigt wird ein weiterer Punkt auf der gleichen Ebene. Gegeben sind A,B und C, gesucht ist D. U = B-A V = C-A D = A + 1*U + 1*V Das ist also die explizite Form. Für die implizite Form berechnest du zuerst die Normale (a,b,c) und dann den Abstand d indem du einen bekannten Punkt auf der Ebene in die Gleichung einsetzt: U = B-A V = C-A (a,b,c) = crossproduct(U,V) d = -(a*A.x + b*A.y + c*A.z)
Edit: Oder geht es dir um die Transformationsmatrix? In dem Fall brauchst du ebenfalls keine Winkelberechnungen: 1. Wähle einen Mittelpunkt M für dein Quad, z.B. das arithmetische Mittel aus deinen drei Punkten A,B und C. 2. Baue dir ein lokales Koordinatensystem...also drei zu einander orthogonale Vektoren: X = normalize(A - M); Y = normalize(B - M); Z = crossproduct(X,Y); Y = crossproduct(X,Z); // Y orthogonal zu X und Z machen 3. Das ganze jetzt in eine Matrix packen:
Diese Matrix transformiert ein Quad welches in der XY-Ebene liegt dahin wo du es haben willst. Um die Matirx zu setzen brauchst du glLoadMatrixf oder glMultMatrixf. Möglicherweise musst du mit den Vorzeichen von Y und Z spielen, falls da was ungewollt gespiegelt wird.
Mitglieder in diesem Forum: Majestic-12 [Bot] 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.