This commit is contained in:
Jorijn van der Graaf 2026-03-31 14:22:18 +02:00
commit a16f8ffbde
7 changed files with 251 additions and 133 deletions

View file

@ -23,13 +23,36 @@ import :MatrixRowMajor;
import std;
namespace Crafter {
export template<typename T>
constexpr T IntersectionTestRayTriangle(Vector<T, 3, 0> vert0, Vector<T, 3, 0> vert1, Vector<T, 3, 0> vert2, Vector<T, 3, 0> rayOrigin, Vector<T, 3, 0> rayDir) {
Vector<T, 3, 0> edge1 = vert1 - vert0;
Vector<T, 3, 0> edge2 = vert2 - vert0;
export
constexpr std::array<float, 15> IntersectionTestRayTriangle(
VectorF32<3, 5> vertA0,
VectorF32<3, 5> vertA1,
VectorF32<3, 5> vertA2,
VectorF32<3, 5> vertB0,
VectorF32<3, 5> vertB1,
VectorF32<3, 5> vertB2,
VectorF32<3, 5> vertC0,
VectorF32<3, 5> vertC1,
VectorF32<3, 5> vertC2,
VectorF32<3, 5> rayOrigin,
VectorF32<3, 5> rayDir
) {
VectorF32<3, Packing> edgeA1 = vertA1 - vertA0;
VectorF32<3, Packing> edgeA2 = vertA2 - vertA0;
VectorF32<3, Packing> crossA = VectorF32<3, Packing> ::Cross(rayDir, edgeA2);
VectorF32<3, Packing> edgeB1 = vertB1 - vertB0;
VectorF32<3, Packing> edgeB2 = vertB2 - vertB0;
VectorF32<3, Packing> crossB = VectorF32<3, Packing> ::Cross(rayDir, edgeB2);
VectorF32<3, Packing> edgeC1 = vertC1 - vertC0;
VectorF32<3, Packing> edgeC2 = vertC2 - vertC0;
VectorF32<3, Packing> crossC = VectorF32<3, Packing> ::Cross(rayDir, edgeC2);
Vector<T, 3, 0> h = Vector<T, 3, 0>::Cross(rayDir, edge2);
T determinant = Vector<T, 3, 0>::Dot(edge1, h);
if (determinant <= std::numeric_limits<T>::epsilon()) {
return std::numeric_limits<T>::max();