Raytracing- Prüfen, ob Fläche von Strahl geschnitten wird.
-
Ich taste mich gerade vorsichtig ans Thema Raytracing heran, habe aber leider ein bisschen Mathe Nachholbedarf, vielleicht könnt Ihr mir ja helfen.
Also, ich habe eine Fläche, z.B. ein Dreieck, bestimmt durch ein Paar Vektoren
bool Schnitt(const 3dVec vec1, const 3dVec vec2, const 3dVec vec3, ray &r) { edge1 = vec2- vec1; edge2 = vec3- vec1; // jetzt will ich wissen, wie ich am besten berechne, ob der ray die von den // beiden Kanten aufgespannte Fläche schneidet // Wenn das Skalarprodukt gleich dem gewöhnlichen Produkt der Längen ist, sind // die Vektoren Parallell und schneiden einander sowieso nicht if (edge1[3] * r[3] == skalarprodukt(edge1,r)) return false; // Wie errechne ich aber nun, ob die sich schneiden? }
Da muss es doch irgendeine einfache Formel für geben, oder?
-
Du setzt Strahl und Fläche gleich. Das ist dann simple Mathemathik. f'`8k
Bye, TGGC (Das Eine, welches ist.)
-
Berechne zunächst den Schnittpunkt der Gerade mit der Ebene, in der das Dreieck liegt. Danach mußt Du nur noch prüfen, ob dieser Schnittpunkt auch im Dreieck liegt.
MfG Jester
-
Ja, aber wie berechne ich den Schnittpunkt der Geraden mit der Ebene? Ich habe da ein Paar Sachen im WWW gefunden, steig da aber nicht ganz durch.
-
Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum Mathematik verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Okay, um zu prüfen, ob ein Punkt, welcher durch einen best. Vektor beschreiben wird in einer Ebene liegt muss ich also wie folgt vorgehen:
Ich habe eine Ebenengleichung:
P * N + d = 0
Dabei ist P ein Vektor zu einem best. Punkt in der Ebene, N der normalenvektor und d ein float der den Abstand der Ebene zum Bezugskoordinatensystem angibt.
Will ich jetzt ermitteln, ob ein Punkt in der Ebene liegt muss ich das Skalarprodukt zwichen P und N ermitteln, d hinzuzählen und wenn das Ganze dann Null ergibt, liegt der Punkt in der Ebene.
Nur wie komme ich an d? Also welcher "Abstand zum Bezugskoordiantensystem" ist damit gemeint- ich gehe mal aus, dass der Abstand zum Ursprung gemeint ist, ist d dann also der Betrag des Vektors von 0,0,0 zu demjenigen Punkt in der Ebene, welcher dem Koordinatenursprung am nächsten ist?
-
Es muss -d sein und du musst nur einen beliebigen Vektor zu einem Punkt der Ebene mal den Normalenvektor rechnen.
-
Äh..wieso -d?