Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FUNCTION ray_triangle(RayPos REF AS Vec3, RayDir REF AS Vec3, Tri_Vert REF AS Vec3[])
- e1 AS Vec3 : e1 = v3Sub(Tri_Vert[1], Tri_Vert[0])
- e2 AS Vec3 : e2 = v3Sub(Tri_Vert[2], Tri_Vert[0])
- pv AS Vec3 : pv = v3Crs(RayDir, e2)
- tv AS Vec3
- d AS FLOAT : d = v3Dot(e1, pv)
- IF d > 0.0
- tv = v3Sub(RayPos, Tri_Vert[0])
- ELSE
- tv = v3Sub(Tri_Vert[0], RayPos)
- d = -d
- ENDIF
- u AS FLOAT : u = v3Dot(tv, pv)
- IF u < 0 OR u > d THEN EXITFUNCTION 0
- v AS FLOAT : v = v3Dot(RayDir, v3Crs(tv, e1))
- IF v < 0 OR u + v > d THEN EXITFUNCTION 0
- ENDFUNCTION 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement