123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /*
- * OPCODE - Optimized Collision Detection
- * Copyright (C) 2001 Pierre Terdiman
- * Homepage: http://www.codercorner.com/Opcode.htm
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**
- * Contains base volume collider class.
- * \file OPC_VolumeCollider.cpp
- * \author Pierre Terdiman
- * \date June, 2, 2001
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**
- * Contains the abstract class for volume colliders.
- *
- * \class VolumeCollider
- * \author Pierre Terdiman
- * \version 1.3
- * \date June, 2, 2001
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- #include "Opcode.h"
- using namespace Opcode;
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**
- * Constructor.
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- VolumeCollider::VolumeCollider() :
- mTouchedPrimitives (null),
- mNbVolumeBVTests (0),
- mNbVolumePrimTests (0)
- {
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**
- * Destructor.
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- VolumeCollider::~VolumeCollider()
- {
- mTouchedPrimitives = null;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**
- * Validates current settings. You should call this method after all the settings / callbacks have been defined for a collider.
- * \return null if everything is ok, else a string describing the problem
- */
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- const char* VolumeCollider::ValidateSettings()
- {
- return null;
- }
- // Pretty dumb way to dump - to do better - one day...
- #define IMPLEMENT_NOLEAFDUMP(type) \
- void VolumeCollider::_Dump(const type* node) \
- { \
- if(node->HasPosLeaf()) mTouchedPrimitives->Add(node->GetPosPrimitive()); \
- else _Dump(node->GetPos()); \
- \
- if(ContactFound()) return; \
- \
- if(node->HasNegLeaf()) mTouchedPrimitives->Add(node->GetNegPrimitive()); \
- else _Dump(node->GetNeg()); \
- }
- #define IMPLEMENT_LEAFDUMP(type) \
- void VolumeCollider::_Dump(const type* node) \
- { \
- if(node->IsLeaf()) \
- { \
- mTouchedPrimitives->Add(node->GetPrimitive()); \
- } \
- else \
- { \
- _Dump(node->GetPos()); \
- \
- if(ContactFound()) return; \
- \
- _Dump(node->GetNeg()); \
- } \
- }
- IMPLEMENT_NOLEAFDUMP(AABBNoLeafNode)
- IMPLEMENT_NOLEAFDUMP(AABBQuantizedNoLeafNode)
- IMPLEMENT_LEAFDUMP(AABBCollisionNode)
- IMPLEMENT_LEAFDUMP(AABBQuantizedNode)
|