32 #pragma warning(disable: 4505)
35#include "foundation/PxBasicTemplates.h"
49#ifndef SWEEP_AABB_IMPL
52 PxVec3 mLocalDir_Padded;
53 RaycastHitInternal mStabbedFace;
55 PxU32 mBackfaceCulling;
59 PxVec3 mBestTriNormal;
65#ifndef SWEEP_AABB_IMPL
69 PxMat33 mRModelToBox_Padded;
70 PxVec3 mTModelToBox_Padded;
71 PxVec3 mOriginalExtents_Padded;
72 PxVec3 mOriginalDir_Padded;
73 PxVec3 mOneOverDir_Padded;
74 PxVec3 mOneOverOriginalDir;
76#ifndef SWEEP_AABB_IMPL
79 const PxVec3 BoxExtents = mDP + d * mProj;
80 mTBoxToModel_PaddedAligned = mLocalBox.center + mLocalDir_Padded*d*0.5f;
82 setupBoxData(
this, BoxExtents, &mAR);
89static void prepareSweepData(
const Box& box,
const PxVec3& dir,
float maxDist, BoxSweepParams*
PX_RESTRICT params)
91 invertBoxMatrix(params->mRModelToBox_Padded, params->mTModelToBox_Padded, box);
93 params->mOriginalExtents_Padded = box.extents;
95 const PxVec3 OriginalDir = params->mRModelToBox_Padded.transform(dir);
96 params->mOriginalDir_Padded = OriginalDir;
98 const PxVec3 OneOverOriginalDir(OriginalDir.x!=0.0f ? 1.0f/OriginalDir.x : 0.0f,
99 OriginalDir.y!=0.0f ? 1.0f/OriginalDir.y : 0.0f,
100 OriginalDir.z!=0.0f ? 1.0f/OriginalDir.z : 0.0f);
102 params->mOneOverOriginalDir = OneOverOriginalDir;
103 params->mOneOverDir_Padded = OneOverOriginalDir / maxDist;
106 const Box& LocalBox = box;
107 const PxVec3& LocalDir = dir;
109 params->mLocalDir_Padded = LocalDir;
110 params->mStabbedFace.mDistance = maxDist;
111#ifndef SWEEP_AABB_IMPL
112 params->mLocalBox = LocalBox;
123 dd[0] = fabsf(LocalBox.rot.column0.dot(LocalDir));
124 dd[1] = fabsf(LocalBox.rot.column1.dot(LocalDir));
125 dd[2] = fabsf(LocalBox.rot.column2.dot(LocalDir));
144 R1 = LocalBox.rot[ax0];
145 R1 -= R1.dot(LocalDir)*LocalDir;
147 R2 = LocalDir.cross(R1);
151 boxToModelR.column0 = LocalDir;
152 boxToModelR.column1 = R1;
153 boxToModelR.column2 = R2;
158 params->mProj.x = 0.5f;
159 params->mProj.y = LocalDir.dot(R1)*0.5f;
160 params->mProj.z = LocalDir.dot(R2)*0.5f;
165 for(PxU32 r=0;r<3;r++)
167 const PxVec3& R = boxToModelR[r];
168 params->mDP[r] = fabsf(LocalBox.rot.column0.dot(R)*LocalBox.extents.x)
169 + fabsf(LocalBox.rot.column1.dot(R)*LocalBox.extents.y)
170 + fabsf(LocalBox.rot.column2.dot(R)*LocalBox.extents.z);
202 params->mOffset = params->mDP.x + LocalBox.center.dot(LocalDir);
204#ifndef SWEEP_AABB_IMPL
205 precomputeData(params, ¶ms->mAR, &boxToModelR);
207 params->ShrinkOBB(maxDist);
#define PX_RESTRICT
Definition PxPreprocessor.h:355
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
Definition GuBV4_BoxOverlap_Internal.h:79
Definition GuBV4_BoxSweep_Internal.h:42