Strahl Dreieck Schnittpunkt
-
Ich für folgendes Problem ein super Tutorial gefunden:
http://www.cs.princeton.edu/courses/archive/fall00/cs426/lectures/raycast/sld018.htm
nun bin ich mir aber nicht sicher, ob da ein Fehler drin ist, ich meine dass er P und P0 verwechselt hat.Wenn ich mich nicht irre, kann mir dann jemand ein besseres Tutorial empfehlen?
Bilder wären nicht schlecht.
-
http://www.graphics.cornell.edu/pubs/1997/MT97.pdf
Edit: Wo genau meinst du, dass da P und P0 verwechselt sind? Ich habs mir jetzt nicht genau durchgedacht, aber imo kann man sich das Normalisieren überhaupt sparen und statt die Ebenengleichung auszurechnen, einfach nur das Skalarprodukt von P - P0 und N anschauen und fertig, womit der Test degradiert zu (für jede Kante):
dot(cross(p - p1, p - p2), p - p0) < 0
...
-
sieh dir mal das bild und die ersten 3 zeilen des codes des tuts an
-
Ah stimmt, da sollte tatsächlich P0 stehen...
-
ok, aber sonst stimmt alles?
-
Ja, der Rest schaut richtig aus. Aber wie gesagt wohl unnötig ineffizient...
-
ok, danke meld mich wenns nicht läuft
-
dot(cross(p - p1, p - p2), p - p0) < 0
was ist denn p2?
-
Sry, mit p1 und p2 meinte ich eigentlich T1 und T2. Und es gehört wohl auch umgekehrt: dot(cross(t2 - p0, t1 - p0), p - p0) < 0
-
ok, soll das heissen, diese Zeile reicht für die ganze Kollisionserkennung? (ohne Ray plane natürlich)
-
Nein, denk mal drüber nach was diese Zeile genau tut, mal es dir vielleicht auf...
-
also für mich sieht das so aus als würden sie zeilen 1 (0,1,2,3) bis 6 des ursprünglichen codes ersetzten, oder?
-
Naja, wenn du die die Zeile so anschaust, was genau tut sie denn geometrisch gesehen?
-
Ok, ich habs:
Es testet für die jewelige seite ob der vektor von p0 bis p über der Linie liegt,
mithilfe der normale des dreiecks p0,t1,t2 bzw p0,t2,t3 ...
-
alterbro schrieb:
Ok, ich habs:
Es testet für die jewelige seite ob der vektor von p0 bis p über der Linie liegt,
mithilfe der normale des dreiecks p0,t1,t2 bzw p0,t2,t3 ...Bingo
-
ok, danke für die Hilfe