MCPcopy Create free account
hub / github.com/Pierre-Terdiman/PEEL / BatchRaycasts

Method BatchRaycasts

PEEL/Physics/PINT_Opcode1_3/PINT_Opcode13.cpp:340–503  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

338}
339
340udword Opcode13Pint::BatchRaycasts(PintSQThreadContext context, udword nb, PintRaycastHit* dest, const PintRaycastData* raycasts)
341{
342 AllocSwitch _;
343
344 ASSERT(mSceneTree);
345
346 if(mSceneTree)
347 {
348 SQThreadContext* C = (SQThreadContext*)context;
349 Container& mBoxIndices = C->mBoxIndices;
350
351 RayCollider SceneRC;
352 SceneRC.SetFirstContact(false);
353 SceneRC.SetTemporalCoherence(false);
354 SceneRC.SetPrimitiveTests(true);
355
356 CollisionFace Memory;
357 CollisionFaces CF;
358 CF.InitSharedBuffers(sizeof(CollisionFace)/sizeof(udword), (udword*)&Memory);
359
360 RayCollider RC;
361 RC.SetFirstContact(false);
362 RC.SetTemporalCoherence(false);
363 RC.SetPrimitiveTests(true);
364 RC.SetCulling(true);
365 RC.SetClosestHit(true);
366 RC.SetDestination(&CF);
367
368 udword NbHits = 0;
369 while(nb--)
370 {
371 const Ray& CurrentRay = *reinterpret_cast<const Ray*>(&raycasts->mOrigin.x);
372
373 SceneRC.SetMaxDist(raycasts->mMaxDist);
374 mBoxIndices.Reset();
375 if(SceneRC.Collide(CurrentRay, mSceneTree, mBoxIndices))
376 {
377 const OpcodeActor* TouchedActor = null;
378 CollisionFace Hit;
379 Hit.mDistance = raycasts->mMaxDist;
380
381 udword NbMeshes = mBoxIndices.GetNbEntries();
382 for(udword i=0;i<NbMeshes;i++)
383 {
384 const OpcodeActor* Actor = (const OpcodeActor*)mActors.GetEntries()[mBoxIndices[i]];
385 const OpcodeMesh* Mesh = Actor->mMesh;
386
387 RC.SetMaxDist(Hit.mDistance);
388 Memory.mDistance = MAX_FLOAT;
389 if(RC.Collide(CurrentRay, Mesh->mModel, &Actor->mMeshTM/*, udword* cache=null*/))
390 {
391 if(Memory.mDistance<Hit.mDistance)
392 {
393 Hit = Memory;
394 TouchedActor = Actor;
395 }
396 }
397 }

Callers

nothing calls this directly

Calls 7

ComputeBarycentricPointFunction · 0.85
GetVertsMethod · 0.80
TransformPoint4x3Function · 0.50
TransformPoint3x3Function · 0.50
ResetMethod · 0.45
CollideMethod · 0.45
NormalizeMethod · 0.45

Tested by

no test coverage detected