x86v3
This commit is contained in:
parent
143b71eeb9
commit
a16f8ffbde
7 changed files with 251 additions and 133 deletions
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue