Removed ray-AABB slopes code again, we are not using it and it is archived in Subversion repo now.
This commit is contained in:
@@ -22,8 +22,6 @@ subject to the following restrictions:
|
|||||||
#include "btMinMax.h"
|
#include "btMinMax.h"
|
||||||
|
|
||||||
|
|
||||||
#define TEST_RAY_SLOPES 1
|
|
||||||
|
|
||||||
|
|
||||||
SIMD_FORCE_INLINE void AabbExpand (btVector3& aabbMin,
|
SIMD_FORCE_INLINE void AabbExpand (btVector3& aabbMin,
|
||||||
btVector3& aabbMax,
|
btVector3& aabbMax,
|
||||||
@@ -87,631 +85,6 @@ SIMD_FORCE_INLINE int btOutcode(const btVector3& p,const btVector3& halfExtent)
|
|||||||
(p.getZ() > halfExtent.getZ() ? 0x20 : 0x0);
|
(p.getZ() > halfExtent.getZ() ? 0x20 : 0x0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// http://jgt.akpeters.com/papers/EisemannEtAl07/
|
|
||||||
/// See test case in btDbvt::rayTestInternal on dynamic AABB tree, Bullet/src/BulletCollision/BroadphaseCollision/btDbvt.h
|
|
||||||
|
|
||||||
|
|
||||||
enum CLASSIFICATION
|
|
||||||
{ MMM, MMP, MPM, MPP, PMM, PMP, PPM, PPP, POO, MOO, OPO, OMO, OOP, OOM,
|
|
||||||
OMM,OMP,OPM,OPP,MOM,MOP,POM,POP,MMO,MPO,PMO,PPO};
|
|
||||||
|
|
||||||
struct btRaySlope
|
|
||||||
{
|
|
||||||
//common variables
|
|
||||||
float x, y, z; // ray origin
|
|
||||||
float i, j, k; // ray direction
|
|
||||||
float ii, ij, ik; // inverses of direction components
|
|
||||||
|
|
||||||
// ray slope
|
|
||||||
int classification;
|
|
||||||
float ibyj, jbyi, kbyj, jbyk, ibyk, kbyi; //slope
|
|
||||||
float c_xy, c_xz, c_yx, c_yz, c_zx, c_zy;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct btAaboxSlope
|
|
||||||
{
|
|
||||||
float x0, y0, z0, x1, y1, z1;
|
|
||||||
};
|
|
||||||
|
|
||||||
SIMD_FORCE_INLINE void btMakeRaySlope(float x, float y, float z, float i, float j, float k, btRaySlope *r)
|
|
||||||
{
|
|
||||||
//common variables
|
|
||||||
r->x = x;
|
|
||||||
r->y = y;
|
|
||||||
r->z = z;
|
|
||||||
r->i = i;
|
|
||||||
r->j = j;
|
|
||||||
r->k = k;
|
|
||||||
|
|
||||||
r->ii = 1.0f/i;
|
|
||||||
r->ij = 1.0f/j;
|
|
||||||
r->ik = 1.0f/k;
|
|
||||||
|
|
||||||
//ray slope
|
|
||||||
r->ibyj = r->i * r->ij;
|
|
||||||
r->jbyi = r->j * r->ii;
|
|
||||||
r->jbyk = r->j * r->ik;
|
|
||||||
r->kbyj = r->k * r->ij;
|
|
||||||
r->ibyk = r->i * r->ik;
|
|
||||||
r->kbyi = r->k * r->ii;
|
|
||||||
r->c_xy = r->y - r->jbyi * r->x;
|
|
||||||
r->c_xz = r->z - r->kbyi * r->x;
|
|
||||||
r->c_yx = r->x - r->ibyj * r->y;
|
|
||||||
r->c_yz = r->z - r->kbyj * r->y;
|
|
||||||
r->c_zx = r->x - r->ibyk * r->z;
|
|
||||||
r->c_zy = r->y - r->jbyk * r->z;
|
|
||||||
|
|
||||||
//ray slope classification
|
|
||||||
if(i < 0)
|
|
||||||
{
|
|
||||||
if(j < 0)
|
|
||||||
{
|
|
||||||
if(k < 0)
|
|
||||||
{
|
|
||||||
r->classification = MMM;
|
|
||||||
}
|
|
||||||
else if(k > 0){
|
|
||||||
r->classification = MMP;
|
|
||||||
}
|
|
||||||
else//(k >= 0)
|
|
||||||
{
|
|
||||||
r->classification = MMO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else//(j >= 0)
|
|
||||||
{
|
|
||||||
if(k < 0)
|
|
||||||
{
|
|
||||||
r->classification = MPM;
|
|
||||||
if(j==0)
|
|
||||||
r->classification = MOM;
|
|
||||||
}
|
|
||||||
else//(k >= 0)
|
|
||||||
{
|
|
||||||
if((j==0) && (k==0))
|
|
||||||
r->classification = MOO;
|
|
||||||
else if(k==0)
|
|
||||||
r->classification = MPO;
|
|
||||||
else if(j==0)
|
|
||||||
r->classification = MOP;
|
|
||||||
else
|
|
||||||
r->classification = MPP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else//(i >= 0)
|
|
||||||
{
|
|
||||||
if(j < 0)
|
|
||||||
{
|
|
||||||
if(k < 0)
|
|
||||||
{
|
|
||||||
r->classification = PMM;
|
|
||||||
if(i==0)
|
|
||||||
r->classification = OMM;
|
|
||||||
}
|
|
||||||
else//(k >= 0)
|
|
||||||
{
|
|
||||||
if((i==0) && (k==0))
|
|
||||||
r->classification = OMO;
|
|
||||||
else if(k==0)
|
|
||||||
r->classification = PMO;
|
|
||||||
else if(i==0)
|
|
||||||
r->classification = OMP;
|
|
||||||
else
|
|
||||||
r->classification = PMP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else//(j >= 0)
|
|
||||||
{
|
|
||||||
if(k < 0)
|
|
||||||
{
|
|
||||||
if((i==0) && (j==0))
|
|
||||||
r->classification = OOM;
|
|
||||||
else if(i==0)
|
|
||||||
r->classification = OPM;
|
|
||||||
else if(j==0)
|
|
||||||
r->classification = POM;
|
|
||||||
else
|
|
||||||
r->classification = PPM;
|
|
||||||
}
|
|
||||||
else//(k > 0)
|
|
||||||
{
|
|
||||||
if(i==0)
|
|
||||||
{
|
|
||||||
if(j==0)
|
|
||||||
r->classification = OOP;
|
|
||||||
else if(k==0)
|
|
||||||
r->classification = OPO;
|
|
||||||
else
|
|
||||||
r->classification = OPP;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if((j==0) && (k==0))
|
|
||||||
r->classification = POO;
|
|
||||||
else if(j==0)
|
|
||||||
r->classification = POP;
|
|
||||||
else if(k==0)
|
|
||||||
r->classification = PPO;
|
|
||||||
else
|
|
||||||
r->classification = PPP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//SIMD_FORCE_INLINE bool slopeint_div(const btRaySlope* r, const btAaboxSlope* b, float *t)
|
|
||||||
SIMD_FORCE_INLINE bool btRaySlopeAabb(const btRaySlope* r, const btAaboxSlope* b, float *t)
|
|
||||||
{
|
|
||||||
switch (r->classification)
|
|
||||||
{
|
|
||||||
case MMM:
|
|
||||||
{
|
|
||||||
if ((r->x < b->x0) || (r->y < b->y0) || (r->z < b->z0)
|
|
||||||
|| (r->jbyi * b->x0 - b->y1 + r->c_xy > 0)
|
|
||||||
|| (r->ibyj * b->y0 - b->x1 + r->c_yx > 0)
|
|
||||||
|| (r->jbyk * b->z0 - b->y1 + r->c_zy > 0)
|
|
||||||
|| (r->kbyj * b->y0 - b->z1 + r->c_yz > 0)
|
|
||||||
|| (r->kbyi * b->x0 - b->z1 + r->c_xz > 0)
|
|
||||||
|| (r->ibyk * b->z0 - b->x1 + r->c_zx > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
float t1 = (b->y1 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
float t2 = (b->z1 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case MMP:
|
|
||||||
{
|
|
||||||
if ((r->x < b->x0) || (r->y < b->y0) || (r->z > b->z1)
|
|
||||||
|| (r->jbyi * b->x0 - b->y1 + r->c_xy > 0)
|
|
||||||
|| (r->ibyj * b->y0 - b->x1 + r->c_yx > 0)
|
|
||||||
|| (r->jbyk * b->z1 - b->y1 + r->c_zy > 0)
|
|
||||||
|| (r->kbyj * b->y0 - b->z0 + r->c_yz < 0)
|
|
||||||
|| (r->kbyi * b->x0 - b->z0 + r->c_xz < 0)
|
|
||||||
|| (r->ibyk * b->z1 - b->x1 + r->c_zx > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
float t1 = (b->y1 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
float t2 = (b->z0 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case MPM:
|
|
||||||
{
|
|
||||||
if ((r->x < b->x0) || (r->y > b->y1) || (r->z < b->z0)
|
|
||||||
|| (r->jbyi * b->x0 - b->y0 + r->c_xy < 0)
|
|
||||||
|| (r->ibyj * b->y1 - b->x1 + r->c_yx > 0)
|
|
||||||
|| (r->jbyk * b->z0 - b->y0 + r->c_zy < 0)
|
|
||||||
|| (r->kbyj * b->y1 - b->z1 + r->c_yz > 0)
|
|
||||||
|| (r->kbyi * b->x0 - b->z1 + r->c_xz > 0)
|
|
||||||
|| (r->ibyk * b->z0 - b->x1 + r->c_zx > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
float t1 = (b->y0 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
float t2 = (b->z1 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MPP:
|
|
||||||
{
|
|
||||||
if ((r->x < b->x0) || (r->y > b->y1) || (r->z > b->z1)
|
|
||||||
|| (r->jbyi * b->x0 - b->y0 + r->c_xy < 0)
|
|
||||||
|| (r->ibyj * b->y1 - b->x1 + r->c_yx > 0)
|
|
||||||
|| (r->jbyk * b->z1 - b->y0 + r->c_zy < 0)
|
|
||||||
|| (r->kbyj * b->y1 - b->z0 + r->c_yz < 0)
|
|
||||||
|| (r->kbyi * b->x0 - b->z0 + r->c_xz < 0)
|
|
||||||
|| (r->ibyk * b->z1 - b->x1 + r->c_zx > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
float t1 = (b->y0 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
float t2 = (b->z0 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PMM:
|
|
||||||
{
|
|
||||||
if ((r->x > b->x1) || (r->y < b->y0) || (r->z < b->z0)
|
|
||||||
|| (r->jbyi * b->x1 - b->y1 + r->c_xy > 0)
|
|
||||||
|| (r->ibyj * b->y0 - b->x0 + r->c_yx < 0)
|
|
||||||
|| (r->jbyk * b->z0 - b->y1 + r->c_zy > 0)
|
|
||||||
|| (r->kbyj * b->y0 - b->z1 + r->c_yz > 0)
|
|
||||||
|| (r->kbyi * b->x1 - b->z1 + r->c_xz > 0)
|
|
||||||
|| (r->ibyk * b->z0 - b->x0 + r->c_zx < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
float t1 = (b->y1 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
float t2 = (b->z1 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PMP:
|
|
||||||
{
|
|
||||||
if ((r->x > b->x1) || (r->y < b->y0) || (r->z > b->z1)
|
|
||||||
|| (r->jbyi * b->x1 - b->y1 + r->c_xy > 0)
|
|
||||||
|| (r->ibyj * b->y0 - b->x0 + r->c_yx < 0)
|
|
||||||
|| (r->jbyk * b->z1 - b->y1 + r->c_zy > 0)
|
|
||||||
|| (r->kbyj * b->y0 - b->z0 + r->c_yz < 0)
|
|
||||||
|| (r->kbyi * b->x1 - b->z0 + r->c_xz < 0)
|
|
||||||
|| (r->ibyk * b->z1 - b->x0 + r->c_zx < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
float t1 = (b->y1 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
float t2 = (b->z0 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PPM:
|
|
||||||
{
|
|
||||||
if ((r->x > b->x1) || (r->y > b->y1) || (r->z < b->z0)
|
|
||||||
|| (r->jbyi * b->x1 - b->y0 + r->c_xy < 0)
|
|
||||||
|| (r->ibyj * b->y1 - b->x0 + r->c_yx < 0)
|
|
||||||
|| (r->jbyk * b->z0 - b->y0 + r->c_zy < 0)
|
|
||||||
|| (r->kbyj * b->y1 - b->z1 + r->c_yz > 0)
|
|
||||||
|| (r->kbyi * b->x1 - b->z1 + r->c_xz > 0)
|
|
||||||
|| (r->ibyk * b->z0 - b->x0 + r->c_zx < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
float t1 = (b->y0 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
float t2 = (b->z1 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PPP:
|
|
||||||
{
|
|
||||||
if ((r->x > b->x1) || (r->y > b->y1) || (r->z > b->z1)
|
|
||||||
|| (r->jbyi * b->x1 - b->y0 + r->c_xy < 0)
|
|
||||||
|| (r->ibyj * b->y1 - b->x0 + r->c_yx < 0)
|
|
||||||
|| (r->jbyk * b->z1 - b->y0 + r->c_zy < 0)
|
|
||||||
|| (r->kbyj * b->y1 - b->z0 + r->c_yz < 0)
|
|
||||||
|| (r->kbyi * b->x1 - b->z0 + r->c_xz < 0)
|
|
||||||
|| (r->ibyk * b->z1 - b->x0 + r->c_zx < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
float t1 = (b->y0 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
float t2 = (b->z0 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OMM:
|
|
||||||
{
|
|
||||||
if((r->x < b->x0) || (r->x > b->x1)
|
|
||||||
|| (r->y < b->y0) || (r->z < b->z0)
|
|
||||||
|| (r->jbyk * b->z0 - b->y1 + r->c_zy > 0)
|
|
||||||
|| (r->kbyj * b->y0 - b->z1 + r->c_yz > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->y1 - r->y) / r->j;
|
|
||||||
float t2 = (b->z1 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OMP:
|
|
||||||
{
|
|
||||||
if((r->x < b->x0) || (r->x > b->x1)
|
|
||||||
|| (r->y < b->y0) || (r->z > b->z1)
|
|
||||||
|| (r->jbyk * b->z1 - b->y1 + r->c_zy > 0)
|
|
||||||
|| (r->kbyj * b->y0 - b->z0 + r->c_yz < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->y1 - r->y) / r->j;
|
|
||||||
float t2 = (b->z0 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OPM:
|
|
||||||
{
|
|
||||||
if((r->x < b->x0) || (r->x > b->x1)
|
|
||||||
|| (r->y > b->y1) || (r->z < b->z0)
|
|
||||||
|| (r->jbyk * b->z0 - b->y0 + r->c_zy < 0)
|
|
||||||
|| (r->kbyj * b->y1 - b->z1 + r->c_yz > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->y0 - r->y) / r->j;
|
|
||||||
float t2 = (b->z1 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OPP:
|
|
||||||
{
|
|
||||||
if((r->x < b->x0) || (r->x > b->x1)
|
|
||||||
|| (r->y > b->y1) || (r->z > b->z1)
|
|
||||||
|| (r->jbyk * b->z1 - b->y0 + r->c_zy < 0)
|
|
||||||
|| (r->kbyj * b->y1 - b->z0 + r->c_yz < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->y0 - r->y) / r->j;
|
|
||||||
float t2 = (b->z0 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MOM:
|
|
||||||
{
|
|
||||||
if((r->y < b->y0) || (r->y > b->y1)
|
|
||||||
|| (r->x < b->x0) || (r->z < b->z0)
|
|
||||||
|| (r->kbyi * b->x0 - b->z1 + r->c_xz > 0)
|
|
||||||
|| (r->ibyk * b->z0 - b->x1 + r->c_zx > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
float t2 = (b->z1 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MOP:
|
|
||||||
{
|
|
||||||
if((r->y < b->y0) || (r->y > b->y1)
|
|
||||||
|| (r->x < b->x0) || (r->z > b->z1)
|
|
||||||
|| (r->kbyi * b->x0 - b->z0 + r->c_xz < 0)
|
|
||||||
|| (r->ibyk * b->z1 - b->x1 + r->c_zx > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
float t2 = (b->z0 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case POM:
|
|
||||||
{
|
|
||||||
if((r->y < b->y0) || (r->y > b->y1)
|
|
||||||
|| (r->x > b->x1) || (r->z < b->z0)
|
|
||||||
|| (r->kbyi * b->x1 - b->z1 + r->c_xz > 0)
|
|
||||||
|| (r->ibyk * b->z0 - b->x0 + r->c_zx < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
float t2 = (b->z1 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case POP:
|
|
||||||
{
|
|
||||||
if((r->y < b->y0) || (r->y > b->y1)
|
|
||||||
|| (r->x > b->x1) || (r->z > b->z1)
|
|
||||||
|| (r->kbyi * b->x1 - b->z0 + r->c_xz < 0)
|
|
||||||
|| (r->ibyk * b->z1 - b->x0 + r->c_zx < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
float t2 = (b->z0 - r->z) / r->k;
|
|
||||||
if(t2 > *t)
|
|
||||||
*t = t2;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MMO:
|
|
||||||
{
|
|
||||||
if((r->z < b->z0) || (r->z > b->z1)
|
|
||||||
|| (r->x < b->x0) || (r->y < b->y0)
|
|
||||||
|| (r->jbyi * b->x0 - b->y1 + r->c_xy > 0)
|
|
||||||
|| (r->ibyj * b->y0 - b->x1 + r->c_yx > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
float t1 = (b->y1 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MPO:
|
|
||||||
{
|
|
||||||
if((r->z < b->z0) || (r->z > b->z1)
|
|
||||||
|| (r->x < b->x0) || (r->y > b->y1)
|
|
||||||
|| (r->jbyi * b->x0 - b->y0 + r->c_xy < 0)
|
|
||||||
|| (r->ibyj * b->y1 - b->x1 + r->c_yx > 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
float t1 = (b->y0 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PMO:
|
|
||||||
{
|
|
||||||
if((r->z < b->z0) || (r->z > b->z1)
|
|
||||||
|| (r->x > b->x1) || (r->y < b->y0)
|
|
||||||
|| (r->jbyi * b->x1 - b->y1 + r->c_xy > 0)
|
|
||||||
|| (r->ibyj * b->y0 - b->x0 + r->c_yx < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
float t1 = (b->y1 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PPO:
|
|
||||||
{
|
|
||||||
if((r->z < b->z0) || (r->z > b->z1)
|
|
||||||
|| (r->x > b->x1) || (r->y > b->y1)
|
|
||||||
|| (r->jbyi * b->x1 - b->y0 + r->c_xy < 0)
|
|
||||||
|| (r->ibyj * b->y1 - b->x0 + r->c_yx < 0)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
float t1 = (b->y0 - r->y) / r->j;
|
|
||||||
if(t1 > *t)
|
|
||||||
*t = t1;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case MOO:
|
|
||||||
{
|
|
||||||
if((r->x < b->x0)
|
|
||||||
|| (r->y < b->y0) || (r->y > b->y1)
|
|
||||||
|| (r->z < b->z0) || (r->z > b->z1)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x1 - r->x) / r->i;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case POO:
|
|
||||||
{
|
|
||||||
if((r->x > b->x1)
|
|
||||||
|| (r->y < b->y0) || (r->y > b->y1)
|
|
||||||
|| (r->z < b->z0) || (r->z > b->z1)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->x0 - r->x) / r->i;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OMO:
|
|
||||||
{
|
|
||||||
if((r->y < b->y0)
|
|
||||||
|| (r->x < b->x0) || (r->x > b->x1)
|
|
||||||
|| (r->z < b->z0) || (r->z > b->z1)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->y1 - r->y) / r->j;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OPO:
|
|
||||||
{
|
|
||||||
if((r->y > b->y1)
|
|
||||||
|| (r->x < b->x0) || (r->x > b->x1)
|
|
||||||
|| (r->z < b->z0) || (r->z > b->z1)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->y0 - r->y) / r->j;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case OOM:
|
|
||||||
{
|
|
||||||
if((r->z < b->z0)
|
|
||||||
|| (r->x < b->x0) || (r->x > b->x1)
|
|
||||||
|| (r->y < b->y0) || (r->y > b->y1)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->z1 - r->z) / r->k;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case OOP:
|
|
||||||
{
|
|
||||||
if((r->z > b->z1)
|
|
||||||
|| (r->x < b->x0) || (r->x > b->x1)
|
|
||||||
|| (r->y < b->y0) || (r->y > b->y1)
|
|
||||||
)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*t = (b->z0 - r->z) / r->k;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SIMD_FORCE_INLINE bool btRayAabb2(const btVector3& rayFrom,
|
SIMD_FORCE_INLINE bool btRayAabb2(const btVector3& rayFrom,
|
||||||
|
|||||||
Reference in New Issue
Block a user