29#ifndef GU_BARYCENTRIC_COORDINATES_H
30#define GU_BARYCENTRIC_COORDINATES_H
32#include "common/PxPhysXCommonConfig.h"
33#include "foundation/PxVecMath.h"
40 void barycentricCoordinates(
const aos::Vec3VArg p,
41 const aos::Vec3VArg a,
42 const aos::Vec3VArg b,
46 void barycentricCoordinates(
const aos::Vec3VArg p,
47 const aos::Vec3VArg a,
48 const aos::Vec3VArg b,
49 const aos::Vec3VArg c,
53 void barycentricCoordinates(
const aos::Vec3VArg v0,
54 const aos::Vec3VArg v1,
55 const aos::Vec3VArg v2,
59 PX_INLINE aos::BoolV isValidTriangleBarycentricCoord(
const aos::FloatVArg v,
const aos::FloatVArg w)
62 const FloatV
zero = FNeg(FEps());
63 const FloatV one = FAdd(FOne(), FEps());
65 const BoolV con0 = BAnd(FIsGrtrOrEq(v, zero), FIsGrtrOrEq(one, v));
66 const BoolV con1 = BAnd(FIsGrtrOrEq(w, zero), FIsGrtrOrEq(one, w));
67 const BoolV con2 = FIsGrtr(one, FAdd(v, w));
68 return BAnd(con0, BAnd(con1, con2));
71 PX_INLINE aos::BoolV isValidTriangleBarycentricCoord2(
const aos::Vec4VArg vwvw)
74 const Vec4V eps = V4Splat(FEps());
75 const Vec4V
zero =V4Neg(eps);
76 const Vec4V one = V4Add(V4One(), eps);
78 const Vec4V v0v1v0v1 = V4PermXZXZ(vwvw);
79 const Vec4V w0w1w0w1 = V4PermYWYW(vwvw);
81 const BoolV con0 = BAnd(V4IsGrtrOrEq(v0v1v0v1, zero), V4IsGrtrOrEq(one, v0v1v0v1));
82 const BoolV con1 = BAnd(V4IsGrtrOrEq(w0w1w0w1, zero), V4IsGrtrOrEq(one, w0w1w0w1));
83 const BoolV con2 = V4IsGrtr(one, V4Add(v0v1v0v1, w0w1w0w1));
84 return BAnd(con0, BAnd(con1, con2));
#define PX_INLINE
Definition PxPreprocessor.h:320
GLM_FUNC_DECL GLM_CONSTEXPR genType zero()
Definition constants.inl:6
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39