Refactoring:
Moved optional code to Extras: AlgebraicCCD,EPA,quickstep Moved SimpleBroadphase data to OverlappingPairCache, and derive both SimpleBroadphase and AxisSweep3 from OverlappingPairCache. Added ParallelPhysicsEnvironment (prepair more parallel mainloop) Upgraded hardcoded limit from 1024/8192 to 32766/65535 (max objects / max overlapping pairs)
This commit is contained in:
@@ -48,6 +48,7 @@ void AxisSweep3::SetAabb(BroadphaseProxy* proxy,const SimdVector3& aabbMin,const
|
|||||||
|
|
||||||
|
|
||||||
AxisSweep3::AxisSweep3(const SimdPoint3& worldAabbMin,const SimdPoint3& worldAabbMax, int maxHandles, int maxOverlaps)
|
AxisSweep3::AxisSweep3(const SimdPoint3& worldAabbMin,const SimdPoint3& worldAabbMax, int maxHandles, int maxOverlaps)
|
||||||
|
:OverlappingPairCache(maxOverlaps)
|
||||||
{
|
{
|
||||||
//assert(bounds.HasVolume());
|
//assert(bounds.HasVolume());
|
||||||
|
|
||||||
|
|||||||
@@ -21,13 +21,13 @@
|
|||||||
|
|
||||||
#include "SimdPoint3.h"
|
#include "SimdPoint3.h"
|
||||||
#include "SimdVector3.h"
|
#include "SimdVector3.h"
|
||||||
#include "SimpleBroadphase.h"
|
#include "OverlappingPairCache.h"
|
||||||
#include "BroadphaseProxy.h"
|
#include "BroadphaseProxy.h"
|
||||||
|
|
||||||
/// AxisSweep3 is an efficient implementation of the 3d axis sweep and prune broadphase.
|
/// AxisSweep3 is an efficient implementation of the 3d axis sweep and prune broadphase.
|
||||||
/// It uses arrays rather then lists for storage of the 3 axis. Also it operates using integer coordinates instead of floats.
|
/// It uses arrays rather then lists for storage of the 3 axis. Also it operates using integer coordinates instead of floats.
|
||||||
/// The TestOverlap check is optimized to check the array index, rather then the actual AABB coordinates/pos
|
/// The TestOverlap check is optimized to check the array index, rather then the actual AABB coordinates/pos
|
||||||
class AxisSweep3 : public SimpleBroadphase
|
class AxisSweep3 : public OverlappingPairCache
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
213
Bullet/BroadphaseCollision/OverlappingPairCache.cpp
Normal file
213
Bullet/BroadphaseCollision/OverlappingPairCache.cpp
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "OverlappingPairCache.h"
|
||||||
|
|
||||||
|
#include "Dispatcher.h"
|
||||||
|
#include "CollisionAlgorithm.h"
|
||||||
|
|
||||||
|
|
||||||
|
OverlappingPairCache::OverlappingPairCache(int maxOverlap):
|
||||||
|
m_blockedForChanges(false),
|
||||||
|
m_NumOverlapBroadphasePair(0),
|
||||||
|
m_maxOverlap(maxOverlap)
|
||||||
|
{
|
||||||
|
m_OverlappingPairs = new BroadphasePair[maxOverlap];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OverlappingPairCache::~OverlappingPairCache()
|
||||||
|
{
|
||||||
|
delete [] m_OverlappingPairs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void OverlappingPairCache::RemoveOverlappingPair(BroadphasePair& pair)
|
||||||
|
{
|
||||||
|
CleanOverlappingPair(pair);
|
||||||
|
int index = &pair - &m_OverlappingPairs[0];
|
||||||
|
//remove efficiently, swap with the last
|
||||||
|
m_OverlappingPairs[index] = m_OverlappingPairs[m_NumOverlapBroadphasePair-1];
|
||||||
|
m_NumOverlapBroadphasePair--;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void OverlappingPairCache::CleanOverlappingPair(BroadphasePair& pair)
|
||||||
|
{
|
||||||
|
for (int dispatcherId=0;dispatcherId<SIMPLE_MAX_ALGORITHMS;dispatcherId++)
|
||||||
|
{
|
||||||
|
if (pair.m_algorithms[dispatcherId])
|
||||||
|
{
|
||||||
|
{
|
||||||
|
delete pair.m_algorithms[dispatcherId];
|
||||||
|
pair.m_algorithms[dispatcherId]=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void OverlappingPairCache::AddOverlappingPair(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1)
|
||||||
|
{
|
||||||
|
//don't add overlap with own
|
||||||
|
assert(proxy0 != proxy1);
|
||||||
|
|
||||||
|
if (!NeedsCollision(proxy0,proxy1))
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
BroadphasePair pair(*proxy0,*proxy1);
|
||||||
|
m_OverlappingPairs[m_NumOverlapBroadphasePair] = pair;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i=0;i<SIMPLE_MAX_ALGORITHMS;i++)
|
||||||
|
{
|
||||||
|
assert(!m_OverlappingPairs[m_NumOverlapBroadphasePair].m_algorithms[i]);
|
||||||
|
m_OverlappingPairs[m_NumOverlapBroadphasePair].m_algorithms[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_NumOverlapBroadphasePair >= m_maxOverlap)
|
||||||
|
{
|
||||||
|
//printf("Error: too many overlapping objects: m_NumOverlapBroadphasePair: %d\n",m_NumOverlapBroadphasePair);
|
||||||
|
#ifdef DEBUG
|
||||||
|
assert(0);
|
||||||
|
#endif
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
m_NumOverlapBroadphasePair++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BroadphasePair* OverlappingPairCache::FindPair(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1)
|
||||||
|
{
|
||||||
|
BroadphasePair* foundPair = 0;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i=m_NumOverlapBroadphasePair-1;i>=0;i--)
|
||||||
|
{
|
||||||
|
BroadphasePair& pair = m_OverlappingPairs[i];
|
||||||
|
if (((pair.m_pProxy0 == proxy0) && (pair.m_pProxy1 == proxy1)) ||
|
||||||
|
((pair.m_pProxy0 == proxy1) && (pair.m_pProxy1 == proxy0)))
|
||||||
|
{
|
||||||
|
foundPair = &pair;
|
||||||
|
return foundPair;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return foundPair;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void OverlappingPairCache::CleanProxyFromPairs(BroadphaseProxy* proxy)
|
||||||
|
{
|
||||||
|
for (int i=0;i<m_NumOverlapBroadphasePair;i++)
|
||||||
|
{
|
||||||
|
BroadphasePair& pair = m_OverlappingPairs[i];
|
||||||
|
if (pair.m_pProxy0 == proxy ||
|
||||||
|
pair.m_pProxy1 == proxy)
|
||||||
|
{
|
||||||
|
CleanOverlappingPair(pair);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OverlappingPairCache::RemoveOverlappingPairsContainingProxy(BroadphaseProxy* proxy)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for ( i=m_NumOverlapBroadphasePair-1;i>=0;i--)
|
||||||
|
{
|
||||||
|
BroadphasePair& pair = m_OverlappingPairs[i];
|
||||||
|
if (pair.m_pProxy0 == proxy ||
|
||||||
|
pair.m_pProxy1 == proxy)
|
||||||
|
{
|
||||||
|
RemoveOverlappingPair(pair);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void OverlappingPairCache::DispatchAllCollisionPairs(Dispatcher& dispatcher,DispatcherInfo& dispatchInfo)
|
||||||
|
{
|
||||||
|
m_blockedForChanges = true;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
int dispatcherId = dispatcher.GetUniqueId();
|
||||||
|
|
||||||
|
RefreshOverlappingPairs();
|
||||||
|
|
||||||
|
for (i=0;i<m_NumOverlapBroadphasePair;i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
BroadphasePair& pair = m_OverlappingPairs[i];
|
||||||
|
|
||||||
|
if (dispatcherId>= 0)
|
||||||
|
{
|
||||||
|
//dispatcher will keep algorithms persistent in the collision pair
|
||||||
|
if (!pair.m_algorithms[dispatcherId])
|
||||||
|
{
|
||||||
|
pair.m_algorithms[dispatcherId] = dispatcher.FindAlgorithm(
|
||||||
|
*pair.m_pProxy0,
|
||||||
|
*pair.m_pProxy1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pair.m_algorithms[dispatcherId])
|
||||||
|
{
|
||||||
|
if (dispatchInfo.m_dispatchFunc == DispatcherInfo::DISPATCH_DISCRETE)
|
||||||
|
{
|
||||||
|
pair.m_algorithms[dispatcherId]->ProcessCollision(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
float toi = pair.m_algorithms[dispatcherId]->CalculateTimeOfImpact(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
||||||
|
if (dispatchInfo.m_timeOfImpact > toi)
|
||||||
|
dispatchInfo.m_timeOfImpact = toi;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
//non-persistent algorithm dispatcher
|
||||||
|
CollisionAlgorithm* algo = dispatcher.FindAlgorithm(
|
||||||
|
*pair.m_pProxy0,
|
||||||
|
*pair.m_pProxy1);
|
||||||
|
|
||||||
|
if (algo)
|
||||||
|
{
|
||||||
|
if (dispatchInfo.m_dispatchFunc == DispatcherInfo::DISPATCH_DISCRETE)
|
||||||
|
{
|
||||||
|
algo->ProcessCollision(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
float toi = algo->CalculateTimeOfImpact(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
||||||
|
if (dispatchInfo.m_timeOfImpact > toi)
|
||||||
|
dispatchInfo.m_timeOfImpact = toi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
m_blockedForChanges = false;
|
||||||
|
|
||||||
|
}
|
||||||
85
Bullet/BroadphaseCollision/OverlappingPairCache.h
Normal file
85
Bullet/BroadphaseCollision/OverlappingPairCache.h
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef OVERLAPPING_PAIR_CACHE_H
|
||||||
|
#define OVERLAPPING_PAIR_CACHE_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "BroadphaseInterface.h"
|
||||||
|
#include "BroadphaseProxy.h"
|
||||||
|
#include "SimdPoint3.h"
|
||||||
|
|
||||||
|
|
||||||
|
///OverlappingPairCache maintains the objects with overlapping AABB
|
||||||
|
///Typically managed by the Broadphase, Axis3Sweep or SimpleBroadphase
|
||||||
|
class OverlappingPairCache : public BroadphaseInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
BroadphasePair* m_OverlappingPairs;
|
||||||
|
int m_NumOverlapBroadphasePair;
|
||||||
|
int m_maxOverlap;
|
||||||
|
|
||||||
|
//during the dispatch, check that user doesn't destroy/create proxy
|
||||||
|
bool m_blockedForChanges;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
OverlappingPairCache(int maxOverlap);
|
||||||
|
virtual ~OverlappingPairCache();
|
||||||
|
|
||||||
|
int GetNumOverlappingPairs() const
|
||||||
|
{
|
||||||
|
return m_NumOverlapBroadphasePair;
|
||||||
|
}
|
||||||
|
|
||||||
|
BroadphasePair& GetOverlappingPair(int index)
|
||||||
|
{
|
||||||
|
return m_OverlappingPairs[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoveOverlappingPair(BroadphasePair& pair);
|
||||||
|
|
||||||
|
void CleanOverlappingPair(BroadphasePair& pair);
|
||||||
|
|
||||||
|
void AddOverlappingPair(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1);
|
||||||
|
|
||||||
|
BroadphasePair* FindPair(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void CleanProxyFromPairs(BroadphaseProxy* proxy);
|
||||||
|
|
||||||
|
void RemoveOverlappingPairsContainingProxy(BroadphaseProxy* proxy);
|
||||||
|
|
||||||
|
|
||||||
|
inline bool NeedsCollision(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1) const
|
||||||
|
{
|
||||||
|
bool collides = proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask;
|
||||||
|
collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
|
||||||
|
|
||||||
|
return collides;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DispatchAllCollisionPairs(Dispatcher& dispatcher,DispatcherInfo& dispatchInfo);
|
||||||
|
|
||||||
|
virtual void RefreshOverlappingPairs() =0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
#endif //OVERLAPPING_PAIR_CACHE_H
|
||||||
@@ -36,19 +36,16 @@ void SimpleBroadphase::validate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
SimpleBroadphase::SimpleBroadphase(int maxProxies,int maxOverlap)
|
SimpleBroadphase::SimpleBroadphase(int maxProxies,int maxOverlap)
|
||||||
:m_firstFreeProxy(0),
|
:OverlappingPairCache(maxOverlap),
|
||||||
|
m_firstFreeProxy(0),
|
||||||
m_numProxies(0),
|
m_numProxies(0),
|
||||||
m_blockedForChanges(false),
|
m_maxProxies(maxProxies)
|
||||||
m_NumOverlapBroadphasePair(0),
|
|
||||||
m_maxProxies(maxProxies),
|
|
||||||
m_maxOverlap(maxOverlap)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
m_proxies = new SimpleBroadphaseProxy[maxProxies];
|
m_proxies = new SimpleBroadphaseProxy[maxProxies];
|
||||||
m_freeProxies = new int[maxProxies];
|
m_freeProxies = new int[maxProxies];
|
||||||
m_pProxies = new SimpleBroadphaseProxy*[maxProxies];
|
m_pProxies = new SimpleBroadphaseProxy*[maxProxies];
|
||||||
m_OverlappingPairs = new BroadphasePair[maxOverlap];
|
|
||||||
|
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for (i=0;i<m_maxProxies;i++)
|
for (i=0;i<m_maxProxies;i++)
|
||||||
@@ -62,7 +59,6 @@ SimpleBroadphase::~SimpleBroadphase()
|
|||||||
delete[] m_proxies;
|
delete[] m_proxies;
|
||||||
delete []m_freeProxies;
|
delete []m_freeProxies;
|
||||||
delete [] m_pProxies;
|
delete [] m_pProxies;
|
||||||
delete [] m_OverlappingPairs;
|
|
||||||
|
|
||||||
/*int i;
|
/*int i;
|
||||||
for (i=m_numProxies-1;i>=0;i--)
|
for (i=m_numProxies-1;i>=0;i--)
|
||||||
@@ -99,19 +95,7 @@ BroadphaseProxy* SimpleBroadphase::CreateProxy( const SimdVector3& min, const
|
|||||||
return proxy;
|
return proxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleBroadphase::RemoveOverlappingPairsContainingProxy(BroadphaseProxy* proxy)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for ( i=m_NumOverlapBroadphasePair-1;i>=0;i--)
|
|
||||||
{
|
|
||||||
BroadphasePair& pair = m_OverlappingPairs[i];
|
|
||||||
if (pair.m_pProxy0 == proxy ||
|
|
||||||
pair.m_pProxy1 == proxy)
|
|
||||||
{
|
|
||||||
RemoveOverlappingPair(pair);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SimpleBroadphase::DestroyProxy(BroadphaseProxy* proxyOrg)
|
void SimpleBroadphase::DestroyProxy(BroadphaseProxy* proxyOrg)
|
||||||
{
|
{
|
||||||
@@ -148,93 +132,13 @@ void SimpleBroadphase::SetAabb(BroadphaseProxy* proxy,const SimdVector3& aabbMin
|
|||||||
sbp->m_max = aabbMax;
|
sbp->m_max = aabbMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleBroadphase::CleanOverlappingPair(BroadphasePair& pair)
|
|
||||||
{
|
|
||||||
for (int dispatcherId=0;dispatcherId<SIMPLE_MAX_ALGORITHMS;dispatcherId++)
|
|
||||||
{
|
|
||||||
if (pair.m_algorithms[dispatcherId])
|
|
||||||
{
|
|
||||||
{
|
|
||||||
delete pair.m_algorithms[dispatcherId];
|
|
||||||
pair.m_algorithms[dispatcherId]=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SimpleBroadphase::CleanProxyFromPairs(BroadphaseProxy* proxy)
|
|
||||||
{
|
|
||||||
for (int i=0;i<m_NumOverlapBroadphasePair;i++)
|
|
||||||
{
|
|
||||||
BroadphasePair& pair = m_OverlappingPairs[i];
|
|
||||||
if (pair.m_pProxy0 == proxy ||
|
|
||||||
pair.m_pProxy1 == proxy)
|
|
||||||
{
|
|
||||||
CleanOverlappingPair(pair);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SimpleBroadphase::AddOverlappingPair(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1)
|
|
||||||
{
|
|
||||||
//don't add overlap with own
|
|
||||||
assert(proxy0 != proxy1);
|
|
||||||
|
|
||||||
if (!NeedsCollision(proxy0,proxy1))
|
|
||||||
return;
|
|
||||||
|
|
||||||
|
|
||||||
BroadphasePair pair(*proxy0,*proxy1);
|
|
||||||
m_OverlappingPairs[m_NumOverlapBroadphasePair] = pair;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i=0;i<SIMPLE_MAX_ALGORITHMS;i++)
|
|
||||||
{
|
|
||||||
assert(!m_OverlappingPairs[m_NumOverlapBroadphasePair].m_algorithms[i]);
|
|
||||||
m_OverlappingPairs[m_NumOverlapBroadphasePair].m_algorithms[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_NumOverlapBroadphasePair >= m_maxOverlap)
|
|
||||||
{
|
|
||||||
//printf("Error: too many overlapping objects: m_NumOverlapBroadphasePair: %d\n",m_NumOverlapBroadphasePair);
|
|
||||||
#ifdef DEBUG
|
|
||||||
assert(0);
|
|
||||||
#endif
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
m_NumOverlapBroadphasePair++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
BroadphasePair* SimpleBroadphase::FindPair(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1)
|
|
||||||
{
|
|
||||||
BroadphasePair* foundPair = 0;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i=m_NumOverlapBroadphasePair-1;i>=0;i--)
|
|
||||||
{
|
|
||||||
BroadphasePair& pair = m_OverlappingPairs[i];
|
|
||||||
if (((pair.m_pProxy0 == proxy0) && (pair.m_pProxy1 == proxy1)) ||
|
|
||||||
((pair.m_pProxy0 == proxy1) && (pair.m_pProxy1 == proxy0)))
|
|
||||||
{
|
|
||||||
foundPair = &pair;
|
|
||||||
return foundPair;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return foundPair;
|
|
||||||
}
|
|
||||||
void SimpleBroadphase::RemoveOverlappingPair(BroadphasePair& pair)
|
|
||||||
{
|
|
||||||
CleanOverlappingPair(pair);
|
|
||||||
int index = &pair - &m_OverlappingPairs[0];
|
|
||||||
//remove efficiently, swap with the last
|
|
||||||
m_OverlappingPairs[index] = m_OverlappingPairs[m_NumOverlapBroadphasePair-1];
|
|
||||||
m_NumOverlapBroadphasePair--;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SimpleBroadphase::AabbOverlap(SimpleBroadphaseProxy* proxy0,SimpleBroadphaseProxy* proxy1)
|
bool SimpleBroadphase::AabbOverlap(SimpleBroadphaseProxy* proxy0,SimpleBroadphaseProxy* proxy1)
|
||||||
{
|
{
|
||||||
@@ -269,9 +173,10 @@ void SimpleBroadphase::RefreshOverlappingPairs()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//then remove non-overlapping ones
|
//then remove non-overlapping ones
|
||||||
for (i=0;i<m_NumOverlapBroadphasePair;i++)
|
for (i=0;i<GetNumOverlappingPairs();i++)
|
||||||
{
|
{
|
||||||
BroadphasePair& pair = m_OverlappingPairs[i];
|
BroadphasePair& pair = GetOverlappingPair(i);
|
||||||
|
|
||||||
SimpleBroadphaseProxy* proxy0 = GetSimpleProxyFromProxy(pair.m_pProxy0);
|
SimpleBroadphaseProxy* proxy0 = GetSimpleProxyFromProxy(pair.m_pProxy0);
|
||||||
SimpleBroadphaseProxy* proxy1 = GetSimpleProxyFromProxy(pair.m_pProxy1);
|
SimpleBroadphaseProxy* proxy1 = GetSimpleProxyFromProxy(pair.m_pProxy1);
|
||||||
if (!AabbOverlap(proxy0,proxy1))
|
if (!AabbOverlap(proxy0,proxy1))
|
||||||
@@ -284,69 +189,4 @@ void SimpleBroadphase::RefreshOverlappingPairs()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleBroadphase::DispatchAllCollisionPairs(Dispatcher& dispatcher,DispatcherInfo& dispatchInfo)
|
|
||||||
{
|
|
||||||
m_blockedForChanges = true;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
int dispatcherId = dispatcher.GetUniqueId();
|
|
||||||
|
|
||||||
RefreshOverlappingPairs();
|
|
||||||
|
|
||||||
for (i=0;i<m_NumOverlapBroadphasePair;i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
BroadphasePair& pair = m_OverlappingPairs[i];
|
|
||||||
|
|
||||||
if (dispatcherId>= 0)
|
|
||||||
{
|
|
||||||
//dispatcher will keep algorithms persistent in the collision pair
|
|
||||||
if (!pair.m_algorithms[dispatcherId])
|
|
||||||
{
|
|
||||||
pair.m_algorithms[dispatcherId] = dispatcher.FindAlgorithm(
|
|
||||||
*pair.m_pProxy0,
|
|
||||||
*pair.m_pProxy1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pair.m_algorithms[dispatcherId])
|
|
||||||
{
|
|
||||||
if (dispatchInfo.m_dispatchFunc == DispatcherInfo::DISPATCH_DISCRETE)
|
|
||||||
{
|
|
||||||
pair.m_algorithms[dispatcherId]->ProcessCollision(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
float toi = pair.m_algorithms[dispatcherId]->CalculateTimeOfImpact(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
|
||||||
if (dispatchInfo.m_timeOfImpact > toi)
|
|
||||||
dispatchInfo.m_timeOfImpact = toi;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
//non-persistent algorithm dispatcher
|
|
||||||
CollisionAlgorithm* algo = dispatcher.FindAlgorithm(
|
|
||||||
*pair.m_pProxy0,
|
|
||||||
*pair.m_pProxy1);
|
|
||||||
|
|
||||||
if (algo)
|
|
||||||
{
|
|
||||||
if (dispatchInfo.m_dispatchFunc == DispatcherInfo::DISPATCH_DISCRETE)
|
|
||||||
{
|
|
||||||
algo->ProcessCollision(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
float toi = algo->CalculateTimeOfImpact(pair.m_pProxy0,pair.m_pProxy1,dispatchInfo);
|
|
||||||
if (dispatchInfo.m_timeOfImpact > toi)
|
|
||||||
dispatchInfo.m_timeOfImpact = toi;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
m_blockedForChanges = false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,12 +16,9 @@ subject to the following restrictions:
|
|||||||
#ifndef SIMPLE_BROADPHASE_H
|
#ifndef SIMPLE_BROADPHASE_H
|
||||||
#define SIMPLE_BROADPHASE_H
|
#define SIMPLE_BROADPHASE_H
|
||||||
|
|
||||||
//#define SIMPLE_MAX_PROXIES 8192
|
|
||||||
//#define SIMPLE_MAX_OVERLAP 4096
|
|
||||||
|
|
||||||
#include "BroadphaseInterface.h"
|
#include "OverlappingPairCache.h"
|
||||||
#include "BroadphaseProxy.h"
|
|
||||||
#include "SimdPoint3.h"
|
|
||||||
|
|
||||||
struct SimpleBroadphaseProxy : public BroadphaseProxy
|
struct SimpleBroadphaseProxy : public BroadphaseProxy
|
||||||
{
|
{
|
||||||
@@ -40,7 +37,7 @@ struct SimpleBroadphaseProxy : public BroadphaseProxy
|
|||||||
};
|
};
|
||||||
|
|
||||||
///SimpleBroadphase is a brute force aabb culling broadphase based on O(n^2) aabb checks
|
///SimpleBroadphase is a brute force aabb culling broadphase based on O(n^2) aabb checks
|
||||||
class SimpleBroadphase : public BroadphaseInterface
|
class SimpleBroadphase : public OverlappingPairCache
|
||||||
{
|
{
|
||||||
|
|
||||||
SimpleBroadphaseProxy* m_proxies;
|
SimpleBroadphaseProxy* m_proxies;
|
||||||
@@ -50,14 +47,10 @@ class SimpleBroadphase : public BroadphaseInterface
|
|||||||
SimpleBroadphaseProxy** m_pProxies;
|
SimpleBroadphaseProxy** m_pProxies;
|
||||||
int m_numProxies;
|
int m_numProxies;
|
||||||
|
|
||||||
//during the dispatch, check that user doesn't destroy/create proxy
|
|
||||||
bool m_blockedForChanges;
|
|
||||||
|
|
||||||
BroadphasePair* m_OverlappingPairs;
|
|
||||||
int m_NumOverlapBroadphasePair;
|
|
||||||
|
|
||||||
int m_maxProxies;
|
int m_maxProxies;
|
||||||
int m_maxOverlap;
|
|
||||||
|
|
||||||
inline SimpleBroadphaseProxy* GetSimpleProxyFromProxy(BroadphaseProxy* proxy)
|
inline SimpleBroadphaseProxy* GetSimpleProxyFromProxy(BroadphaseProxy* proxy)
|
||||||
{
|
{
|
||||||
@@ -70,13 +63,8 @@ class SimpleBroadphase : public BroadphaseInterface
|
|||||||
void validate();
|
void validate();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void RemoveOverlappingPair(BroadphasePair& pair);
|
|
||||||
void CleanOverlappingPair(BroadphasePair& pair);
|
|
||||||
|
|
||||||
void RemoveOverlappingPairsContainingProxy(BroadphaseProxy* proxy);
|
|
||||||
|
|
||||||
void AddOverlappingPair(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1);
|
|
||||||
BroadphasePair* FindPair(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1);
|
|
||||||
virtual void RefreshOverlappingPairs();
|
virtual void RefreshOverlappingPairs();
|
||||||
public:
|
public:
|
||||||
SimpleBroadphase(int maxProxies=4096,int maxOverlap=8192);
|
SimpleBroadphase(int maxProxies=4096,int maxOverlap=8192);
|
||||||
@@ -88,17 +76,10 @@ public:
|
|||||||
|
|
||||||
virtual void DestroyProxy(BroadphaseProxy* proxy);
|
virtual void DestroyProxy(BroadphaseProxy* proxy);
|
||||||
virtual void SetAabb(BroadphaseProxy* proxy,const SimdVector3& aabbMin,const SimdVector3& aabbMax);
|
virtual void SetAabb(BroadphaseProxy* proxy,const SimdVector3& aabbMin,const SimdVector3& aabbMax);
|
||||||
virtual void CleanProxyFromPairs(BroadphaseProxy* proxy);
|
|
||||||
virtual void DispatchAllCollisionPairs(Dispatcher& dispatcher,DispatcherInfo& dispatchInfo);
|
|
||||||
|
|
||||||
|
|
||||||
inline bool NeedsCollision(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1) const
|
|
||||||
{
|
|
||||||
bool collides = proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask;
|
|
||||||
collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
|
|
||||||
|
|
||||||
return collides;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -79,7 +79,9 @@ CollisionDispatcher::CollisionDispatcher ():
|
|||||||
PersistentManifold* CollisionDispatcher::GetNewManifold(void* b0,void* b1)
|
PersistentManifold* CollisionDispatcher::GetNewManifold(void* b0,void* b1)
|
||||||
{
|
{
|
||||||
gNumManifold++;
|
gNumManifold++;
|
||||||
//printf("GetNewManifoldResult: gNumManifold %d\n",gNumManifold);
|
|
||||||
|
//ASSERT(gNumManifold < 65535);
|
||||||
|
|
||||||
|
|
||||||
CollisionObject* body0 = (CollisionObject*)b0;
|
CollisionObject* body0 = (CollisionObject*)b0;
|
||||||
CollisionObject* body1 = (CollisionObject*)b1;
|
CollisionObject* body1 = (CollisionObject*)b1;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ subject to the following restrictions:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "SimpleConstraintSolver.h"
|
#include "SequentialImpulseConstraintSolver.h"
|
||||||
#include "NarrowPhaseCollision/PersistentManifold.h"
|
#include "NarrowPhaseCollision/PersistentManifold.h"
|
||||||
#include "Dynamics/RigidBody.h"
|
#include "Dynamics/RigidBody.h"
|
||||||
#include "ContactConstraint.h"
|
#include "ContactConstraint.h"
|
||||||
@@ -45,14 +45,14 @@ bool MyContactDestroyedCallback(void* userPersistentData)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SimpleConstraintSolver::SimpleConstraintSolver()
|
SequentialImpulseConstraintSolver::SequentialImpulseConstraintSolver()
|
||||||
{
|
{
|
||||||
gContactCallback = &MyContactDestroyedCallback;
|
gContactCallback = &MyContactDestroyedCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// SimpleConstraintSolver Sequentially applies impulses
|
/// SequentialImpulseConstraintSolver Sequentially applies impulses
|
||||||
float SimpleConstraintSolver::SolveGroup(PersistentManifold** manifoldPtr, int numManifolds,const ContactSolverInfo& infoGlobal,IDebugDraw* debugDrawer)
|
float SequentialImpulseConstraintSolver::SolveGroup(PersistentManifold** manifoldPtr, int numManifolds,const ContactSolverInfo& infoGlobal,IDebugDraw* debugDrawer)
|
||||||
{
|
{
|
||||||
|
|
||||||
ContactSolverInfo info = infoGlobal;
|
ContactSolverInfo info = infoGlobal;
|
||||||
@@ -113,7 +113,7 @@ SimdScalar restitutionCurve(SimdScalar rel_vel, SimdScalar restitution)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
float SimpleConstraintSolver::Solve(PersistentManifold* manifoldPtr, const ContactSolverInfo& info,int iter,IDebugDraw* debugDrawer)
|
float SequentialImpulseConstraintSolver::Solve(PersistentManifold* manifoldPtr, const ContactSolverInfo& info,int iter,IDebugDraw* debugDrawer)
|
||||||
{
|
{
|
||||||
|
|
||||||
RigidBody* body0 = (RigidBody*)manifoldPtr->GetBody0();
|
RigidBody* body0 = (RigidBody*)manifoldPtr->GetBody0();
|
||||||
@@ -294,7 +294,7 @@ float SimpleConstraintSolver::Solve(PersistentManifold* manifoldPtr, const Conta
|
|||||||
return maxImpulse;
|
return maxImpulse;
|
||||||
}
|
}
|
||||||
|
|
||||||
float SimpleConstraintSolver::SolveFriction(PersistentManifold* manifoldPtr, const ContactSolverInfo& info,int iter,IDebugDraw* debugDrawer)
|
float SequentialImpulseConstraintSolver::SolveFriction(PersistentManifold* manifoldPtr, const ContactSolverInfo& info,int iter,IDebugDraw* debugDrawer)
|
||||||
{
|
{
|
||||||
RigidBody* body0 = (RigidBody*)manifoldPtr->GetBody0();
|
RigidBody* body0 = (RigidBody*)manifoldPtr->GetBody0();
|
||||||
RigidBody* body1 = (RigidBody*)manifoldPtr->GetBody1();
|
RigidBody* body1 = (RigidBody*)manifoldPtr->GetBody1();
|
||||||
@@ -13,17 +13,17 @@ subject to the following restrictions:
|
|||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SIMPLE_CONSTRAINT_SOLVER_H
|
#ifndef SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H
|
||||||
#define SIMPLE_CONSTRAINT_SOLVER_H
|
#define SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H
|
||||||
|
|
||||||
#include "ConstraintSolver.h"
|
#include "ConstraintSolver.h"
|
||||||
class IDebugDraw;
|
class IDebugDraw;
|
||||||
|
|
||||||
/// SimpleConstraintSolver uses a Propagation Method and Sequentially applies impulses
|
/// SequentialImpulseConstraintSolver uses a Propagation Method and Sequentially applies impulses
|
||||||
/// The approach is the 3D version of Erin Catto's GDC 2006 tutorial. See http://www.gphysics.com
|
/// The approach is the 3D version of Erin Catto's GDC 2006 tutorial. See http://www.gphysics.com
|
||||||
/// Although Sequential Impulse is more intuitive, it is mathematically equivalent to Projected Successive Overrelaxation (iterative LCP)
|
/// Although Sequential Impulse is more intuitive, it is mathematically equivalent to Projected Successive Overrelaxation (iterative LCP)
|
||||||
/// Applies impulses for combined restitution and penetration recovery and to simulate friction
|
/// Applies impulses for combined restitution and penetration recovery and to simulate friction
|
||||||
class SimpleConstraintSolver : public ConstraintSolver
|
class SequentialImpulseConstraintSolver : public ConstraintSolver
|
||||||
{
|
{
|
||||||
float Solve(PersistentManifold* manifold, const ContactSolverInfo& info,int iter,IDebugDraw* debugDrawer);
|
float Solve(PersistentManifold* manifold, const ContactSolverInfo& info,int iter,IDebugDraw* debugDrawer);
|
||||||
float SolveFriction(PersistentManifold* manifoldPtr, const ContactSolverInfo& info,int iter,IDebugDraw* debugDrawer);
|
float SolveFriction(PersistentManifold* manifoldPtr, const ContactSolverInfo& info,int iter,IDebugDraw* debugDrawer);
|
||||||
@@ -31,13 +31,13 @@ class SimpleConstraintSolver : public ConstraintSolver
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
SimpleConstraintSolver();
|
SequentialImpulseConstraintSolver();
|
||||||
|
|
||||||
virtual ~SimpleConstraintSolver() {}
|
virtual ~SequentialImpulseConstraintSolver() {}
|
||||||
|
|
||||||
virtual float SolveGroup(PersistentManifold** manifold,int numManifolds,const ContactSolverInfo& info, IDebugDraw* debugDrawer=0);
|
virtual float SolveGroup(PersistentManifold** manifold,int numManifolds,const ContactSolverInfo& info, IDebugDraw* debugDrawer=0);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //SIMPLE_CONSTRAINT_SOLVER_H
|
#endif //SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H
|
||||||
|
|
||||||
@@ -31,7 +31,6 @@ typedef SimdScalar dMatrix3[4*3];
|
|||||||
extern float gLinearAirDamping;
|
extern float gLinearAirDamping;
|
||||||
extern bool gUseEpa;
|
extern bool gUseEpa;
|
||||||
|
|
||||||
#define MAX_RIGIDBODIES 8192
|
|
||||||
|
|
||||||
|
|
||||||
/// RigidBody class for RigidBody Dynamics
|
/// RigidBody class for RigidBody Dynamics
|
||||||
|
|||||||
@@ -69,14 +69,17 @@ extern float eye[3];
|
|||||||
extern int glutScreenWidth;
|
extern int glutScreenWidth;
|
||||||
extern int glutScreenHeight;
|
extern int glutScreenHeight;
|
||||||
|
|
||||||
|
const int maxProxies = 32766;
|
||||||
|
const int maxOverlap = 65535;
|
||||||
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
const int numObjects = 22;
|
const int numObjects = 5000;
|
||||||
#else
|
#else
|
||||||
const int numObjects = 120;
|
const int numObjects = 2000;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const int maxNumObjects = 450;
|
const int maxNumObjects = 32760;
|
||||||
|
|
||||||
MyMotionState ms[maxNumObjects];
|
MyMotionState ms[maxNumObjects];
|
||||||
CcdPhysicsController* physObjects[maxNumObjects] = {0,0,0,0};
|
CcdPhysicsController* physObjects[maxNumObjects] = {0,0,0,0};
|
||||||
@@ -127,11 +130,11 @@ int main(int argc,char** argv)
|
|||||||
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
||||||
|
|
||||||
|
|
||||||
SimdVector3 worldAabbMin(-10000,-10000,-10000);
|
SimdVector3 worldAabbMin(-30000,-30000,-30000);
|
||||||
SimdVector3 worldAabbMax(10000,10000,10000);
|
SimdVector3 worldAabbMax(30000,30000,30000);
|
||||||
|
|
||||||
BroadphaseInterface* broadphase = new AxisSweep3(worldAabbMin,worldAabbMax);
|
//BroadphaseInterface* broadphase = new AxisSweep3(worldAabbMin,worldAabbMax,maxProxies,maxOverlap);
|
||||||
//BroadphaseInterface* broadphase = new SimpleBroadphase();
|
BroadphaseInterface* broadphase = new SimpleBroadphase(maxProxies,maxOverlap);
|
||||||
|
|
||||||
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
physicsEnvironmentPtr = new CcdPhysicsEnvironment(dispatcher,broadphase);
|
||||||
physicsEnvironmentPtr->setDeactivationTime(2.f);
|
physicsEnvironmentPtr->setDeactivationTime(2.f);
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ subject to the following restrictions:
|
|||||||
#include "Dynamics/RigidBody.h"
|
#include "Dynamics/RigidBody.h"
|
||||||
#include "BroadphaseCollision/AxisSweep3.h"
|
#include "BroadphaseCollision/AxisSweep3.h"
|
||||||
|
|
||||||
#include "ConstraintSolver/SimpleConstraintSolver.h"
|
#include "ConstraintSolver/SequentialImpulseConstraintSolver.h"
|
||||||
#include "ConstraintSolver/OdeConstraintSolver.h"
|
//#include "ConstraintSolver/OdeConstraintSolver.h"
|
||||||
#include "CollisionDispatch/CollisionDispatcher.h"
|
#include "CollisionDispatch/CollisionDispatcher.h"
|
||||||
#include "BroadphaseCollision/SimpleBroadphase.h"
|
#include "BroadphaseCollision/SimpleBroadphase.h"
|
||||||
#include "CollisionShapes/TriangleMeshShape.h"
|
#include "CollisionShapes/TriangleMeshShape.h"
|
||||||
@@ -216,8 +216,8 @@ int main(int argc,char** argv)
|
|||||||
|
|
||||||
// GLDebugDrawer debugDrawer;
|
// GLDebugDrawer debugDrawer;
|
||||||
|
|
||||||
//ConstraintSolver* solver = new SimpleConstraintSolver;
|
ConstraintSolver* solver = new SequentialImpulseConstraintSolver;
|
||||||
ConstraintSolver* solver = new OdeConstraintSolver;
|
//ConstraintSolver* solver = new OdeConstraintSolver;
|
||||||
|
|
||||||
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ subject to the following restrictions:
|
|||||||
#include "CollisionShapes/EmptyShape.h"
|
#include "CollisionShapes/EmptyShape.h"
|
||||||
|
|
||||||
#include "Dynamics/RigidBody.h"
|
#include "Dynamics/RigidBody.h"
|
||||||
#include "ConstraintSolver/SimpleConstraintSolver.h"
|
#include "ConstraintSolver/SequentialImpulseConstraintSolver.h"
|
||||||
#include "ConstraintSolver/OdeConstraintSolver.h"
|
//#include "ConstraintSolver/OdeConstraintSolver.h"
|
||||||
#include "CollisionDispatch/CollisionDispatcher.h"
|
#include "CollisionDispatch/CollisionDispatcher.h"
|
||||||
#include "BroadphaseCollision/SimpleBroadphase.h"
|
#include "BroadphaseCollision/SimpleBroadphase.h"
|
||||||
#include "IDebugDraw.h"
|
#include "IDebugDraw.h"
|
||||||
@@ -72,7 +72,7 @@ int main(int argc,char** argv)
|
|||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
ConstraintSolver* solver = new SimpleConstraintSolver;
|
ConstraintSolver* solver = new SequentialImpulseConstraintSolver;
|
||||||
//ConstraintSolver* solver = new OdeConstraintSolver;
|
//ConstraintSolver* solver = new OdeConstraintSolver;
|
||||||
|
|
||||||
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
CollisionDispatcher* dispatcher = new CollisionDispatcher();
|
||||||
|
|||||||
@@ -48,9 +48,11 @@ subject to the following restrictions:
|
|||||||
#include "NarrowPhaseCollision/Epa.h"
|
#include "NarrowPhaseCollision/Epa.h"
|
||||||
#include "NarrowPhaseCollision/ConvexPenetrationDepthSolver.h"
|
#include "NarrowPhaseCollision/ConvexPenetrationDepthSolver.h"
|
||||||
#include "NarrowPhaseCollision/EpaPenetrationDepthSolver.h"
|
#include "NarrowPhaseCollision/EpaPenetrationDepthSolver.h"
|
||||||
|
EpaPenetrationDepthSolver epaPenDepthSolver;
|
||||||
|
|
||||||
|
|
||||||
SimplexSolverInterface simplexSolver;
|
SimplexSolverInterface simplexSolver;
|
||||||
EpaPenetrationDepthSolver epaPenDepthSolver;
|
|
||||||
|
|
||||||
int screenWidth = 640.f;
|
int screenWidth = 640.f;
|
||||||
int screenHeight = 480.f;
|
int screenHeight = 480.f;
|
||||||
|
|||||||
@@ -29,7 +29,10 @@
|
|||||||
#include "NarrowPhaseCollision/GjkConvexCast.h"
|
#include "NarrowPhaseCollision/GjkConvexCast.h"
|
||||||
#include "NarrowPhaseCollision/ContinuousConvexCollision.h"
|
#include "NarrowPhaseCollision/ContinuousConvexCollision.h"
|
||||||
#include "NarrowPhaseCollision/SubSimplexConvexCast.h"
|
#include "NarrowPhaseCollision/SubSimplexConvexCast.h"
|
||||||
|
|
||||||
|
#ifdef USE_ALGEBRAIC_CCD
|
||||||
#include "NarrowPhaseCollision/BU_CollisionPair.h"
|
#include "NarrowPhaseCollision/BU_CollisionPair.h"
|
||||||
|
#endif //USE_ALGEBRAIC_CCD
|
||||||
|
|
||||||
#include "CollisionShapes/SphereShape.h"
|
#include "CollisionShapes/SphereShape.h"
|
||||||
|
|
||||||
@@ -191,7 +194,7 @@ void clientDisplay(void) {
|
|||||||
GjkConvexCast convexCaster1(shapePtr[0],shapePtr[i],&gGjkSimplexSolver);
|
GjkConvexCast convexCaster1(shapePtr[0],shapePtr[i],&gGjkSimplexSolver);
|
||||||
|
|
||||||
//BU_CollisionPair (algebraic version) is currently broken, will look into this
|
//BU_CollisionPair (algebraic version) is currently broken, will look into this
|
||||||
BU_CollisionPair convexCaster2(shapePtr[0],shapePtr[i]);
|
//BU_CollisionPair convexCaster2(shapePtr[0],shapePtr[i]);
|
||||||
SubsimplexConvexCast convexCaster3(shapePtr[0],shapePtr[i],&gGjkSimplexSolver);
|
SubsimplexConvexCast convexCaster3(shapePtr[0],shapePtr[i],&gGjkSimplexSolver);
|
||||||
|
|
||||||
gGjkSimplexSolver.reset();
|
gGjkSimplexSolver.reset();
|
||||||
|
|||||||
@@ -30,8 +30,9 @@ Very basic raytracer, rendering into a texture.
|
|||||||
#include "NarrowPhaseCollision/SubSimplexConvexCast.h"
|
#include "NarrowPhaseCollision/SubSimplexConvexCast.h"
|
||||||
#include "NarrowPhaseCollision/GjkConvexCast.h"
|
#include "NarrowPhaseCollision/GjkConvexCast.h"
|
||||||
#include "NarrowPhaseCollision/ContinuousConvexCollision.h"
|
#include "NarrowPhaseCollision/ContinuousConvexCollision.h"
|
||||||
|
#ifdef USE_ALGEBRAIC_CCD
|
||||||
#include "NarrowPhaseCollision/BU_CollisionPair.h"
|
#include "NarrowPhaseCollision/BU_CollisionPair.h"
|
||||||
|
#endif //USE_ALGEBRAIC_CCD
|
||||||
|
|
||||||
|
|
||||||
#include "CollisionShapes/SphereShape.h"
|
#include "CollisionShapes/SphereShape.h"
|
||||||
|
|||||||
@@ -1,360 +1,360 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "BU_AlgebraicPolynomialSolver.h"
|
#include "BU_AlgebraicPolynomialSolver.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <SimdMinMax.h>
|
#include <SimdMinMax.h>
|
||||||
|
|
||||||
int BU_AlgebraicPolynomialSolver::Solve2Quadratic(SimdScalar p, SimdScalar q)
|
int BU_AlgebraicPolynomialSolver::Solve2Quadratic(SimdScalar p, SimdScalar q)
|
||||||
{
|
{
|
||||||
|
|
||||||
SimdScalar basic_h_local;
|
SimdScalar basic_h_local;
|
||||||
SimdScalar basic_h_local_delta;
|
SimdScalar basic_h_local_delta;
|
||||||
|
|
||||||
basic_h_local = p * 0.5f;
|
basic_h_local = p * 0.5f;
|
||||||
basic_h_local_delta = basic_h_local * basic_h_local - q;
|
basic_h_local_delta = basic_h_local * basic_h_local - q;
|
||||||
if (basic_h_local_delta > 0.0f) {
|
if (basic_h_local_delta > 0.0f) {
|
||||||
basic_h_local_delta = SimdSqrt(basic_h_local_delta);
|
basic_h_local_delta = SimdSqrt(basic_h_local_delta);
|
||||||
m_roots[0] = - basic_h_local + basic_h_local_delta;
|
m_roots[0] = - basic_h_local + basic_h_local_delta;
|
||||||
m_roots[1] = - basic_h_local - basic_h_local_delta;
|
m_roots[1] = - basic_h_local - basic_h_local_delta;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
else if (SimdGreaterEqual(basic_h_local_delta, SIMD_EPSILON)) {
|
else if (SimdGreaterEqual(basic_h_local_delta, SIMD_EPSILON)) {
|
||||||
m_roots[0] = - basic_h_local;
|
m_roots[0] = - basic_h_local;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int BU_AlgebraicPolynomialSolver::Solve2QuadraticFull(SimdScalar a,SimdScalar b, SimdScalar c)
|
int BU_AlgebraicPolynomialSolver::Solve2QuadraticFull(SimdScalar a,SimdScalar b, SimdScalar c)
|
||||||
{
|
{
|
||||||
SimdScalar radical = b * b - 4.0f * a * c;
|
SimdScalar radical = b * b - 4.0f * a * c;
|
||||||
if(radical >= 0.f)
|
if(radical >= 0.f)
|
||||||
{
|
{
|
||||||
SimdScalar sqrtRadical = SimdSqrt(radical);
|
SimdScalar sqrtRadical = SimdSqrt(radical);
|
||||||
SimdScalar idenom = 1.0f/(2.0f * a);
|
SimdScalar idenom = 1.0f/(2.0f * a);
|
||||||
m_roots[0]=(-b + sqrtRadical) * idenom;
|
m_roots[0]=(-b + sqrtRadical) * idenom;
|
||||||
m_roots[1]=(-b - sqrtRadical) * idenom;
|
m_roots[1]=(-b - sqrtRadical) * idenom;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define cubic_rt(x) \
|
#define cubic_rt(x) \
|
||||||
((x) > 0.0f ? SimdPow((SimdScalar)(x), 0.333333333333333333333333f) : \
|
((x) > 0.0f ? SimdPow((SimdScalar)(x), 0.333333333333333333333333f) : \
|
||||||
((x) < 0.0f ? -SimdPow((SimdScalar)-(x), 0.333333333333333333333333f) : 0.0f))
|
((x) < 0.0f ? -SimdPow((SimdScalar)-(x), 0.333333333333333333333333f) : 0.0f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* this function solves the following cubic equation: */
|
/* this function solves the following cubic equation: */
|
||||||
/* */
|
/* */
|
||||||
/* 3 2 */
|
/* 3 2 */
|
||||||
/* lead * x + a * x + b * x + c = 0. */
|
/* lead * x + a * x + b * x + c = 0. */
|
||||||
/* */
|
/* */
|
||||||
/* it returns the number of different roots found, and stores the roots in */
|
/* it returns the number of different roots found, and stores the roots in */
|
||||||
/* roots[0,2]. it returns -1 for a degenerate equation 0 = 0. */
|
/* roots[0,2]. it returns -1 for a degenerate equation 0 = 0. */
|
||||||
/* */
|
/* */
|
||||||
int BU_AlgebraicPolynomialSolver::Solve3Cubic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c)
|
int BU_AlgebraicPolynomialSolver::Solve3Cubic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c)
|
||||||
{
|
{
|
||||||
SimdScalar p, q, r;
|
SimdScalar p, q, r;
|
||||||
SimdScalar delta, u, phi;
|
SimdScalar delta, u, phi;
|
||||||
SimdScalar dummy;
|
SimdScalar dummy;
|
||||||
|
|
||||||
if (lead != 1.0) {
|
if (lead != 1.0) {
|
||||||
/* */
|
/* */
|
||||||
/* transform into normal form: x^3 + a x^2 + b x + c = 0 */
|
/* transform into normal form: x^3 + a x^2 + b x + c = 0 */
|
||||||
/* */
|
/* */
|
||||||
if (SimdEqual(lead, SIMD_EPSILON)) {
|
if (SimdEqual(lead, SIMD_EPSILON)) {
|
||||||
/* */
|
/* */
|
||||||
/* we have a x^2 + b x + c = 0 */
|
/* we have a x^2 + b x + c = 0 */
|
||||||
/* */
|
/* */
|
||||||
if (SimdEqual(a, SIMD_EPSILON)) {
|
if (SimdEqual(a, SIMD_EPSILON)) {
|
||||||
/* */
|
/* */
|
||||||
/* we have b x + c = 0 */
|
/* we have b x + c = 0 */
|
||||||
/* */
|
/* */
|
||||||
if (SimdEqual(b, SIMD_EPSILON)) {
|
if (SimdEqual(b, SIMD_EPSILON)) {
|
||||||
if (SimdEqual(c, SIMD_EPSILON)) {
|
if (SimdEqual(c, SIMD_EPSILON)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_roots[0] = -c / b;
|
m_roots[0] = -c / b;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
p = c / a;
|
p = c / a;
|
||||||
q = b / a;
|
q = b / a;
|
||||||
return Solve2QuadraticFull(a,b,c);
|
return Solve2QuadraticFull(a,b,c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
a = a / lead;
|
a = a / lead;
|
||||||
b = b / lead;
|
b = b / lead;
|
||||||
c = c / lead;
|
c = c / lead;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* we substitute x = y - a / 3 in order to eliminate the quadric term. */
|
/* we substitute x = y - a / 3 in order to eliminate the quadric term. */
|
||||||
/* we get x^3 + p x + q = 0 */
|
/* we get x^3 + p x + q = 0 */
|
||||||
/* */
|
/* */
|
||||||
a /= 3.0f;
|
a /= 3.0f;
|
||||||
u = a * a;
|
u = a * a;
|
||||||
p = b / 3.0f - u;
|
p = b / 3.0f - u;
|
||||||
q = a * (2.0f * u - b) + c;
|
q = a * (2.0f * u - b) + c;
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* now use Cardano's formula */
|
/* now use Cardano's formula */
|
||||||
/* */
|
/* */
|
||||||
if (SimdEqual(p, SIMD_EPSILON)) {
|
if (SimdEqual(p, SIMD_EPSILON)) {
|
||||||
if (SimdEqual(q, SIMD_EPSILON)) {
|
if (SimdEqual(q, SIMD_EPSILON)) {
|
||||||
/* */
|
/* */
|
||||||
/* one triple root */
|
/* one triple root */
|
||||||
/* */
|
/* */
|
||||||
m_roots[0] = -a;
|
m_roots[0] = -a;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* */
|
/* */
|
||||||
/* one real and two complex roots */
|
/* one real and two complex roots */
|
||||||
/* */
|
/* */
|
||||||
m_roots[0] = cubic_rt(-q) - a;
|
m_roots[0] = cubic_rt(-q) - a;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
q /= 2.0f;
|
q /= 2.0f;
|
||||||
delta = p * p * p + q * q;
|
delta = p * p * p + q * q;
|
||||||
if (delta > 0.0f) {
|
if (delta > 0.0f) {
|
||||||
/* */
|
/* */
|
||||||
/* one real and two complex roots. note that v = -p / u. */
|
/* one real and two complex roots. note that v = -p / u. */
|
||||||
/* */
|
/* */
|
||||||
u = -q + SimdSqrt(delta);
|
u = -q + SimdSqrt(delta);
|
||||||
u = cubic_rt(u);
|
u = cubic_rt(u);
|
||||||
m_roots[0] = u - p / u - a;
|
m_roots[0] = u - p / u - a;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if (delta < 0.0) {
|
else if (delta < 0.0) {
|
||||||
/* */
|
/* */
|
||||||
/* Casus irreducibilis: we have three real roots */
|
/* Casus irreducibilis: we have three real roots */
|
||||||
/* */
|
/* */
|
||||||
r = SimdSqrt(-p);
|
r = SimdSqrt(-p);
|
||||||
p *= -r;
|
p *= -r;
|
||||||
r *= 2.0;
|
r *= 2.0;
|
||||||
phi = SimdAcos(-q / p) / 3.0f;
|
phi = SimdAcos(-q / p) / 3.0f;
|
||||||
dummy = SIMD_2_PI / 3.0f;
|
dummy = SIMD_2_PI / 3.0f;
|
||||||
m_roots[0] = r * SimdCos(phi) - a;
|
m_roots[0] = r * SimdCos(phi) - a;
|
||||||
m_roots[1] = r * SimdCos(phi + dummy) - a;
|
m_roots[1] = r * SimdCos(phi + dummy) - a;
|
||||||
m_roots[2] = r * SimdCos(phi - dummy) - a;
|
m_roots[2] = r * SimdCos(phi - dummy) - a;
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* */
|
/* */
|
||||||
/* one single and one SimdScalar root */
|
/* one single and one SimdScalar root */
|
||||||
/* */
|
/* */
|
||||||
r = cubic_rt(-q);
|
r = cubic_rt(-q);
|
||||||
m_roots[0] = 2.0f * r - a;
|
m_roots[0] = 2.0f * r - a;
|
||||||
m_roots[1] = -r - a;
|
m_roots[1] = -r - a;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* this function solves the following quartic equation: */
|
/* this function solves the following quartic equation: */
|
||||||
/* */
|
/* */
|
||||||
/* 4 3 2 */
|
/* 4 3 2 */
|
||||||
/* lead * x + a * x + b * x + c * x + d = 0. */
|
/* lead * x + a * x + b * x + c * x + d = 0. */
|
||||||
/* */
|
/* */
|
||||||
/* it returns the number of different roots found, and stores the roots in */
|
/* it returns the number of different roots found, and stores the roots in */
|
||||||
/* roots[0,3]. it returns -1 for a degenerate equation 0 = 0. */
|
/* roots[0,3]. it returns -1 for a degenerate equation 0 = 0. */
|
||||||
/* */
|
/* */
|
||||||
int BU_AlgebraicPolynomialSolver::Solve4Quartic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c, SimdScalar d)
|
int BU_AlgebraicPolynomialSolver::Solve4Quartic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c, SimdScalar d)
|
||||||
{
|
{
|
||||||
SimdScalar p, q ,r;
|
SimdScalar p, q ,r;
|
||||||
SimdScalar u, v, w;
|
SimdScalar u, v, w;
|
||||||
int i, num_roots, num_tmp;
|
int i, num_roots, num_tmp;
|
||||||
//SimdScalar tmp[2];
|
//SimdScalar tmp[2];
|
||||||
|
|
||||||
if (lead != 1.0) {
|
if (lead != 1.0) {
|
||||||
/* */
|
/* */
|
||||||
/* transform into normal form: x^4 + a x^3 + b x^2 + c x + d = 0 */
|
/* transform into normal form: x^4 + a x^3 + b x^2 + c x + d = 0 */
|
||||||
/* */
|
/* */
|
||||||
if (SimdEqual(lead, SIMD_EPSILON)) {
|
if (SimdEqual(lead, SIMD_EPSILON)) {
|
||||||
/* */
|
/* */
|
||||||
/* we have a x^3 + b x^2 + c x + d = 0 */
|
/* we have a x^3 + b x^2 + c x + d = 0 */
|
||||||
/* */
|
/* */
|
||||||
if (SimdEqual(a, SIMD_EPSILON)) {
|
if (SimdEqual(a, SIMD_EPSILON)) {
|
||||||
/* */
|
/* */
|
||||||
/* we have b x^2 + c x + d = 0 */
|
/* we have b x^2 + c x + d = 0 */
|
||||||
/* */
|
/* */
|
||||||
if (SimdEqual(b, SIMD_EPSILON)) {
|
if (SimdEqual(b, SIMD_EPSILON)) {
|
||||||
/* */
|
/* */
|
||||||
/* we have c x + d = 0 */
|
/* we have c x + d = 0 */
|
||||||
/* */
|
/* */
|
||||||
if (SimdEqual(c, SIMD_EPSILON)) {
|
if (SimdEqual(c, SIMD_EPSILON)) {
|
||||||
if (SimdEqual(d, SIMD_EPSILON)) {
|
if (SimdEqual(d, SIMD_EPSILON)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_roots[0] = -d / c;
|
m_roots[0] = -d / c;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
p = c / b;
|
p = c / b;
|
||||||
q = d / b;
|
q = d / b;
|
||||||
return Solve2QuadraticFull(b,c,d);
|
return Solve2QuadraticFull(b,c,d);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return Solve3Cubic(1.0, b / a, c / a, d / a);
|
return Solve3Cubic(1.0, b / a, c / a, d / a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
a = a / lead;
|
a = a / lead;
|
||||||
b = b / lead;
|
b = b / lead;
|
||||||
c = c / lead;
|
c = c / lead;
|
||||||
d = d / lead;
|
d = d / lead;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* we substitute x = y - a / 4 in order to eliminate the cubic term. */
|
/* we substitute x = y - a / 4 in order to eliminate the cubic term. */
|
||||||
/* we get: y^4 + p y^2 + q y + r = 0. */
|
/* we get: y^4 + p y^2 + q y + r = 0. */
|
||||||
/* */
|
/* */
|
||||||
a /= 4.0f;
|
a /= 4.0f;
|
||||||
p = b - 6.0f * a * a;
|
p = b - 6.0f * a * a;
|
||||||
q = a * (8.0f * a * a - 2.0f * b) + c;
|
q = a * (8.0f * a * a - 2.0f * b) + c;
|
||||||
r = a * (a * (b - 3.f * a * a) - c) + d;
|
r = a * (a * (b - 3.f * a * a) - c) + d;
|
||||||
if (SimdEqual(q, SIMD_EPSILON)) {
|
if (SimdEqual(q, SIMD_EPSILON)) {
|
||||||
/* */
|
/* */
|
||||||
/* biquadratic equation: y^4 + p y^2 + r = 0. */
|
/* biquadratic equation: y^4 + p y^2 + r = 0. */
|
||||||
/* */
|
/* */
|
||||||
num_roots = Solve2Quadratic(p, r);
|
num_roots = Solve2Quadratic(p, r);
|
||||||
if (num_roots > 0) {
|
if (num_roots > 0) {
|
||||||
if (m_roots[0] > 0.0f) {
|
if (m_roots[0] > 0.0f) {
|
||||||
if (num_roots > 1) {
|
if (num_roots > 1) {
|
||||||
if ((m_roots[1] > 0.0f) && (m_roots[1] != m_roots[0])) {
|
if ((m_roots[1] > 0.0f) && (m_roots[1] != m_roots[0])) {
|
||||||
u = SimdSqrt(m_roots[1]);
|
u = SimdSqrt(m_roots[1]);
|
||||||
m_roots[2] = u - a;
|
m_roots[2] = u - a;
|
||||||
m_roots[3] = -u - a;
|
m_roots[3] = -u - a;
|
||||||
u = SimdSqrt(m_roots[0]);
|
u = SimdSqrt(m_roots[0]);
|
||||||
m_roots[0] = u - a;
|
m_roots[0] = u - a;
|
||||||
m_roots[1] = -u - a;
|
m_roots[1] = -u - a;
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
u = SimdSqrt(m_roots[0]);
|
u = SimdSqrt(m_roots[0]);
|
||||||
m_roots[0] = u - a;
|
m_roots[0] = u - a;
|
||||||
m_roots[1] = -u - a;
|
m_roots[1] = -u - a;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
u = SimdSqrt(m_roots[0]);
|
u = SimdSqrt(m_roots[0]);
|
||||||
m_roots[0] = u - a;
|
m_roots[0] = u - a;
|
||||||
m_roots[1] = -u - a;
|
m_roots[1] = -u - a;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (SimdEqual(r, SIMD_EPSILON)) {
|
else if (SimdEqual(r, SIMD_EPSILON)) {
|
||||||
/* */
|
/* */
|
||||||
/* no absolute term: y (y^3 + p y + q) = 0. */
|
/* no absolute term: y (y^3 + p y + q) = 0. */
|
||||||
/* */
|
/* */
|
||||||
num_roots = Solve3Cubic(1.0, 0.0, p, q);
|
num_roots = Solve3Cubic(1.0, 0.0, p, q);
|
||||||
for (i = 0; i < num_roots; ++i) m_roots[i] -= a;
|
for (i = 0; i < num_roots; ++i) m_roots[i] -= a;
|
||||||
if (num_roots != -1) {
|
if (num_roots != -1) {
|
||||||
m_roots[num_roots] = -a;
|
m_roots[num_roots] = -a;
|
||||||
++num_roots;
|
++num_roots;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_roots[0] = -a;
|
m_roots[0] = -a;
|
||||||
num_roots = 1;;
|
num_roots = 1;;
|
||||||
}
|
}
|
||||||
return num_roots;
|
return num_roots;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* */
|
/* */
|
||||||
/* we solve the resolvent cubic equation */
|
/* we solve the resolvent cubic equation */
|
||||||
/* */
|
/* */
|
||||||
num_roots = Solve3Cubic(1.0f, -0.5f * p, -r, 0.5f * r * p - 0.125f * q * q);
|
num_roots = Solve3Cubic(1.0f, -0.5f * p, -r, 0.5f * r * p - 0.125f * q * q);
|
||||||
if (num_roots == -1) {
|
if (num_roots == -1) {
|
||||||
num_roots = 1;
|
num_roots = 1;
|
||||||
m_roots[0] = 0.0f;
|
m_roots[0] = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* build two quadric equations */
|
/* build two quadric equations */
|
||||||
/* */
|
/* */
|
||||||
w = m_roots[0];
|
w = m_roots[0];
|
||||||
u = w * w - r;
|
u = w * w - r;
|
||||||
v = 2.0f * w - p;
|
v = 2.0f * w - p;
|
||||||
|
|
||||||
if (SimdEqual(u, SIMD_EPSILON))
|
if (SimdEqual(u, SIMD_EPSILON))
|
||||||
u = 0.0;
|
u = 0.0;
|
||||||
else if (u > 0.0f)
|
else if (u > 0.0f)
|
||||||
u = SimdSqrt(u);
|
u = SimdSqrt(u);
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (SimdEqual(v, SIMD_EPSILON))
|
if (SimdEqual(v, SIMD_EPSILON))
|
||||||
v = 0.0;
|
v = 0.0;
|
||||||
else if (v > 0.0f)
|
else if (v > 0.0f)
|
||||||
v = SimdSqrt(v);
|
v = SimdSqrt(v);
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (q < 0.0f) v = -v;
|
if (q < 0.0f) v = -v;
|
||||||
w -= u;
|
w -= u;
|
||||||
num_roots=Solve2Quadratic(v, w);
|
num_roots=Solve2Quadratic(v, w);
|
||||||
for (i = 0; i < num_roots; ++i)
|
for (i = 0; i < num_roots; ++i)
|
||||||
{
|
{
|
||||||
m_roots[i] -= a;
|
m_roots[i] -= a;
|
||||||
}
|
}
|
||||||
w += 2.0f *u;
|
w += 2.0f *u;
|
||||||
SimdScalar tmp[2];
|
SimdScalar tmp[2];
|
||||||
tmp[0] = m_roots[0];
|
tmp[0] = m_roots[0];
|
||||||
tmp[1] = m_roots[1];
|
tmp[1] = m_roots[1];
|
||||||
|
|
||||||
num_tmp = Solve2Quadratic(-v, w);
|
num_tmp = Solve2Quadratic(-v, w);
|
||||||
for (i = 0; i < num_tmp; ++i)
|
for (i = 0; i < num_tmp; ++i)
|
||||||
{
|
{
|
||||||
m_roots[i + num_roots] = tmp[i] - a;
|
m_roots[i + num_roots] = tmp[i] - a;
|
||||||
m_roots[i]=tmp[i];
|
m_roots[i]=tmp[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return (num_tmp + num_roots);
|
return (num_tmp + num_roots);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,45 +1,45 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef BU_ALGEBRAIC_POLYNOMIAL_SOLVER_H
|
#ifndef BU_ALGEBRAIC_POLYNOMIAL_SOLVER_H
|
||||||
#define BU_ALGEBRAIC_POLYNOMIAL_SOLVER_H
|
#define BU_ALGEBRAIC_POLYNOMIAL_SOLVER_H
|
||||||
|
|
||||||
#include "BU_PolynomialSolverInterface.h"
|
#include "BU_PolynomialSolverInterface.h"
|
||||||
|
|
||||||
/// BU_AlgebraicPolynomialSolver implements polynomial root finding by analytically solving algebraic equations.
|
/// BU_AlgebraicPolynomialSolver implements polynomial root finding by analytically solving algebraic equations.
|
||||||
/// Polynomials up to 4rd degree are supported, Cardano's formula is used for 3rd degree
|
/// Polynomials up to 4rd degree are supported, Cardano's formula is used for 3rd degree
|
||||||
class BU_AlgebraicPolynomialSolver : public BUM_PolynomialSolverInterface
|
class BU_AlgebraicPolynomialSolver : public BUM_PolynomialSolverInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BU_AlgebraicPolynomialSolver() {};
|
BU_AlgebraicPolynomialSolver() {};
|
||||||
|
|
||||||
int Solve2Quadratic(SimdScalar p, SimdScalar q);
|
int Solve2Quadratic(SimdScalar p, SimdScalar q);
|
||||||
int Solve2QuadraticFull(SimdScalar a,SimdScalar b, SimdScalar c);
|
int Solve2QuadraticFull(SimdScalar a,SimdScalar b, SimdScalar c);
|
||||||
int Solve3Cubic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c);
|
int Solve3Cubic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c);
|
||||||
int Solve4Quartic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c, SimdScalar d);
|
int Solve4Quartic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c, SimdScalar d);
|
||||||
|
|
||||||
|
|
||||||
SimdScalar GetRoot(int i) const
|
SimdScalar GetRoot(int i) const
|
||||||
{
|
{
|
||||||
return m_roots[i];
|
return m_roots[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SimdScalar m_roots[4];
|
SimdScalar m_roots[4];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //BU_ALGEBRAIC_POLYNOMIAL_SOLVER_H
|
#endif //BU_ALGEBRAIC_POLYNOMIAL_SOLVER_H
|
||||||
@@ -1,25 +1,25 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "BU_Collidable.h"
|
#include "BU_Collidable.h"
|
||||||
#include "CollisionShapes/CollisionShape.h"
|
#include "CollisionShapes/CollisionShape.h"
|
||||||
#include <SimdTransform.h>
|
#include <SimdTransform.h>
|
||||||
#include "BU_MotionStateInterface.h"
|
#include "BU_MotionStateInterface.h"
|
||||||
|
|
||||||
BU_Collidable::BU_Collidable(BU_MotionStateInterface& motion,PolyhedralConvexShape& shape,void* userPointer )
|
BU_Collidable::BU_Collidable(BU_MotionStateInterface& motion,PolyhedralConvexShape& shape,void* userPointer )
|
||||||
:m_motionState(motion),m_shape(shape),m_userPointer(userPointer)
|
:m_motionState(motion),m_shape(shape),m_userPointer(userPointer)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -1,57 +1,57 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef BU_COLLIDABLE
|
#ifndef BU_COLLIDABLE
|
||||||
#define BU_COLLIDABLE
|
#define BU_COLLIDABLE
|
||||||
|
|
||||||
|
|
||||||
class PolyhedralConvexShape;
|
class PolyhedralConvexShape;
|
||||||
class BU_MotionStateInterface;
|
class BU_MotionStateInterface;
|
||||||
#include <SimdPoint3.h>
|
#include <SimdPoint3.h>
|
||||||
|
|
||||||
class BU_Collidable
|
class BU_Collidable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BU_Collidable(BU_MotionStateInterface& motion,PolyhedralConvexShape& shape, void* userPointer);
|
BU_Collidable(BU_MotionStateInterface& motion,PolyhedralConvexShape& shape, void* userPointer);
|
||||||
|
|
||||||
void* GetUserPointer() const
|
void* GetUserPointer() const
|
||||||
{
|
{
|
||||||
return m_userPointer;
|
return m_userPointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
BU_MotionStateInterface& GetMotionState()
|
BU_MotionStateInterface& GetMotionState()
|
||||||
{
|
{
|
||||||
return m_motionState;
|
return m_motionState;
|
||||||
}
|
}
|
||||||
inline const BU_MotionStateInterface& GetMotionState() const
|
inline const BU_MotionStateInterface& GetMotionState() const
|
||||||
{
|
{
|
||||||
return m_motionState;
|
return m_motionState;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const PolyhedralConvexShape& GetShape() const
|
inline const PolyhedralConvexShape& GetShape() const
|
||||||
{
|
{
|
||||||
return m_shape;
|
return m_shape;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BU_MotionStateInterface& m_motionState;
|
BU_MotionStateInterface& m_motionState;
|
||||||
PolyhedralConvexShape& m_shape;
|
PolyhedralConvexShape& m_shape;
|
||||||
void* m_userPointer;
|
void* m_userPointer;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //BU_COLLIDABLE
|
#endif //BU_COLLIDABLE
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,54 +1,54 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef BU_COLLISIONPAIR
|
#ifndef BU_COLLISIONPAIR
|
||||||
#define BU_COLLISIONPAIR
|
#define BU_COLLISIONPAIR
|
||||||
|
|
||||||
#include <NarrowPhaseCollision/BU_Screwing.h>
|
#include <NarrowPhaseCollision/BU_Screwing.h>
|
||||||
#include <NarrowPhaseCollision/ConvexCast.h>
|
#include <NarrowPhaseCollision/ConvexCast.h>
|
||||||
|
|
||||||
|
|
||||||
#include <SimdQuaternion.h>
|
#include <SimdQuaternion.h>
|
||||||
|
|
||||||
class PolyhedralConvexShape;
|
class PolyhedralConvexShape;
|
||||||
|
|
||||||
|
|
||||||
///BU_CollisionPair implements collision algorithm for algebraic time of impact calculation of feature based shapes.
|
///BU_CollisionPair implements collision algorithm for algebraic time of impact calculation of feature based shapes.
|
||||||
class BU_CollisionPair : public ConvexCast
|
class BU_CollisionPair : public ConvexCast
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BU_CollisionPair(const PolyhedralConvexShape* convexA,const PolyhedralConvexShape* convexB,SimdScalar tolerance=0.2f);
|
BU_CollisionPair(const PolyhedralConvexShape* convexA,const PolyhedralConvexShape* convexB,SimdScalar tolerance=0.2f);
|
||||||
//toi
|
//toi
|
||||||
|
|
||||||
virtual bool calcTimeOfImpact(
|
virtual bool calcTimeOfImpact(
|
||||||
const SimdTransform& fromA,
|
const SimdTransform& fromA,
|
||||||
const SimdTransform& toA,
|
const SimdTransform& toA,
|
||||||
const SimdTransform& fromB,
|
const SimdTransform& fromB,
|
||||||
const SimdTransform& toB,
|
const SimdTransform& toB,
|
||||||
CastResult& result);
|
CastResult& result);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const PolyhedralConvexShape* m_convexA;
|
const PolyhedralConvexShape* m_convexA;
|
||||||
const PolyhedralConvexShape* m_convexB;
|
const PolyhedralConvexShape* m_convexB;
|
||||||
BU_Screwing m_screwing;
|
BU_Screwing m_screwing;
|
||||||
SimdScalar m_tolerance;
|
SimdScalar m_tolerance;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif //BU_COLLISIONPAIR
|
#endif //BU_COLLISIONPAIR
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,76 +1,76 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef BU_EDGEEDGE
|
#ifndef BU_EDGEEDGE
|
||||||
#define BU_EDGEEDGE
|
#define BU_EDGEEDGE
|
||||||
|
|
||||||
class BU_Screwing;
|
class BU_Screwing;
|
||||||
#include <SimdTransform.h>
|
#include <SimdTransform.h>
|
||||||
#include <SimdPoint3.h>
|
#include <SimdPoint3.h>
|
||||||
#include <SimdVector3.h>
|
#include <SimdVector3.h>
|
||||||
|
|
||||||
//class BUM_Point2;
|
//class BUM_Point2;
|
||||||
|
|
||||||
#include <SimdScalar.h>
|
#include <SimdScalar.h>
|
||||||
|
|
||||||
///BU_EdgeEdge implements algebraic time of impact calculation between two (angular + linear) moving edges.
|
///BU_EdgeEdge implements algebraic time of impact calculation between two (angular + linear) moving edges.
|
||||||
class BU_EdgeEdge
|
class BU_EdgeEdge
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
BU_EdgeEdge();
|
BU_EdgeEdge();
|
||||||
bool GetTimeOfImpact(
|
bool GetTimeOfImpact(
|
||||||
const BU_Screwing& screwAB,
|
const BU_Screwing& screwAB,
|
||||||
const SimdPoint3& a,//edge in object A
|
const SimdPoint3& a,//edge in object A
|
||||||
const SimdVector3& u,
|
const SimdVector3& u,
|
||||||
const SimdPoint3& c,//edge in object B
|
const SimdPoint3& c,//edge in object B
|
||||||
const SimdVector3& v,
|
const SimdVector3& v,
|
||||||
SimdScalar &minTime,
|
SimdScalar &minTime,
|
||||||
SimdScalar &lamda,
|
SimdScalar &lamda,
|
||||||
SimdScalar& mu
|
SimdScalar& mu
|
||||||
);
|
);
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool Calc2DRotationPointPoint(const SimdPoint3& rotPt, SimdScalar rotRadius, SimdScalar rotW,const SimdPoint3& intersectPt,SimdScalar& minTime);
|
bool Calc2DRotationPointPoint(const SimdPoint3& rotPt, SimdScalar rotRadius, SimdScalar rotW,const SimdPoint3& intersectPt,SimdScalar& minTime);
|
||||||
bool GetTimeOfImpactGeneralCase(
|
bool GetTimeOfImpactGeneralCase(
|
||||||
const BU_Screwing& screwAB,
|
const BU_Screwing& screwAB,
|
||||||
const SimdPoint3& a,//edge in object A
|
const SimdPoint3& a,//edge in object A
|
||||||
const SimdVector3& u,
|
const SimdVector3& u,
|
||||||
const SimdPoint3& c,//edge in object B
|
const SimdPoint3& c,//edge in object B
|
||||||
const SimdVector3& v,
|
const SimdVector3& v,
|
||||||
SimdScalar &minTime,
|
SimdScalar &minTime,
|
||||||
SimdScalar &lamda,
|
SimdScalar &lamda,
|
||||||
SimdScalar& mu
|
SimdScalar& mu
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
bool GetTimeOfImpactVertexEdge(
|
bool GetTimeOfImpactVertexEdge(
|
||||||
const BU_Screwing& screwAB,
|
const BU_Screwing& screwAB,
|
||||||
const SimdPoint3& a,//edge in object A
|
const SimdPoint3& a,//edge in object A
|
||||||
const SimdVector3& u,
|
const SimdVector3& u,
|
||||||
const SimdPoint3& c,//edge in object B
|
const SimdPoint3& c,//edge in object B
|
||||||
const SimdVector3& v,
|
const SimdVector3& v,
|
||||||
SimdScalar &minTime,
|
SimdScalar &minTime,
|
||||||
SimdScalar &lamda,
|
SimdScalar &lamda,
|
||||||
SimdScalar& mu
|
SimdScalar& mu
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //BU_EDGEEDGE
|
#endif //BU_EDGEEDGE
|
||||||
@@ -1,50 +1,50 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef BU_MOTIONSTATE
|
#ifndef BU_MOTIONSTATE
|
||||||
#define BU_MOTIONSTATE
|
#define BU_MOTIONSTATE
|
||||||
|
|
||||||
|
|
||||||
#include <SimdTransform.h>
|
#include <SimdTransform.h>
|
||||||
#include <SimdPoint3.h>
|
#include <SimdPoint3.h>
|
||||||
#include <SimdQuaternion.h>
|
#include <SimdQuaternion.h>
|
||||||
|
|
||||||
class BU_MotionStateInterface
|
class BU_MotionStateInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~BU_MotionStateInterface(){};
|
virtual ~BU_MotionStateInterface(){};
|
||||||
|
|
||||||
virtual void SetTransform(const SimdTransform& trans) = 0;
|
virtual void SetTransform(const SimdTransform& trans) = 0;
|
||||||
virtual void GetTransform(SimdTransform& trans) const = 0;
|
virtual void GetTransform(SimdTransform& trans) const = 0;
|
||||||
|
|
||||||
virtual void SetPosition(const SimdPoint3& position) = 0;
|
virtual void SetPosition(const SimdPoint3& position) = 0;
|
||||||
virtual void GetPosition(SimdPoint3& position) const = 0;
|
virtual void GetPosition(SimdPoint3& position) const = 0;
|
||||||
|
|
||||||
virtual void SetOrientation(const SimdQuaternion& orientation) = 0;
|
virtual void SetOrientation(const SimdQuaternion& orientation) = 0;
|
||||||
virtual void GetOrientation(SimdQuaternion& orientation) const = 0;
|
virtual void GetOrientation(SimdQuaternion& orientation) const = 0;
|
||||||
|
|
||||||
virtual void SetBasis(const SimdMatrix3x3& basis) = 0;
|
virtual void SetBasis(const SimdMatrix3x3& basis) = 0;
|
||||||
virtual void GetBasis(SimdMatrix3x3& basis) const = 0;
|
virtual void GetBasis(SimdMatrix3x3& basis) const = 0;
|
||||||
|
|
||||||
virtual void SetLinearVelocity(const SimdVector3& linvel) = 0;
|
virtual void SetLinearVelocity(const SimdVector3& linvel) = 0;
|
||||||
virtual void GetLinearVelocity(SimdVector3& linvel) const = 0;
|
virtual void GetLinearVelocity(SimdVector3& linvel) const = 0;
|
||||||
|
|
||||||
virtual void GetAngularVelocity(SimdVector3& angvel) const = 0;
|
virtual void GetAngularVelocity(SimdVector3& angvel) const = 0;
|
||||||
virtual void SetAngularVelocity(const SimdVector3& angvel) = 0;
|
virtual void SetAngularVelocity(const SimdVector3& angvel) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //BU_MOTIONSTATE
|
#endif //BU_MOTIONSTATE
|
||||||
@@ -1,39 +1,39 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef BUM_POLYNOMIAL_SOLVER_INTERFACE
|
#ifndef BUM_POLYNOMIAL_SOLVER_INTERFACE
|
||||||
#define BUM_POLYNOMIAL_SOLVER_INTERFACE
|
#define BUM_POLYNOMIAL_SOLVER_INTERFACE
|
||||||
|
|
||||||
#include <SimdScalar.h>
|
#include <SimdScalar.h>
|
||||||
//
|
//
|
||||||
//BUM_PolynomialSolverInterface is interface class for polynomial root finding.
|
//BUM_PolynomialSolverInterface is interface class for polynomial root finding.
|
||||||
//The number of roots is returned as a result, query GetRoot to get the actual solution.
|
//The number of roots is returned as a result, query GetRoot to get the actual solution.
|
||||||
//
|
//
|
||||||
class BUM_PolynomialSolverInterface
|
class BUM_PolynomialSolverInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~BUM_PolynomialSolverInterface() {};
|
virtual ~BUM_PolynomialSolverInterface() {};
|
||||||
|
|
||||||
|
|
||||||
// virtual int Solve2QuadraticFull(SimdScalar a,SimdScalar b, SimdScalar c) = 0;
|
// virtual int Solve2QuadraticFull(SimdScalar a,SimdScalar b, SimdScalar c) = 0;
|
||||||
|
|
||||||
virtual int Solve3Cubic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c) = 0;
|
virtual int Solve3Cubic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c) = 0;
|
||||||
|
|
||||||
virtual int Solve4Quartic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c, SimdScalar d) = 0;
|
virtual int Solve4Quartic(SimdScalar lead, SimdScalar a, SimdScalar b, SimdScalar c, SimdScalar d) = 0;
|
||||||
|
|
||||||
virtual SimdScalar GetRoot(int i) const = 0;
|
virtual SimdScalar GetRoot(int i) const = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //BUM_POLYNOMIAL_SOLVER_INTERFACE
|
#endif //BUM_POLYNOMIAL_SOLVER_INTERFACE
|
||||||
@@ -1,200 +1,200 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Stephane Redon / Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Stephane Redon / Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "BU_Screwing.h"
|
#include "BU_Screwing.h"
|
||||||
|
|
||||||
|
|
||||||
BU_Screwing::BU_Screwing(const SimdVector3& relLinVel,const SimdVector3& relAngVel) {
|
BU_Screwing::BU_Screwing(const SimdVector3& relLinVel,const SimdVector3& relAngVel) {
|
||||||
|
|
||||||
|
|
||||||
const SimdScalar dx=relLinVel[0];
|
const SimdScalar dx=relLinVel[0];
|
||||||
const SimdScalar dy=relLinVel[1];
|
const SimdScalar dy=relLinVel[1];
|
||||||
const SimdScalar dz=relLinVel[2];
|
const SimdScalar dz=relLinVel[2];
|
||||||
const SimdScalar wx=relAngVel[0];
|
const SimdScalar wx=relAngVel[0];
|
||||||
const SimdScalar wy=relAngVel[1];
|
const SimdScalar wy=relAngVel[1];
|
||||||
const SimdScalar wz=relAngVel[2];
|
const SimdScalar wz=relAngVel[2];
|
||||||
|
|
||||||
// Compute the screwing parameters :
|
// Compute the screwing parameters :
|
||||||
// w : total amount of rotation
|
// w : total amount of rotation
|
||||||
// s : total amount of translation
|
// s : total amount of translation
|
||||||
// u : vector along the screwing axis (||u||=1)
|
// u : vector along the screwing axis (||u||=1)
|
||||||
// o : point on the screwing axis
|
// o : point on the screwing axis
|
||||||
|
|
||||||
m_w=SimdSqrt(wx*wx+wy*wy+wz*wz);
|
m_w=SimdSqrt(wx*wx+wy*wy+wz*wz);
|
||||||
//if (!w) {
|
//if (!w) {
|
||||||
if (fabs(m_w)<SCREWEPSILON ) {
|
if (fabs(m_w)<SCREWEPSILON ) {
|
||||||
|
|
||||||
assert(m_w == 0.f);
|
assert(m_w == 0.f);
|
||||||
|
|
||||||
m_w=0.;
|
m_w=0.;
|
||||||
m_s=SimdSqrt(dx*dx+dy*dy+dz*dz);
|
m_s=SimdSqrt(dx*dx+dy*dy+dz*dz);
|
||||||
if (fabs(m_s)<SCREWEPSILON ) {
|
if (fabs(m_s)<SCREWEPSILON ) {
|
||||||
assert(m_s == 0.);
|
assert(m_s == 0.);
|
||||||
|
|
||||||
m_s=0.;
|
m_s=0.;
|
||||||
m_u=SimdPoint3(0.,0.,1.);
|
m_u=SimdPoint3(0.,0.,1.);
|
||||||
m_o=SimdPoint3(0.,0.,0.);
|
m_o=SimdPoint3(0.,0.,0.);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
float t=1.f/m_s;
|
float t=1.f/m_s;
|
||||||
m_u=SimdPoint3(dx*t,dy*t,dz*t);
|
m_u=SimdPoint3(dx*t,dy*t,dz*t);
|
||||||
m_o=SimdPoint3(0.f,0.f,0.f);
|
m_o=SimdPoint3(0.f,0.f,0.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // there is some rotation
|
else { // there is some rotation
|
||||||
|
|
||||||
// we compute u
|
// we compute u
|
||||||
|
|
||||||
float v(1.f/m_w);
|
float v(1.f/m_w);
|
||||||
m_u=SimdPoint3(wx*v,wy*v,wz*v); // normalization
|
m_u=SimdPoint3(wx*v,wy*v,wz*v); // normalization
|
||||||
|
|
||||||
// decomposition of the translation along u and one orthogonal vector
|
// decomposition of the translation along u and one orthogonal vector
|
||||||
|
|
||||||
SimdPoint3 t(dx,dy,dz);
|
SimdPoint3 t(dx,dy,dz);
|
||||||
m_s=t.dot(m_u); // component along u
|
m_s=t.dot(m_u); // component along u
|
||||||
if (fabs(m_s)<SCREWEPSILON)
|
if (fabs(m_s)<SCREWEPSILON)
|
||||||
{
|
{
|
||||||
//printf("m_s component along u < SCREWEPSILION\n");
|
//printf("m_s component along u < SCREWEPSILION\n");
|
||||||
m_s=0.f;
|
m_s=0.f;
|
||||||
}
|
}
|
||||||
SimdPoint3 n1(t-(m_s*m_u)); // the remaining part (which is orthogonal to u)
|
SimdPoint3 n1(t-(m_s*m_u)); // the remaining part (which is orthogonal to u)
|
||||||
|
|
||||||
// now we have to compute o
|
// now we have to compute o
|
||||||
|
|
||||||
//SimdScalar len = n1.length2();
|
//SimdScalar len = n1.length2();
|
||||||
//(len >= BUM_EPSILON2) {
|
//(len >= BUM_EPSILON2) {
|
||||||
if (n1[0] || n1[1] || n1[2]) { // n1 is not the zero vector
|
if (n1[0] || n1[1] || n1[2]) { // n1 is not the zero vector
|
||||||
n1.normalize();
|
n1.normalize();
|
||||||
SimdVector3 n1orth=m_u.cross(n1);
|
SimdVector3 n1orth=m_u.cross(n1);
|
||||||
|
|
||||||
float n2x=SimdCos(0.5f*m_w);
|
float n2x=SimdCos(0.5f*m_w);
|
||||||
float n2y=SimdSin(0.5f*m_w);
|
float n2y=SimdSin(0.5f*m_w);
|
||||||
|
|
||||||
m_o=0.5f*t.dot(n1)*(n1+n2x/n2y*n1orth);
|
m_o=0.5f*t.dot(n1)*(n1+n2x/n2y*n1orth);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_o=SimdPoint3(0.f,0.f,0.f);
|
m_o=SimdPoint3(0.f,0.f,0.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Then, I need to compute Pa, the matrix from the reference (global) frame to
|
//Then, I need to compute Pa, the matrix from the reference (global) frame to
|
||||||
//the screwing frame :
|
//the screwing frame :
|
||||||
|
|
||||||
|
|
||||||
void BU_Screwing::LocalMatrix(SimdTransform &t) const {
|
void BU_Screwing::LocalMatrix(SimdTransform &t) const {
|
||||||
//So the whole computations do this : align the Oz axis along the
|
//So the whole computations do this : align the Oz axis along the
|
||||||
// screwing axis (thanks to u), and then find two others orthogonal axes to
|
// screwing axis (thanks to u), and then find two others orthogonal axes to
|
||||||
// complete the basis.
|
// complete the basis.
|
||||||
|
|
||||||
if ((m_u[0]>SCREWEPSILON)||(m_u[0]<-SCREWEPSILON)||(m_u[1]>SCREWEPSILON)||(m_u[1]<-SCREWEPSILON))
|
if ((m_u[0]>SCREWEPSILON)||(m_u[0]<-SCREWEPSILON)||(m_u[1]>SCREWEPSILON)||(m_u[1]<-SCREWEPSILON))
|
||||||
{
|
{
|
||||||
// to avoid numerical problems
|
// to avoid numerical problems
|
||||||
float n=SimdSqrt(m_u[0]*m_u[0]+m_u[1]*m_u[1]);
|
float n=SimdSqrt(m_u[0]*m_u[0]+m_u[1]*m_u[1]);
|
||||||
float invn=1.0f/n;
|
float invn=1.0f/n;
|
||||||
SimdMatrix3x3 mat;
|
SimdMatrix3x3 mat;
|
||||||
|
|
||||||
mat[0][0]=-m_u[1]*invn;
|
mat[0][0]=-m_u[1]*invn;
|
||||||
mat[0][1]=m_u[0]*invn;
|
mat[0][1]=m_u[0]*invn;
|
||||||
mat[0][2]=0.f;
|
mat[0][2]=0.f;
|
||||||
|
|
||||||
mat[1][0]=-m_u[0]*invn*m_u[2];
|
mat[1][0]=-m_u[0]*invn*m_u[2];
|
||||||
mat[1][1]=-m_u[1]*invn*m_u[2];
|
mat[1][1]=-m_u[1]*invn*m_u[2];
|
||||||
mat[1][2]=n;
|
mat[1][2]=n;
|
||||||
|
|
||||||
mat[2][0]=m_u[0];
|
mat[2][0]=m_u[0];
|
||||||
mat[2][1]=m_u[1];
|
mat[2][1]=m_u[1];
|
||||||
mat[2][2]=m_u[2];
|
mat[2][2]=m_u[2];
|
||||||
|
|
||||||
t.setOrigin(SimdPoint3(
|
t.setOrigin(SimdPoint3(
|
||||||
m_o[0]*m_u[1]*invn-m_o[1]*m_u[0]*invn,
|
m_o[0]*m_u[1]*invn-m_o[1]*m_u[0]*invn,
|
||||||
-(m_o[0]*mat[1][0]+m_o[1]*mat[1][1]+m_o[2]*n),
|
-(m_o[0]*mat[1][0]+m_o[1]*mat[1][1]+m_o[2]*n),
|
||||||
-(m_o[0]*m_u[0]+m_o[1]*m_u[1]+m_o[2]*m_u[2])));
|
-(m_o[0]*m_u[0]+m_o[1]*m_u[1]+m_o[2]*m_u[2])));
|
||||||
|
|
||||||
t.setBasis(mat);
|
t.setBasis(mat);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
SimdMatrix3x3 m;
|
SimdMatrix3x3 m;
|
||||||
|
|
||||||
m[0][0]=1.;
|
m[0][0]=1.;
|
||||||
m[1][0]=0.;
|
m[1][0]=0.;
|
||||||
m[2][0]=0.;
|
m[2][0]=0.;
|
||||||
|
|
||||||
m[0][1]=0.f;
|
m[0][1]=0.f;
|
||||||
m[1][1]=float(SimdSign(m_u[2]));
|
m[1][1]=float(SimdSign(m_u[2]));
|
||||||
m[2][1]=0.f;
|
m[2][1]=0.f;
|
||||||
|
|
||||||
m[0][2]=0.f;
|
m[0][2]=0.f;
|
||||||
m[1][2]=0.f;
|
m[1][2]=0.f;
|
||||||
m[2][2]=float(SimdSign(m_u[2]));
|
m[2][2]=float(SimdSign(m_u[2]));
|
||||||
|
|
||||||
t.setOrigin(SimdPoint3(
|
t.setOrigin(SimdPoint3(
|
||||||
-m_o[0],
|
-m_o[0],
|
||||||
-SimdSign(m_u[2])*m_o[1],
|
-SimdSign(m_u[2])*m_o[1],
|
||||||
-SimdSign(m_u[2])*m_o[2]
|
-SimdSign(m_u[2])*m_o[2]
|
||||||
));
|
));
|
||||||
t.setBasis(m);
|
t.setBasis(m);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//gives interpolated transform for time in [0..1] in screwing frame
|
//gives interpolated transform for time in [0..1] in screwing frame
|
||||||
SimdTransform BU_Screwing::InBetweenTransform(const SimdTransform& tr,SimdScalar t) const
|
SimdTransform BU_Screwing::InBetweenTransform(const SimdTransform& tr,SimdScalar t) const
|
||||||
{
|
{
|
||||||
SimdPoint3 org = tr.getOrigin();
|
SimdPoint3 org = tr.getOrigin();
|
||||||
|
|
||||||
SimdPoint3 neworg (
|
SimdPoint3 neworg (
|
||||||
org.x()*SimdCos(m_w*t)-org.y()*SimdSin(m_w*t),
|
org.x()*SimdCos(m_w*t)-org.y()*SimdSin(m_w*t),
|
||||||
org.x()*SimdSin(m_w*t)+org.y()*SimdCos(m_w*t),
|
org.x()*SimdSin(m_w*t)+org.y()*SimdCos(m_w*t),
|
||||||
org.z()+m_s*CalculateF(t));
|
org.z()+m_s*CalculateF(t));
|
||||||
|
|
||||||
SimdTransform newtr;
|
SimdTransform newtr;
|
||||||
newtr.setOrigin(neworg);
|
newtr.setOrigin(neworg);
|
||||||
SimdMatrix3x3 basis = tr.getBasis();
|
SimdMatrix3x3 basis = tr.getBasis();
|
||||||
SimdMatrix3x3 basisorg = tr.getBasis();
|
SimdMatrix3x3 basisorg = tr.getBasis();
|
||||||
|
|
||||||
SimdQuaternion rot(SimdVector3(0.,0.,1.),m_w*t);
|
SimdQuaternion rot(SimdVector3(0.,0.,1.),m_w*t);
|
||||||
SimdQuaternion tmpOrn;
|
SimdQuaternion tmpOrn;
|
||||||
tr.getBasis().getRotation(tmpOrn);
|
tr.getBasis().getRotation(tmpOrn);
|
||||||
rot = rot * tmpOrn;
|
rot = rot * tmpOrn;
|
||||||
|
|
||||||
//to avoid numerical drift, normalize quaternion
|
//to avoid numerical drift, normalize quaternion
|
||||||
rot.normalize();
|
rot.normalize();
|
||||||
newtr.setBasis(SimdMatrix3x3(rot));
|
newtr.setBasis(SimdMatrix3x3(rot));
|
||||||
return newtr;
|
return newtr;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SimdScalar BU_Screwing::CalculateF(SimdScalar t) const
|
SimdScalar BU_Screwing::CalculateF(SimdScalar t) const
|
||||||
{
|
{
|
||||||
SimdScalar result;
|
SimdScalar result;
|
||||||
if (!m_w)
|
if (!m_w)
|
||||||
{
|
{
|
||||||
result = t;
|
result = t;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
result = ( SimdTan((m_w*t)/2.f) / SimdTan(m_w/2.f));
|
result = ( SimdTan((m_w*t)/2.f) / SimdTan(m_w/2.f));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,77 +1,77 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef B_SCREWING_H
|
#ifndef B_SCREWING_H
|
||||||
#define B_SCREWING_H
|
#define B_SCREWING_H
|
||||||
|
|
||||||
|
|
||||||
#include <SimdVector3.h>
|
#include <SimdVector3.h>
|
||||||
#include <SimdPoint3.h>
|
#include <SimdPoint3.h>
|
||||||
#include <SimdTransform.h>
|
#include <SimdTransform.h>
|
||||||
|
|
||||||
|
|
||||||
#define SCREWEPSILON 0.00001f
|
#define SCREWEPSILON 0.00001f
|
||||||
|
|
||||||
///BU_Screwing implements screwing motion interpolation.
|
///BU_Screwing implements screwing motion interpolation.
|
||||||
class BU_Screwing
|
class BU_Screwing
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
BU_Screwing(const SimdVector3& relLinVel,const SimdVector3& relAngVel);
|
BU_Screwing(const SimdVector3& relLinVel,const SimdVector3& relAngVel);
|
||||||
|
|
||||||
~BU_Screwing() {
|
~BU_Screwing() {
|
||||||
};
|
};
|
||||||
|
|
||||||
SimdScalar CalculateF(SimdScalar t) const;
|
SimdScalar CalculateF(SimdScalar t) const;
|
||||||
//gives interpolated position for time in [0..1] in screwing frame
|
//gives interpolated position for time in [0..1] in screwing frame
|
||||||
|
|
||||||
inline SimdPoint3 InBetweenPosition(const SimdPoint3& pt,SimdScalar t) const
|
inline SimdPoint3 InBetweenPosition(const SimdPoint3& pt,SimdScalar t) const
|
||||||
{
|
{
|
||||||
return SimdPoint3(
|
return SimdPoint3(
|
||||||
pt.x()*SimdCos(m_w*t)-pt.y()*SimdSin(m_w*t),
|
pt.x()*SimdCos(m_w*t)-pt.y()*SimdSin(m_w*t),
|
||||||
pt.x()*SimdSin(m_w*t)+pt.y()*SimdCos(m_w*t),
|
pt.x()*SimdSin(m_w*t)+pt.y()*SimdCos(m_w*t),
|
||||||
pt.z()+m_s*CalculateF(t));
|
pt.z()+m_s*CalculateF(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline SimdVector3 InBetweenVector(const SimdVector3& vec,SimdScalar t) const
|
inline SimdVector3 InBetweenVector(const SimdVector3& vec,SimdScalar t) const
|
||||||
{
|
{
|
||||||
return SimdVector3(
|
return SimdVector3(
|
||||||
vec.x()*SimdCos(m_w*t)-vec.y()*SimdSin(m_w*t),
|
vec.x()*SimdCos(m_w*t)-vec.y()*SimdSin(m_w*t),
|
||||||
vec.x()*SimdSin(m_w*t)+vec.y()*SimdCos(m_w*t),
|
vec.x()*SimdSin(m_w*t)+vec.y()*SimdCos(m_w*t),
|
||||||
vec.z());
|
vec.z());
|
||||||
}
|
}
|
||||||
|
|
||||||
//gives interpolated transform for time in [0..1] in screwing frame
|
//gives interpolated transform for time in [0..1] in screwing frame
|
||||||
SimdTransform InBetweenTransform(const SimdTransform& tr,SimdScalar t) const;
|
SimdTransform InBetweenTransform(const SimdTransform& tr,SimdScalar t) const;
|
||||||
|
|
||||||
|
|
||||||
//gives matrix from global frame into screwing frame
|
//gives matrix from global frame into screwing frame
|
||||||
void LocalMatrix(SimdTransform &t) const;
|
void LocalMatrix(SimdTransform &t) const;
|
||||||
|
|
||||||
inline const SimdVector3& GetU() const { return m_u;}
|
inline const SimdVector3& GetU() const { return m_u;}
|
||||||
inline const SimdVector3& GetO() const {return m_o;}
|
inline const SimdVector3& GetO() const {return m_o;}
|
||||||
inline const SimdScalar GetS() const{ return m_s;}
|
inline const SimdScalar GetS() const{ return m_s;}
|
||||||
inline const SimdScalar GetW() const { return m_w;}
|
inline const SimdScalar GetW() const { return m_w;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float m_w;
|
float m_w;
|
||||||
float m_s;
|
float m_s;
|
||||||
SimdVector3 m_u;
|
SimdVector3 m_u;
|
||||||
SimdVector3 m_o;
|
SimdVector3 m_o;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //B_SCREWING_H
|
#endif //B_SCREWING_H
|
||||||
@@ -1,91 +1,91 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef BU_STATIC_MOTIONSTATE
|
#ifndef BU_STATIC_MOTIONSTATE
|
||||||
#define BU_STATIC_MOTIONSTATE
|
#define BU_STATIC_MOTIONSTATE
|
||||||
|
|
||||||
|
|
||||||
#include <CollisionShapes/BU_MotionStateInterface.h>
|
#include <CollisionShapes/BU_MotionStateInterface.h>
|
||||||
|
|
||||||
class BU_StaticMotionState :public BU_MotionStateInterface
|
class BU_StaticMotionState :public BU_MotionStateInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~BU_StaticMotionState(){};
|
virtual ~BU_StaticMotionState(){};
|
||||||
|
|
||||||
virtual void SetTransform(const SimdTransform& trans)
|
virtual void SetTransform(const SimdTransform& trans)
|
||||||
{
|
{
|
||||||
m_trans = trans;
|
m_trans = trans;
|
||||||
}
|
}
|
||||||
virtual void GetTransform(SimdTransform& trans) const
|
virtual void GetTransform(SimdTransform& trans) const
|
||||||
{
|
{
|
||||||
trans = m_trans;
|
trans = m_trans;
|
||||||
}
|
}
|
||||||
virtual void SetPosition(const SimdPoint3& position)
|
virtual void SetPosition(const SimdPoint3& position)
|
||||||
{
|
{
|
||||||
m_trans.setOrigin( position );
|
m_trans.setOrigin( position );
|
||||||
}
|
}
|
||||||
virtual void GetPosition(SimdPoint3& position) const
|
virtual void GetPosition(SimdPoint3& position) const
|
||||||
{
|
{
|
||||||
position = m_trans.getOrigin();
|
position = m_trans.getOrigin();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void SetOrientation(const SimdQuaternion& orientation)
|
virtual void SetOrientation(const SimdQuaternion& orientation)
|
||||||
{
|
{
|
||||||
m_trans.setRotation( orientation);
|
m_trans.setRotation( orientation);
|
||||||
}
|
}
|
||||||
virtual void GetOrientation(SimdQuaternion& orientation) const
|
virtual void GetOrientation(SimdQuaternion& orientation) const
|
||||||
{
|
{
|
||||||
orientation = m_trans.getRotation();
|
orientation = m_trans.getRotation();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void SetBasis(const SimdMatrix3x3& basis)
|
virtual void SetBasis(const SimdMatrix3x3& basis)
|
||||||
{
|
{
|
||||||
m_trans.setBasis( basis);
|
m_trans.setBasis( basis);
|
||||||
}
|
}
|
||||||
virtual void GetBasis(SimdMatrix3x3& basis) const
|
virtual void GetBasis(SimdMatrix3x3& basis) const
|
||||||
{
|
{
|
||||||
basis = m_trans.getBasis();
|
basis = m_trans.getBasis();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void SetLinearVelocity(const SimdVector3& linvel)
|
virtual void SetLinearVelocity(const SimdVector3& linvel)
|
||||||
{
|
{
|
||||||
m_linearVelocity = linvel;
|
m_linearVelocity = linvel;
|
||||||
}
|
}
|
||||||
virtual void GetLinearVelocity(SimdVector3& linvel) const
|
virtual void GetLinearVelocity(SimdVector3& linvel) const
|
||||||
{
|
{
|
||||||
linvel = m_linearVelocity;
|
linvel = m_linearVelocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void SetAngularVelocity(const SimdVector3& angvel)
|
virtual void SetAngularVelocity(const SimdVector3& angvel)
|
||||||
{
|
{
|
||||||
m_angularVelocity = angvel;
|
m_angularVelocity = angvel;
|
||||||
}
|
}
|
||||||
virtual void GetAngularVelocity(SimdVector3& angvel) const
|
virtual void GetAngularVelocity(SimdVector3& angvel) const
|
||||||
{
|
{
|
||||||
angvel = m_angularVelocity;
|
angvel = m_angularVelocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
SimdTransform m_trans;
|
SimdTransform m_trans;
|
||||||
SimdVector3 m_angularVelocity;
|
SimdVector3 m_angularVelocity;
|
||||||
SimdVector3 m_linearVelocity;
|
SimdVector3 m_linearVelocity;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //BU_STATIC_MOTIONSTATE
|
#endif //BU_STATIC_MOTIONSTATE
|
||||||
@@ -1,159 +1,159 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "BU_VertexPoly.h"
|
#include "BU_VertexPoly.h"
|
||||||
#include "BU_Screwing.h"
|
#include "BU_Screwing.h"
|
||||||
#include <SimdTransform.h>
|
#include <SimdTransform.h>
|
||||||
#include <SimdPoint3.h>
|
#include <SimdPoint3.h>
|
||||||
#include <SimdVector3.h>
|
#include <SimdVector3.h>
|
||||||
|
|
||||||
#define USE_ALGEBRAIC
|
#define USE_ALGEBRAIC
|
||||||
#ifdef USE_ALGEBRAIC
|
#ifdef USE_ALGEBRAIC
|
||||||
#include "BU_AlgebraicPolynomialSolver.h"
|
#include "BU_AlgebraicPolynomialSolver.h"
|
||||||
#define BU_Polynomial BU_AlgebraicPolynomialSolver
|
#define BU_Polynomial BU_AlgebraicPolynomialSolver
|
||||||
#else
|
#else
|
||||||
#include "BU_IntervalArithmeticPolynomialSolver.h"
|
#include "BU_IntervalArithmeticPolynomialSolver.h"
|
||||||
#define BU_Polynomial BU_IntervalArithmeticPolynomialSolver
|
#define BU_Polynomial BU_IntervalArithmeticPolynomialSolver
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline bool TestFuzzyZero(SimdScalar x) { return SimdFabs(x) < 0.0001f; }
|
inline bool TestFuzzyZero(SimdScalar x) { return SimdFabs(x) < 0.0001f; }
|
||||||
|
|
||||||
|
|
||||||
BU_VertexPoly::BU_VertexPoly()
|
BU_VertexPoly::BU_VertexPoly()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
//return true if a collision will occur between [0..1]
|
//return true if a collision will occur between [0..1]
|
||||||
//false otherwise. If true, minTime contains the time of impact
|
//false otherwise. If true, minTime contains the time of impact
|
||||||
bool BU_VertexPoly::GetTimeOfImpact(
|
bool BU_VertexPoly::GetTimeOfImpact(
|
||||||
const BU_Screwing& screwAB,
|
const BU_Screwing& screwAB,
|
||||||
const SimdPoint3& a,
|
const SimdPoint3& a,
|
||||||
const SimdVector4& planeEq,
|
const SimdVector4& planeEq,
|
||||||
SimdScalar &minTime,bool swapAB)
|
SimdScalar &minTime,bool swapAB)
|
||||||
{
|
{
|
||||||
|
|
||||||
bool hit = false;
|
bool hit = false;
|
||||||
|
|
||||||
// precondition: s=0 and w= 0 is catched by caller!
|
// precondition: s=0 and w= 0 is catched by caller!
|
||||||
if (TestFuzzyZero(screwAB.GetS()) &&
|
if (TestFuzzyZero(screwAB.GetS()) &&
|
||||||
TestFuzzyZero(screwAB.GetW()))
|
TestFuzzyZero(screwAB.GetW()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//case w<>0 and s<> 0
|
//case w<>0 and s<> 0
|
||||||
const SimdScalar w=screwAB.GetW();
|
const SimdScalar w=screwAB.GetW();
|
||||||
const SimdScalar s=screwAB.GetS();
|
const SimdScalar s=screwAB.GetS();
|
||||||
|
|
||||||
SimdScalar coefs[4];
|
SimdScalar coefs[4];
|
||||||
const SimdScalar p=planeEq[0];
|
const SimdScalar p=planeEq[0];
|
||||||
const SimdScalar q=planeEq[1];
|
const SimdScalar q=planeEq[1];
|
||||||
const SimdScalar r=planeEq[2];
|
const SimdScalar r=planeEq[2];
|
||||||
const SimdScalar d=planeEq[3];
|
const SimdScalar d=planeEq[3];
|
||||||
|
|
||||||
const SimdVector3 norm(p,q,r);
|
const SimdVector3 norm(p,q,r);
|
||||||
BU_Polynomial polynomialSolver;
|
BU_Polynomial polynomialSolver;
|
||||||
int numroots = 0;
|
int numroots = 0;
|
||||||
|
|
||||||
//SimdScalar eps=1e-80f;
|
//SimdScalar eps=1e-80f;
|
||||||
//SimdScalar eps2=1e-100f;
|
//SimdScalar eps2=1e-100f;
|
||||||
|
|
||||||
if (TestFuzzyZero(screwAB.GetS()) )
|
if (TestFuzzyZero(screwAB.GetS()) )
|
||||||
{
|
{
|
||||||
//S = 0 , W <> 0
|
//S = 0 , W <> 0
|
||||||
|
|
||||||
//ax^3+bx^2+cx+d=0
|
//ax^3+bx^2+cx+d=0
|
||||||
coefs[0]=0.;
|
coefs[0]=0.;
|
||||||
coefs[1]=(-p*a.x()-q*a.y()+r*a.z()-d);
|
coefs[1]=(-p*a.x()-q*a.y()+r*a.z()-d);
|
||||||
coefs[2]=-2*p*a.y()+2*q*a.x();
|
coefs[2]=-2*p*a.y()+2*q*a.x();
|
||||||
coefs[3]=p*a.x()+q*a.y()+r*a.z()-d;
|
coefs[3]=p*a.x()+q*a.y()+r*a.z()-d;
|
||||||
|
|
||||||
// numroots = polynomialSolver.Solve3Cubic(coefs[0],coefs[1],coefs[2],coefs[3]);
|
// numroots = polynomialSolver.Solve3Cubic(coefs[0],coefs[1],coefs[2],coefs[3]);
|
||||||
numroots = polynomialSolver.Solve2QuadraticFull(coefs[1],coefs[2],coefs[3]);
|
numroots = polynomialSolver.Solve2QuadraticFull(coefs[1],coefs[2],coefs[3]);
|
||||||
|
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
if (TestFuzzyZero(screwAB.GetW()))
|
if (TestFuzzyZero(screwAB.GetW()))
|
||||||
{
|
{
|
||||||
// W = 0 , S <> 0
|
// W = 0 , S <> 0
|
||||||
//pax+qay+r(az+st)=d
|
//pax+qay+r(az+st)=d
|
||||||
|
|
||||||
SimdScalar dist = (d - a.dot(norm));
|
SimdScalar dist = (d - a.dot(norm));
|
||||||
|
|
||||||
if (TestFuzzyZero(r))
|
if (TestFuzzyZero(r))
|
||||||
{
|
{
|
||||||
if (TestFuzzyZero(dist))
|
if (TestFuzzyZero(dist))
|
||||||
{
|
{
|
||||||
// no hit
|
// no hit
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// todo a a' might hit sides of polygon T
|
// todo a a' might hit sides of polygon T
|
||||||
//printf("unhandled case, w=0,s<>0,r<>0, a a' might hit sides of polygon T \n");
|
//printf("unhandled case, w=0,s<>0,r<>0, a a' might hit sides of polygon T \n");
|
||||||
}
|
}
|
||||||
|
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
SimdScalar etoi = (dist)/(r*screwAB.GetS());
|
SimdScalar etoi = (dist)/(r*screwAB.GetS());
|
||||||
if (swapAB)
|
if (swapAB)
|
||||||
etoi *= -1;
|
etoi *= -1;
|
||||||
|
|
||||||
if (etoi >= 0. && etoi <= minTime)
|
if (etoi >= 0. && etoi <= minTime)
|
||||||
{
|
{
|
||||||
minTime = etoi;
|
minTime = etoi;
|
||||||
hit = true;
|
hit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
//ax^3+bx^2+cx+d=0
|
//ax^3+bx^2+cx+d=0
|
||||||
|
|
||||||
//degenerate coefficients mess things up :(
|
//degenerate coefficients mess things up :(
|
||||||
SimdScalar ietsje = (r*s)/SimdTan(w/2.f);
|
SimdScalar ietsje = (r*s)/SimdTan(w/2.f);
|
||||||
if (ietsje*ietsje < 0.01f)
|
if (ietsje*ietsje < 0.01f)
|
||||||
ietsje = 0.f;
|
ietsje = 0.f;
|
||||||
|
|
||||||
coefs[0]=ietsje;//(r*s)/tan(w/2.);
|
coefs[0]=ietsje;//(r*s)/tan(w/2.);
|
||||||
coefs[1]=(-p*a.x()-q*a.y()+r*a.z()-d);
|
coefs[1]=(-p*a.x()-q*a.y()+r*a.z()-d);
|
||||||
coefs[2]=-2.f*p*a.y()+2.f*q*a.x()+ietsje;//((r*s)/(tan(w/2.)));
|
coefs[2]=-2.f*p*a.y()+2.f*q*a.x()+ietsje;//((r*s)/(tan(w/2.)));
|
||||||
coefs[3]=p*a.x()+q*a.y()+r*a.z()-d;
|
coefs[3]=p*a.x()+q*a.y()+r*a.z()-d;
|
||||||
|
|
||||||
numroots = polynomialSolver.Solve3Cubic(coefs[0],coefs[1],coefs[2],coefs[3]);
|
numroots = polynomialSolver.Solve3Cubic(coefs[0],coefs[1],coefs[2],coefs[3]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (int i=0;i<numroots;i++)
|
for (int i=0;i<numroots;i++)
|
||||||
{
|
{
|
||||||
SimdScalar tau = polynomialSolver.GetRoot(i);
|
SimdScalar tau = polynomialSolver.GetRoot(i);
|
||||||
|
|
||||||
SimdScalar t = 2.f*SimdAtan(tau)/w;
|
SimdScalar t = 2.f*SimdAtan(tau)/w;
|
||||||
//tau = tan (wt/2) so 2*atan (tau)/w
|
//tau = tan (wt/2) so 2*atan (tau)/w
|
||||||
if (swapAB)
|
if (swapAB)
|
||||||
{
|
{
|
||||||
t *= -1.;
|
t *= -1.;
|
||||||
}
|
}
|
||||||
if (t>=0 && t<minTime)
|
if (t>=0 && t<minTime)
|
||||||
{
|
{
|
||||||
minTime = t;
|
minTime = t;
|
||||||
hit = true;
|
hit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return hit;
|
return hit;
|
||||||
}
|
}
|
||||||
@@ -1,43 +1,43 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef VERTEX_POLY_H
|
#ifndef VERTEX_POLY_H
|
||||||
#define VERTEX_POLY_H
|
#define VERTEX_POLY_H
|
||||||
|
|
||||||
|
|
||||||
class BU_Screwing;
|
class BU_Screwing;
|
||||||
#include <SimdTransform.h>
|
#include <SimdTransform.h>
|
||||||
#include <SimdPoint3.h>
|
#include <SimdPoint3.h>
|
||||||
#include <SimdScalar.h>
|
#include <SimdScalar.h>
|
||||||
|
|
||||||
///BU_VertexPoly implements algebraic time of impact calculation between vertex and a plane.
|
///BU_VertexPoly implements algebraic time of impact calculation between vertex and a plane.
|
||||||
class BU_VertexPoly
|
class BU_VertexPoly
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BU_VertexPoly();
|
BU_VertexPoly();
|
||||||
bool GetTimeOfImpact(
|
bool GetTimeOfImpact(
|
||||||
const BU_Screwing& screwAB,
|
const BU_Screwing& screwAB,
|
||||||
const SimdPoint3& vtx,
|
const SimdPoint3& vtx,
|
||||||
const SimdVector4& planeEq,
|
const SimdVector4& planeEq,
|
||||||
SimdScalar &minTime,
|
SimdScalar &minTime,
|
||||||
bool swapAB);
|
bool swapAB);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
//cached data (frame coherency etc.) here
|
//cached data (frame coherency etc.) here
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif //VERTEX_POLY_H
|
#endif //VERTEX_POLY_H
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,66 +1,66 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef EPA_H
|
#ifndef EPA_H
|
||||||
#define EPA_H
|
#define EPA_H
|
||||||
|
|
||||||
#define EPA_MAX_FACE_ENTRIES 256
|
#define EPA_MAX_FACE_ENTRIES 256
|
||||||
|
|
||||||
extern const SimdScalar EPA_MAX_RELATIVE_ERROR;
|
extern const SimdScalar EPA_MAX_RELATIVE_ERROR;
|
||||||
extern const SimdScalar EPA_MAX_RELATIVE_ERROR_SQRD;
|
extern const SimdScalar EPA_MAX_RELATIVE_ERROR_SQRD;
|
||||||
|
|
||||||
class Epa
|
class Epa
|
||||||
{
|
{
|
||||||
private :
|
private :
|
||||||
|
|
||||||
//! Prevents copying objects from this class
|
//! Prevents copying objects from this class
|
||||||
Epa( const Epa& epa );
|
Epa( const Epa& epa );
|
||||||
const Epa& operator = ( const Epa& epa );
|
const Epa& operator = ( const Epa& epa );
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
Epa( ConvexShape* pConvexShapeA, ConvexShape* pConvexShapeB,
|
Epa( ConvexShape* pConvexShapeA, ConvexShape* pConvexShapeB,
|
||||||
const SimdTransform& transformA, const SimdTransform& transformB );
|
const SimdTransform& transformA, const SimdTransform& transformB );
|
||||||
~Epa();
|
~Epa();
|
||||||
|
|
||||||
bool Initialize( SimplexSolverInterface& simplexSolver );
|
bool Initialize( SimplexSolverInterface& simplexSolver );
|
||||||
|
|
||||||
SimdScalar CalcPenDepth( SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB );
|
SimdScalar CalcPenDepth( SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB );
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
bool TetrahedronContainsOrigin( SimdPoint3* pPoints );
|
bool TetrahedronContainsOrigin( SimdPoint3* pPoints );
|
||||||
bool TetrahedronContainsOrigin( const SimdPoint3& point0, const SimdPoint3& point1,
|
bool TetrahedronContainsOrigin( const SimdPoint3& point0, const SimdPoint3& point1,
|
||||||
const SimdPoint3& point2, const SimdPoint3& point3 );
|
const SimdPoint3& point2, const SimdPoint3& point3 );
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
//! Priority queue
|
//! Priority queue
|
||||||
std::vector< EpaFace* > m_faceEntries;
|
std::vector< EpaFace* > m_faceEntries;
|
||||||
|
|
||||||
ConvexShape* m_pConvexShapeA;
|
ConvexShape* m_pConvexShapeA;
|
||||||
ConvexShape* m_pConvexShapeB;
|
ConvexShape* m_pConvexShapeB;
|
||||||
|
|
||||||
SimdTransform m_transformA;
|
SimdTransform m_transformA;
|
||||||
SimdTransform m_transformB;
|
SimdTransform m_transformB;
|
||||||
|
|
||||||
EpaPolyhedron m_polyhedron;
|
EpaPolyhedron m_polyhedron;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern bool CompareEpaFaceEntries( EpaFace* pFaceA, EpaFace* pFaceB );
|
extern bool CompareEpaFaceEntries( EpaFace* pFaceA, EpaFace* pFaceB );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1,25 +1,25 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef EPA_COMMON_H
|
#ifndef EPA_COMMON_H
|
||||||
#define EPA_COMMON_H
|
#define EPA_COMMON_H
|
||||||
|
|
||||||
#define EPA_POLYHEDRON_USE_PLANES
|
#define EPA_POLYHEDRON_USE_PLANES
|
||||||
|
|
||||||
//#define EPA_USE_HYBRID
|
//#define EPA_USE_HYBRID
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1,254 +1,254 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#include "SimdScalar.h"
|
#include "SimdScalar.h"
|
||||||
#include "SimdVector3.h"
|
#include "SimdVector3.h"
|
||||||
#include "SimdPoint3.h"
|
#include "SimdPoint3.h"
|
||||||
|
|
||||||
#include "NarrowPhaseCollision/EpaCommon.h"
|
#include "NarrowPhaseCollision/EpaCommon.h"
|
||||||
|
|
||||||
#include "NarrowPhaseCollision/EpaVertex.h"
|
#include "NarrowPhaseCollision/EpaVertex.h"
|
||||||
#include "NarrowPhaseCollision/EpaHalfEdge.h"
|
#include "NarrowPhaseCollision/EpaHalfEdge.h"
|
||||||
#include "NarrowPhaseCollision/EpaFace.h"
|
#include "NarrowPhaseCollision/EpaFace.h"
|
||||||
|
|
||||||
#ifdef EPA_POLYHEDRON_USE_PLANES
|
#ifdef EPA_POLYHEDRON_USE_PLANES
|
||||||
SimdScalar PLANE_THICKNESS = 1e-5f;
|
SimdScalar PLANE_THICKNESS = 1e-5f;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EpaFace::EpaFace() : m_pHalfEdge( 0 ), m_deleted( false )
|
EpaFace::EpaFace() : m_pHalfEdge( 0 ), m_deleted( false )
|
||||||
{
|
{
|
||||||
m_pVertices[ 0 ] = m_pVertices[ 1 ] = m_pVertices[ 2 ] = 0;
|
m_pVertices[ 0 ] = m_pVertices[ 1 ] = m_pVertices[ 2 ] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EpaFace::~EpaFace()
|
EpaFace::~EpaFace()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EpaFace::Initialize()
|
bool EpaFace::Initialize()
|
||||||
{
|
{
|
||||||
assert( m_pHalfEdge && "Must setup half-edge first!" );
|
assert( m_pHalfEdge && "Must setup half-edge first!" );
|
||||||
|
|
||||||
CollectVertices( m_pVertices );
|
CollectVertices( m_pVertices );
|
||||||
|
|
||||||
const SimdVector3 e0 = m_pVertices[ 1 ]->m_point - m_pVertices[ 0 ]->m_point;
|
const SimdVector3 e0 = m_pVertices[ 1 ]->m_point - m_pVertices[ 0 ]->m_point;
|
||||||
const SimdVector3 e1 = m_pVertices[ 2 ]->m_point - m_pVertices[ 0 ]->m_point;
|
const SimdVector3 e1 = m_pVertices[ 2 ]->m_point - m_pVertices[ 0 ]->m_point;
|
||||||
|
|
||||||
const SimdScalar e0Sqrd = e0.length2();
|
const SimdScalar e0Sqrd = e0.length2();
|
||||||
const SimdScalar e1Sqrd = e1.length2();
|
const SimdScalar e1Sqrd = e1.length2();
|
||||||
const SimdScalar e0e1 = e0.dot( e1 );
|
const SimdScalar e0e1 = e0.dot( e1 );
|
||||||
|
|
||||||
m_determinant = e0Sqrd * e1Sqrd - e0e1 * e0e1;
|
m_determinant = e0Sqrd * e1Sqrd - e0e1 * e0e1;
|
||||||
|
|
||||||
const SimdScalar e0v0 = e0.dot( m_pVertices[ 0 ]->m_point );
|
const SimdScalar e0v0 = e0.dot( m_pVertices[ 0 ]->m_point );
|
||||||
const SimdScalar e1v0 = e1.dot( m_pVertices[ 0 ]->m_point );
|
const SimdScalar e1v0 = e1.dot( m_pVertices[ 0 ]->m_point );
|
||||||
|
|
||||||
m_lambdas[ 0 ] = e0e1 * e1v0 - e1Sqrd * e0v0;
|
m_lambdas[ 0 ] = e0e1 * e1v0 - e1Sqrd * e0v0;
|
||||||
m_lambdas[ 1 ] = e0e1 * e0v0 - e0Sqrd * e1v0;
|
m_lambdas[ 1 ] = e0e1 * e0v0 - e0Sqrd * e1v0;
|
||||||
|
|
||||||
if ( IsAffinelyDependent() )
|
if ( IsAffinelyDependent() )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CalcClosestPoint();
|
CalcClosestPoint();
|
||||||
|
|
||||||
#ifdef EPA_POLYHEDRON_USE_PLANES
|
#ifdef EPA_POLYHEDRON_USE_PLANES
|
||||||
if ( !CalculatePlane() )
|
if ( !CalculatePlane() )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EPA_POLYHEDRON_USE_PLANES
|
#ifdef EPA_POLYHEDRON_USE_PLANES
|
||||||
bool EpaFace::CalculatePlane()
|
bool EpaFace::CalculatePlane()
|
||||||
{
|
{
|
||||||
assert( ( m_pVertices[ 0 ] && m_pVertices[ 1 ] && m_pVertices[ 2 ] )
|
assert( ( m_pVertices[ 0 ] && m_pVertices[ 1 ] && m_pVertices[ 2 ] )
|
||||||
&& "Must setup vertices pointers first!" );
|
&& "Must setup vertices pointers first!" );
|
||||||
|
|
||||||
// Traditional method
|
// Traditional method
|
||||||
|
|
||||||
const SimdVector3 v1 = m_pVertices[ 1 ]->m_point - m_pVertices[ 0 ]->m_point;
|
const SimdVector3 v1 = m_pVertices[ 1 ]->m_point - m_pVertices[ 0 ]->m_point;
|
||||||
const SimdVector3 v2 = m_pVertices[ 2 ]->m_point - m_pVertices[ 0 ]->m_point;
|
const SimdVector3 v2 = m_pVertices[ 2 ]->m_point - m_pVertices[ 0 ]->m_point;
|
||||||
|
|
||||||
m_planeNormal = v2.cross( v1 );
|
m_planeNormal = v2.cross( v1 );
|
||||||
|
|
||||||
if ( m_planeNormal.length2() == 0 )
|
if ( m_planeNormal.length2() == 0 )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_planeNormal.normalize();
|
m_planeNormal.normalize();
|
||||||
|
|
||||||
m_planeDistance = m_pVertices[ 0 ]->m_point.dot( -m_planeNormal );
|
m_planeDistance = m_pVertices[ 0 ]->m_point.dot( -m_planeNormal );
|
||||||
|
|
||||||
// Robust method
|
// Robust method
|
||||||
|
|
||||||
//SimdVector3 _v1 = m_pVertices[ 1 ]->m_point - m_pVertices[ 0 ]->m_point;
|
//SimdVector3 _v1 = m_pVertices[ 1 ]->m_point - m_pVertices[ 0 ]->m_point;
|
||||||
//SimdVector3 _v2 = m_pVertices[ 2 ]->m_point - m_pVertices[ 0 ]->m_point;
|
//SimdVector3 _v2 = m_pVertices[ 2 ]->m_point - m_pVertices[ 0 ]->m_point;
|
||||||
|
|
||||||
//SimdVector3 n;
|
//SimdVector3 n;
|
||||||
|
|
||||||
//n = _v2.cross( _v1 );
|
//n = _v2.cross( _v1 );
|
||||||
|
|
||||||
//_v1 = m_pVertices[ 0 ]->m_point - m_pVertices[ 1 ]->m_point;
|
//_v1 = m_pVertices[ 0 ]->m_point - m_pVertices[ 1 ]->m_point;
|
||||||
//_v2 = m_pVertices[ 2 ]->m_point - m_pVertices[ 1 ]->m_point;
|
//_v2 = m_pVertices[ 2 ]->m_point - m_pVertices[ 1 ]->m_point;
|
||||||
|
|
||||||
//n += ( _v1.cross( _v2 ) );
|
//n += ( _v1.cross( _v2 ) );
|
||||||
|
|
||||||
//_v1 = m_pVertices[ 0 ]->m_point - m_pVertices[ 2 ]->m_point;
|
//_v1 = m_pVertices[ 0 ]->m_point - m_pVertices[ 2 ]->m_point;
|
||||||
//_v2 = m_pVertices[ 1 ]->m_point - m_pVertices[ 2 ]->m_point;
|
//_v2 = m_pVertices[ 1 ]->m_point - m_pVertices[ 2 ]->m_point;
|
||||||
|
|
||||||
//n += ( _v2.cross( _v1 ) );
|
//n += ( _v2.cross( _v1 ) );
|
||||||
|
|
||||||
//n /= 3;
|
//n /= 3;
|
||||||
//n.normalize();
|
//n.normalize();
|
||||||
|
|
||||||
//SimdVector3 c = ( m_pVertices[ 0 ]->m_point + m_pVertices[ 1 ]->m_point + m_pVertices[ 2 ]->m_point ) / 3;
|
//SimdVector3 c = ( m_pVertices[ 0 ]->m_point + m_pVertices[ 1 ]->m_point + m_pVertices[ 2 ]->m_point ) / 3;
|
||||||
//SimdScalar d = c.dot( -n );
|
//SimdScalar d = c.dot( -n );
|
||||||
|
|
||||||
//m_robustPlaneNormal = n;
|
//m_robustPlaneNormal = n;
|
||||||
//m_robustPlaneDistance = d;
|
//m_robustPlaneDistance = d;
|
||||||
|
|
||||||
// Compare results from both methods and check whether they disagree
|
// Compare results from both methods and check whether they disagree
|
||||||
|
|
||||||
//if ( d < 0 )
|
//if ( d < 0 )
|
||||||
//{
|
//{
|
||||||
// assert( ( m_planeDistance < 0 ) && "He he! Busted!" );
|
// assert( ( m_planeDistance < 0 ) && "He he! Busted!" );
|
||||||
//}
|
//}
|
||||||
//else
|
//else
|
||||||
//{
|
//{
|
||||||
// assert( ( m_planeDistance >= 0 ) && "He he! Busted!" );
|
// assert( ( m_planeDistance >= 0 ) && "He he! Busted!" );
|
||||||
//}
|
//}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void EpaFace::CalcClosestPoint()
|
void EpaFace::CalcClosestPoint()
|
||||||
{
|
{
|
||||||
const SimdVector3 e0 = m_pVertices[ 1 ]->m_point - m_pVertices[ 0 ]->m_point;
|
const SimdVector3 e0 = m_pVertices[ 1 ]->m_point - m_pVertices[ 0 ]->m_point;
|
||||||
const SimdVector3 e1 = m_pVertices[ 2 ]->m_point - m_pVertices[ 0 ]->m_point;
|
const SimdVector3 e1 = m_pVertices[ 2 ]->m_point - m_pVertices[ 0 ]->m_point;
|
||||||
|
|
||||||
m_v = m_pVertices[ 0 ]->m_point +
|
m_v = m_pVertices[ 0 ]->m_point +
|
||||||
( e0 * m_lambdas[ 0 ] + e1 * m_lambdas[ 1 ] ) / m_determinant;
|
( e0 * m_lambdas[ 0 ] + e1 * m_lambdas[ 1 ] ) / m_determinant;
|
||||||
|
|
||||||
m_vSqrd = m_v.length2();
|
m_vSqrd = m_v.length2();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EpaFace::CalcClosestPointOnA( SimdVector3& closestPointOnA )
|
void EpaFace::CalcClosestPointOnA( SimdVector3& closestPointOnA )
|
||||||
{
|
{
|
||||||
const SimdVector3 e0 = m_pVertices[ 1 ]->m_wSupportPointOnA - m_pVertices[ 0 ]->m_wSupportPointOnA;
|
const SimdVector3 e0 = m_pVertices[ 1 ]->m_wSupportPointOnA - m_pVertices[ 0 ]->m_wSupportPointOnA;
|
||||||
const SimdVector3 e1 = m_pVertices[ 2 ]->m_wSupportPointOnA - m_pVertices[ 0 ]->m_wSupportPointOnA;
|
const SimdVector3 e1 = m_pVertices[ 2 ]->m_wSupportPointOnA - m_pVertices[ 0 ]->m_wSupportPointOnA;
|
||||||
|
|
||||||
closestPointOnA = m_pVertices[ 0 ]->m_wSupportPointOnA +
|
closestPointOnA = m_pVertices[ 0 ]->m_wSupportPointOnA +
|
||||||
( e0 * m_lambdas[ 0 ] + e1 * m_lambdas[ 1 ] ) /
|
( e0 * m_lambdas[ 0 ] + e1 * m_lambdas[ 1 ] ) /
|
||||||
m_determinant;
|
m_determinant;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EpaFace::CalcClosestPointOnB( SimdVector3& closestPointOnB )
|
void EpaFace::CalcClosestPointOnB( SimdVector3& closestPointOnB )
|
||||||
{
|
{
|
||||||
const SimdVector3 e0 = m_pVertices[ 1 ]->m_wSupportPointOnB - m_pVertices[ 0 ]->m_wSupportPointOnB;
|
const SimdVector3 e0 = m_pVertices[ 1 ]->m_wSupportPointOnB - m_pVertices[ 0 ]->m_wSupportPointOnB;
|
||||||
const SimdVector3 e1 = m_pVertices[ 2 ]->m_wSupportPointOnB - m_pVertices[ 0 ]->m_wSupportPointOnB;
|
const SimdVector3 e1 = m_pVertices[ 2 ]->m_wSupportPointOnB - m_pVertices[ 0 ]->m_wSupportPointOnB;
|
||||||
|
|
||||||
closestPointOnB = m_pVertices[ 0 ]->m_wSupportPointOnB +
|
closestPointOnB = m_pVertices[ 0 ]->m_wSupportPointOnB +
|
||||||
( e0 * m_lambdas[ 0 ] + e1 * m_lambdas[ 1 ] ) /
|
( e0 * m_lambdas[ 0 ] + e1 * m_lambdas[ 1 ] ) /
|
||||||
m_determinant;
|
m_determinant;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EpaFace::IsAffinelyDependent() const
|
bool EpaFace::IsAffinelyDependent() const
|
||||||
{
|
{
|
||||||
return ( m_determinant <= SIMD_EPSILON );
|
return ( m_determinant <= SIMD_EPSILON );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EpaFace::IsClosestPointInternal() const
|
bool EpaFace::IsClosestPointInternal() const
|
||||||
{
|
{
|
||||||
return ( ( m_lambdas[ 0 ] >= 0 ) && ( m_lambdas[ 1 ] >= 0 ) && ( ( m_lambdas[ 0 ] + m_lambdas[ 1 ] <= m_determinant ) ) );
|
return ( ( m_lambdas[ 0 ] >= 0 ) && ( m_lambdas[ 1 ] >= 0 ) && ( ( m_lambdas[ 0 ] + m_lambdas[ 1 ] <= m_determinant ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void EpaFace::CollectVertices( EpaVertex** ppVertices )
|
void EpaFace::CollectVertices( EpaVertex** ppVertices )
|
||||||
{
|
{
|
||||||
assert( m_pHalfEdge && "Invalid half-edge pointer!" );
|
assert( m_pHalfEdge && "Invalid half-edge pointer!" );
|
||||||
|
|
||||||
int vertexIndex = 0;
|
int vertexIndex = 0;
|
||||||
|
|
||||||
EpaHalfEdge* pCurrentHalfEdge = m_pHalfEdge;
|
EpaHalfEdge* pCurrentHalfEdge = m_pHalfEdge;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
assert( ( ( vertexIndex >= 0 ) && ( vertexIndex < 3 ) ) &&
|
assert( ( ( vertexIndex >= 0 ) && ( vertexIndex < 3 ) ) &&
|
||||||
"Face is not a triangle!" );
|
"Face is not a triangle!" );
|
||||||
|
|
||||||
assert( pCurrentHalfEdge->m_pVertex && "Half-edge has an invalid vertex pointer!" );
|
assert( pCurrentHalfEdge->m_pVertex && "Half-edge has an invalid vertex pointer!" );
|
||||||
|
|
||||||
ppVertices[ vertexIndex++ ] = pCurrentHalfEdge->m_pVertex;
|
ppVertices[ vertexIndex++ ] = pCurrentHalfEdge->m_pVertex;
|
||||||
|
|
||||||
pCurrentHalfEdge = pCurrentHalfEdge->m_pNextCCW;
|
pCurrentHalfEdge = pCurrentHalfEdge->m_pNextCCW;
|
||||||
|
|
||||||
}
|
}
|
||||||
while( pCurrentHalfEdge != m_pHalfEdge );
|
while( pCurrentHalfEdge != m_pHalfEdge );
|
||||||
}
|
}
|
||||||
|
|
||||||
//void EpaFace::FixOrder()
|
//void EpaFace::FixOrder()
|
||||||
//{
|
//{
|
||||||
// EpaHalfEdge* pHalfEdges[ 3 ];
|
// EpaHalfEdge* pHalfEdges[ 3 ];
|
||||||
//
|
//
|
||||||
// int halfEdgeIndex = 0;
|
// int halfEdgeIndex = 0;
|
||||||
//
|
//
|
||||||
// EpaHalfEdge* pCurrentHalfEdge = m_pHalfEdge;
|
// EpaHalfEdge* pCurrentHalfEdge = m_pHalfEdge;
|
||||||
//
|
//
|
||||||
// do
|
// do
|
||||||
// {
|
// {
|
||||||
// assert( ( ( halfEdgeIndex >= 0 ) && ( halfEdgeIndex < 3 ) ) &&
|
// assert( ( ( halfEdgeIndex >= 0 ) && ( halfEdgeIndex < 3 ) ) &&
|
||||||
// "Face is not a triangle!" );
|
// "Face is not a triangle!" );
|
||||||
//
|
//
|
||||||
// pHalfEdges[ halfEdgeIndex++ ] = pCurrentHalfEdge;
|
// pHalfEdges[ halfEdgeIndex++ ] = pCurrentHalfEdge;
|
||||||
//
|
//
|
||||||
// pCurrentHalfEdge = pCurrentHalfEdge->m_pNextCCW;
|
// pCurrentHalfEdge = pCurrentHalfEdge->m_pNextCCW;
|
||||||
// }
|
// }
|
||||||
// while( pCurrentHalfEdge != m_pHalfEdge );
|
// while( pCurrentHalfEdge != m_pHalfEdge );
|
||||||
//
|
//
|
||||||
// EpaVertex* pVertices[ 3 ] = { pHalfEdges[ 0 ]->m_pVertex,
|
// EpaVertex* pVertices[ 3 ] = { pHalfEdges[ 0 ]->m_pVertex,
|
||||||
// pHalfEdges[ 1 ]->m_pVertex,
|
// pHalfEdges[ 1 ]->m_pVertex,
|
||||||
// pHalfEdges[ 2 ]->m_pVertex };
|
// pHalfEdges[ 2 ]->m_pVertex };
|
||||||
//
|
//
|
||||||
// // Make them run in the opposite direction
|
// // Make them run in the opposite direction
|
||||||
// pHalfEdges[ 0 ]->m_pNextCCW = pHalfEdges[ 2 ];
|
// pHalfEdges[ 0 ]->m_pNextCCW = pHalfEdges[ 2 ];
|
||||||
// pHalfEdges[ 1 ]->m_pNextCCW = pHalfEdges[ 0 ];
|
// pHalfEdges[ 1 ]->m_pNextCCW = pHalfEdges[ 0 ];
|
||||||
// pHalfEdges[ 2 ]->m_pNextCCW = pHalfEdges[ 1 ];
|
// pHalfEdges[ 2 ]->m_pNextCCW = pHalfEdges[ 1 ];
|
||||||
//
|
//
|
||||||
// // Make half-edges point to their correct origin vertices
|
// // Make half-edges point to their correct origin vertices
|
||||||
//
|
//
|
||||||
// pHalfEdges[ 1 ]->m_pVertex = pVertices[ 2 ];
|
// pHalfEdges[ 1 ]->m_pVertex = pVertices[ 2 ];
|
||||||
// pHalfEdges[ 2 ]->m_pVertex = pVertices[ 0 ];
|
// pHalfEdges[ 2 ]->m_pVertex = pVertices[ 0 ];
|
||||||
// pHalfEdges[ 0 ]->m_pVertex = pVertices[ 1 ];
|
// pHalfEdges[ 0 ]->m_pVertex = pVertices[ 1 ];
|
||||||
//
|
//
|
||||||
// // Make vertices point to the correct half-edges
|
// // Make vertices point to the correct half-edges
|
||||||
//
|
//
|
||||||
// //pHalfEdges[ 0 ]->m_pVertex->m_pHalfEdge = pHalfEdges[ 0 ];
|
// //pHalfEdges[ 0 ]->m_pVertex->m_pHalfEdge = pHalfEdges[ 0 ];
|
||||||
// //pHalfEdges[ 1 ]->m_pVertex->m_pHalfEdge = pHalfEdges[ 1 ];
|
// //pHalfEdges[ 1 ]->m_pVertex->m_pHalfEdge = pHalfEdges[ 1 ];
|
||||||
// //pHalfEdges[ 2 ]->m_pVertex->m_pHalfEdge = pHalfEdges[ 2 ];
|
// //pHalfEdges[ 2 ]->m_pVertex->m_pHalfEdge = pHalfEdges[ 2 ];
|
||||||
//
|
//
|
||||||
// // Flip normal and change the sign of plane distance
|
// // Flip normal and change the sign of plane distance
|
||||||
//
|
//
|
||||||
//#ifdef EPA_POLYHEDRON_USE_PLANES
|
//#ifdef EPA_POLYHEDRON_USE_PLANES
|
||||||
// m_planeNormal = -m_planeNormal;
|
// m_planeNormal = -m_planeNormal;
|
||||||
// m_planeDistance = -m_planeDistance;
|
// m_planeDistance = -m_planeDistance;
|
||||||
//#endif
|
//#endif
|
||||||
//}
|
//}
|
||||||
|
|
||||||
@@ -1,83 +1,83 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef EPA_FACE_H
|
#ifndef EPA_FACE_H
|
||||||
#define EPA_FACE_H
|
#define EPA_FACE_H
|
||||||
|
|
||||||
class EpaVertex;
|
class EpaVertex;
|
||||||
class EpaHalfEdge;
|
class EpaHalfEdge;
|
||||||
|
|
||||||
#ifdef EPA_POLYHEDRON_USE_PLANES
|
#ifdef EPA_POLYHEDRON_USE_PLANES
|
||||||
extern SimdScalar PLANE_THICKNESS;
|
extern SimdScalar PLANE_THICKNESS;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! Note : This class is not supposed to be a base class
|
//! Note : This class is not supposed to be a base class
|
||||||
class EpaFace
|
class EpaFace
|
||||||
{
|
{
|
||||||
private :
|
private :
|
||||||
|
|
||||||
//! Prevents copying objects from this class
|
//! Prevents copying objects from this class
|
||||||
EpaFace( const EpaFace& epaFace );
|
EpaFace( const EpaFace& epaFace );
|
||||||
const EpaFace& operator = ( const EpaFace& epaFace );
|
const EpaFace& operator = ( const EpaFace& epaFace );
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
EpaFace();
|
EpaFace();
|
||||||
~EpaFace();
|
~EpaFace();
|
||||||
|
|
||||||
bool Initialize();
|
bool Initialize();
|
||||||
|
|
||||||
#ifdef EPA_POLYHEDRON_USE_PLANES
|
#ifdef EPA_POLYHEDRON_USE_PLANES
|
||||||
bool CalculatePlane();
|
bool CalculatePlane();
|
||||||
#endif
|
#endif
|
||||||
void CalcClosestPoint();
|
void CalcClosestPoint();
|
||||||
void CalcClosestPointOnA( SimdVector3& closestPointOnA );
|
void CalcClosestPointOnA( SimdVector3& closestPointOnA );
|
||||||
void CalcClosestPointOnB( SimdVector3& closestPointOnB );
|
void CalcClosestPointOnB( SimdVector3& closestPointOnB );
|
||||||
|
|
||||||
bool IsAffinelyDependent() const;
|
bool IsAffinelyDependent() const;
|
||||||
bool IsClosestPointInternal() const;
|
bool IsClosestPointInternal() const;
|
||||||
|
|
||||||
void CollectVertices( EpaVertex** ppVertices );
|
void CollectVertices( EpaVertex** ppVertices );
|
||||||
|
|
||||||
//void FixOrder();
|
//void FixOrder();
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
EpaHalfEdge* m_pHalfEdge;
|
EpaHalfEdge* m_pHalfEdge;
|
||||||
|
|
||||||
// We keep vertices here so we don't need to call CollectVertices
|
// We keep vertices here so we don't need to call CollectVertices
|
||||||
// every time we need them
|
// every time we need them
|
||||||
EpaVertex* m_pVertices[ 3 ];
|
EpaVertex* m_pVertices[ 3 ];
|
||||||
|
|
||||||
#ifdef EPA_POLYHEDRON_USE_PLANES
|
#ifdef EPA_POLYHEDRON_USE_PLANES
|
||||||
SimdVector3 m_planeNormal;
|
SimdVector3 m_planeNormal;
|
||||||
SimdScalar m_planeDistance;
|
SimdScalar m_planeDistance;
|
||||||
|
|
||||||
//SimdVector3 m_robustPlaneNormal;
|
//SimdVector3 m_robustPlaneNormal;
|
||||||
//SimdScalar m_robustPlaneDistance;
|
//SimdScalar m_robustPlaneDistance;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SimdVector3 m_v;
|
SimdVector3 m_v;
|
||||||
SimdScalar m_vSqrd;
|
SimdScalar m_vSqrd;
|
||||||
|
|
||||||
SimdScalar m_determinant;
|
SimdScalar m_determinant;
|
||||||
SimdScalar m_lambdas[ 2 ];
|
SimdScalar m_lambdas[ 2 ];
|
||||||
|
|
||||||
bool m_deleted;
|
bool m_deleted;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1,58 +1,58 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef EPA_HALF_EDGE_H
|
#ifndef EPA_HALF_EDGE_H
|
||||||
#define EPA_HALF_EDGE_H
|
#define EPA_HALF_EDGE_H
|
||||||
|
|
||||||
class EpaFace;
|
class EpaFace;
|
||||||
class EpaVertex;
|
class EpaVertex;
|
||||||
|
|
||||||
//! Note : This class is not supposed to be a base class
|
//! Note : This class is not supposed to be a base class
|
||||||
class EpaHalfEdge
|
class EpaHalfEdge
|
||||||
{
|
{
|
||||||
private :
|
private :
|
||||||
|
|
||||||
//! Prevents copying objects from this class
|
//! Prevents copying objects from this class
|
||||||
EpaHalfEdge( const EpaHalfEdge& epaHalfEdge );
|
EpaHalfEdge( const EpaHalfEdge& epaHalfEdge );
|
||||||
const EpaHalfEdge& operator = ( const EpaHalfEdge& epaHalfEdge );
|
const EpaHalfEdge& operator = ( const EpaHalfEdge& epaHalfEdge );
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
EpaHalfEdge() : m_pTwin( 0 ), m_pNextCCW( 0 ), m_pFace( 0 ), m_pVertex( 0 )
|
EpaHalfEdge() : m_pTwin( 0 ), m_pNextCCW( 0 ), m_pFace( 0 ), m_pVertex( 0 )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~EpaHalfEdge()
|
~EpaHalfEdge()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
//! Twin half-edge link
|
//! Twin half-edge link
|
||||||
EpaHalfEdge* m_pTwin;
|
EpaHalfEdge* m_pTwin;
|
||||||
|
|
||||||
//! Next half-edge in counter clock-wise ( CCW ) order
|
//! Next half-edge in counter clock-wise ( CCW ) order
|
||||||
EpaHalfEdge* m_pNextCCW;
|
EpaHalfEdge* m_pNextCCW;
|
||||||
|
|
||||||
//! Parent face link
|
//! Parent face link
|
||||||
EpaFace* m_pFace;
|
EpaFace* m_pFace;
|
||||||
|
|
||||||
//! Origin vertex link
|
//! Origin vertex link
|
||||||
EpaVertex* m_pVertex;
|
EpaVertex* m_pVertex;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1,202 +1,202 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#include "SimdScalar.h"
|
#include "SimdScalar.h"
|
||||||
#include "SimdVector3.h"
|
#include "SimdVector3.h"
|
||||||
#include "SimdPoint3.h"
|
#include "SimdPoint3.h"
|
||||||
#include "SimdTransform.h"
|
#include "SimdTransform.h"
|
||||||
#include "SimdMinMax.h"
|
#include "SimdMinMax.h"
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
#include "CollisionShapes/ConvexShape.h"
|
#include "CollisionShapes/ConvexShape.h"
|
||||||
|
|
||||||
#include "NarrowPhaseCollision/SimplexSolverInterface.h"
|
#include "NarrowPhaseCollision/SimplexSolverInterface.h"
|
||||||
|
|
||||||
#include "NarrowPhaseCollision/EpaCommon.h"
|
#include "NarrowPhaseCollision/EpaCommon.h"
|
||||||
|
|
||||||
#include "NarrowPhaseCollision/EpaVertex.h"
|
#include "NarrowPhaseCollision/EpaVertex.h"
|
||||||
#include "NarrowPhaseCollision/EpaHalfEdge.h"
|
#include "NarrowPhaseCollision/EpaHalfEdge.h"
|
||||||
#include "NarrowPhaseCollision/EpaFace.h"
|
#include "NarrowPhaseCollision/EpaFace.h"
|
||||||
#include "NarrowPhaseCollision/EpaPolyhedron.h"
|
#include "NarrowPhaseCollision/EpaPolyhedron.h"
|
||||||
#include "NarrowPhaseCollision/Epa.h"
|
#include "NarrowPhaseCollision/Epa.h"
|
||||||
#include "NarrowPhaseCollision/ConvexPenetrationDepthSolver.h"
|
#include "NarrowPhaseCollision/ConvexPenetrationDepthSolver.h"
|
||||||
#include "NarrowPhaseCollision/EpaPenetrationDepthSolver.h"
|
#include "NarrowPhaseCollision/EpaPenetrationDepthSolver.h"
|
||||||
|
|
||||||
SimdScalar g_GJKMaxRelError = 1e-3f;
|
SimdScalar g_GJKMaxRelError = 1e-3f;
|
||||||
SimdScalar g_GJKMaxRelErrorSqrd = g_GJKMaxRelError * g_GJKMaxRelError;
|
SimdScalar g_GJKMaxRelErrorSqrd = g_GJKMaxRelError * g_GJKMaxRelError;
|
||||||
|
|
||||||
bool EpaPenetrationDepthSolver::CalcPenDepth( SimplexSolverInterface& simplexSolver,
|
bool EpaPenetrationDepthSolver::CalcPenDepth( SimplexSolverInterface& simplexSolver,
|
||||||
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
||||||
const SimdTransform& transformA, const SimdTransform& transformB,
|
const SimdTransform& transformA, const SimdTransform& transformB,
|
||||||
SimdVector3& v, SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB,
|
SimdVector3& v, SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB,
|
||||||
class IDebugDraw* debugDraw )
|
class IDebugDraw* debugDraw )
|
||||||
{
|
{
|
||||||
assert( pConvexA && "Convex shape A is invalid!" );
|
assert( pConvexA && "Convex shape A is invalid!" );
|
||||||
assert( pConvexB && "Convex shape B is invalid!" );
|
assert( pConvexB && "Convex shape B is invalid!" );
|
||||||
|
|
||||||
SimdScalar penDepth;
|
SimdScalar penDepth;
|
||||||
|
|
||||||
#ifdef EPA_USE_HYBRID
|
#ifdef EPA_USE_HYBRID
|
||||||
bool needsEPA = !HybridPenDepth( simplexSolver, pConvexA, pConvexB, transformA, transformB,
|
bool needsEPA = !HybridPenDepth( simplexSolver, pConvexA, pConvexB, transformA, transformB,
|
||||||
wWitnessOnA, wWitnessOnB, penDepth, v );
|
wWitnessOnA, wWitnessOnB, penDepth, v );
|
||||||
|
|
||||||
if ( needsEPA )
|
if ( needsEPA )
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
penDepth = EpaPenDepth( simplexSolver, pConvexA, pConvexB,
|
penDepth = EpaPenDepth( simplexSolver, pConvexA, pConvexB,
|
||||||
transformA, transformB,
|
transformA, transformB,
|
||||||
wWitnessOnA, wWitnessOnB );
|
wWitnessOnA, wWitnessOnB );
|
||||||
assert( ( penDepth > 0 ) && "EPA or Hybrid Technique failed to calculate penetration depth!" );
|
assert( ( penDepth > 0 ) && "EPA or Hybrid Technique failed to calculate penetration depth!" );
|
||||||
|
|
||||||
#ifdef EPA_USE_HYBRID
|
#ifdef EPA_USE_HYBRID
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ( penDepth > 0 );
|
return ( penDepth > 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EPA_USE_HYBRID
|
#ifdef EPA_USE_HYBRID
|
||||||
bool EpaPenetrationDepthSolver::HybridPenDepth( SimplexSolverInterface& simplexSolver,
|
bool EpaPenetrationDepthSolver::HybridPenDepth( SimplexSolverInterface& simplexSolver,
|
||||||
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
||||||
const SimdTransform& transformA, const SimdTransform& transformB,
|
const SimdTransform& transformA, const SimdTransform& transformB,
|
||||||
SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB,
|
SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB,
|
||||||
SimdScalar& penDepth, SimdVector3& v )
|
SimdScalar& penDepth, SimdVector3& v )
|
||||||
{
|
{
|
||||||
SimdScalar squaredDistance = SIMD_INFINITY;
|
SimdScalar squaredDistance = SIMD_INFINITY;
|
||||||
SimdScalar delta = 0.f;
|
SimdScalar delta = 0.f;
|
||||||
|
|
||||||
const SimdScalar margin = pConvexA->GetMargin() + pConvexB->GetMargin();
|
const SimdScalar margin = pConvexA->GetMargin() + pConvexB->GetMargin();
|
||||||
const SimdScalar marginSqrd = margin * margin;
|
const SimdScalar marginSqrd = margin * margin;
|
||||||
|
|
||||||
simplexSolver.reset();
|
simplexSolver.reset();
|
||||||
|
|
||||||
int nbIterations = 0;
|
int nbIterations = 0;
|
||||||
|
|
||||||
while ( true )
|
while ( true )
|
||||||
{
|
{
|
||||||
assert( ( v.length2() > 0 ) && "Warning: v is the zero vector!" );
|
assert( ( v.length2() > 0 ) && "Warning: v is the zero vector!" );
|
||||||
|
|
||||||
SimdVector3 seperatingAxisInA = -v * transformA.getBasis();
|
SimdVector3 seperatingAxisInA = -v * transformA.getBasis();
|
||||||
SimdVector3 seperatingAxisInB = v * transformB.getBasis();
|
SimdVector3 seperatingAxisInB = v * transformB.getBasis();
|
||||||
|
|
||||||
SimdVector3 pInA = pConvexA->LocalGetSupportingVertexWithoutMargin( seperatingAxisInA );
|
SimdVector3 pInA = pConvexA->LocalGetSupportingVertexWithoutMargin( seperatingAxisInA );
|
||||||
SimdVector3 qInB = pConvexB->LocalGetSupportingVertexWithoutMargin( seperatingAxisInB );
|
SimdVector3 qInB = pConvexB->LocalGetSupportingVertexWithoutMargin( seperatingAxisInB );
|
||||||
|
|
||||||
SimdPoint3 pWorld = transformA( pInA );
|
SimdPoint3 pWorld = transformA( pInA );
|
||||||
SimdPoint3 qWorld = transformB( qInB );
|
SimdPoint3 qWorld = transformB( qInB );
|
||||||
|
|
||||||
SimdVector3 w = pWorld - qWorld;
|
SimdVector3 w = pWorld - qWorld;
|
||||||
delta = v.dot( w );
|
delta = v.dot( w );
|
||||||
|
|
||||||
// potential exit, they don't overlap
|
// potential exit, they don't overlap
|
||||||
if ( ( delta > 0 ) && ( ( delta * delta / squaredDistance ) > marginSqrd ) )
|
if ( ( delta > 0 ) && ( ( delta * delta / squaredDistance ) > marginSqrd ) )
|
||||||
{
|
{
|
||||||
// Convex shapes do not overlap
|
// Convex shapes do not overlap
|
||||||
// Returning true means that Hybrid's result is ok and there's no need to run EPA
|
// Returning true means that Hybrid's result is ok and there's no need to run EPA
|
||||||
penDepth = 0;
|
penDepth = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//exit 0: the new point is already in the simplex, or we didn't come any closer
|
//exit 0: the new point is already in the simplex, or we didn't come any closer
|
||||||
if ( ( squaredDistance - delta <= squaredDistance * g_GJKMaxRelErrorSqrd ) || simplexSolver.inSimplex( w ) )
|
if ( ( squaredDistance - delta <= squaredDistance * g_GJKMaxRelErrorSqrd ) || simplexSolver.inSimplex( w ) )
|
||||||
{
|
{
|
||||||
simplexSolver.compute_points( wWitnessOnA, wWitnessOnB );
|
simplexSolver.compute_points( wWitnessOnA, wWitnessOnB );
|
||||||
|
|
||||||
assert( ( squaredDistance > 0 ) && "squaredDistance is zero!" );
|
assert( ( squaredDistance > 0 ) && "squaredDistance is zero!" );
|
||||||
SimdScalar vLength = sqrt( squaredDistance );
|
SimdScalar vLength = sqrt( squaredDistance );
|
||||||
|
|
||||||
wWitnessOnA -= v * ( pConvexA->GetMargin() / vLength );
|
wWitnessOnA -= v * ( pConvexA->GetMargin() / vLength );
|
||||||
wWitnessOnB += v * ( pConvexB->GetMargin() / vLength );
|
wWitnessOnB += v * ( pConvexB->GetMargin() / vLength );
|
||||||
|
|
||||||
penDepth = pConvexA->GetMargin() + pConvexB->GetMargin() - vLength;
|
penDepth = pConvexA->GetMargin() + pConvexB->GetMargin() - vLength;
|
||||||
|
|
||||||
// Returning true means that Hybrid's result is ok and there's no need to run EPA
|
// Returning true means that Hybrid's result is ok and there's no need to run EPA
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//add current vertex to simplex
|
//add current vertex to simplex
|
||||||
simplexSolver.addVertex( w, pWorld, qWorld );
|
simplexSolver.addVertex( w, pWorld, qWorld );
|
||||||
|
|
||||||
//calculate the closest point to the origin (update vector v)
|
//calculate the closest point to the origin (update vector v)
|
||||||
if ( !simplexSolver.closest( v ) )
|
if ( !simplexSolver.closest( v ) )
|
||||||
{
|
{
|
||||||
simplexSolver.compute_points( wWitnessOnA, wWitnessOnB );
|
simplexSolver.compute_points( wWitnessOnA, wWitnessOnB );
|
||||||
|
|
||||||
assert( ( squaredDistance > 0 ) && "squaredDistance is zero!" );
|
assert( ( squaredDistance > 0 ) && "squaredDistance is zero!" );
|
||||||
SimdScalar vLength = sqrt( squaredDistance );
|
SimdScalar vLength = sqrt( squaredDistance );
|
||||||
|
|
||||||
wWitnessOnA -= v * ( pConvexA->GetMargin() / vLength );
|
wWitnessOnA -= v * ( pConvexA->GetMargin() / vLength );
|
||||||
wWitnessOnB += v * ( pConvexB->GetMargin() / vLength );
|
wWitnessOnB += v * ( pConvexB->GetMargin() / vLength );
|
||||||
|
|
||||||
penDepth = pConvexA->GetMargin() + pConvexB->GetMargin() - vLength;
|
penDepth = pConvexA->GetMargin() + pConvexB->GetMargin() - vLength;
|
||||||
|
|
||||||
// Returning true means that Hybrid's result is ok and there's no need to run EPA
|
// Returning true means that Hybrid's result is ok and there's no need to run EPA
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SimdScalar previousSquaredDistance = squaredDistance;
|
SimdScalar previousSquaredDistance = squaredDistance;
|
||||||
squaredDistance = v.length2();
|
squaredDistance = v.length2();
|
||||||
|
|
||||||
//are we getting any closer ?
|
//are we getting any closer ?
|
||||||
if ( previousSquaredDistance - squaredDistance <= SIMD_EPSILON * previousSquaredDistance )
|
if ( previousSquaredDistance - squaredDistance <= SIMD_EPSILON * previousSquaredDistance )
|
||||||
{
|
{
|
||||||
simplexSolver.backup_closest( v );
|
simplexSolver.backup_closest( v );
|
||||||
squaredDistance = v.length2();
|
squaredDistance = v.length2();
|
||||||
|
|
||||||
simplexSolver.compute_points( wWitnessOnA, wWitnessOnB );
|
simplexSolver.compute_points( wWitnessOnA, wWitnessOnB );
|
||||||
|
|
||||||
assert( ( squaredDistance > 0 ) && "squaredDistance is zero!" );
|
assert( ( squaredDistance > 0 ) && "squaredDistance is zero!" );
|
||||||
SimdScalar vLength = sqrt( squaredDistance );
|
SimdScalar vLength = sqrt( squaredDistance );
|
||||||
|
|
||||||
wWitnessOnA -= v * ( pConvexA->GetMargin() / vLength );
|
wWitnessOnA -= v * ( pConvexA->GetMargin() / vLength );
|
||||||
wWitnessOnB += v * ( pConvexB->GetMargin() / vLength );
|
wWitnessOnB += v * ( pConvexB->GetMargin() / vLength );
|
||||||
|
|
||||||
penDepth = pConvexA->GetMargin() + pConvexB->GetMargin() - vLength;
|
penDepth = pConvexA->GetMargin() + pConvexB->GetMargin() - vLength;
|
||||||
|
|
||||||
// Returning true means that Hybrid's result is ok and there's no need to run EPA
|
// Returning true means that Hybrid's result is ok and there's no need to run EPA
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( simplexSolver.fullSimplex() || ( squaredDistance <= SIMD_EPSILON * simplexSolver.maxVertex() ) )
|
if ( simplexSolver.fullSimplex() || ( squaredDistance <= SIMD_EPSILON * simplexSolver.maxVertex() ) )
|
||||||
{
|
{
|
||||||
// Convex Shapes intersect - we need to run EPA
|
// Convex Shapes intersect - we need to run EPA
|
||||||
// Returning false means that Hybrid couldn't do anything for us
|
// Returning false means that Hybrid couldn't do anything for us
|
||||||
// and that we need to run EPA to calculate the pen depth
|
// and that we need to run EPA to calculate the pen depth
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
++nbIterations;
|
++nbIterations;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SimdScalar EpaPenetrationDepthSolver::EpaPenDepth( SimplexSolverInterface& simplexSolver,
|
SimdScalar EpaPenetrationDepthSolver::EpaPenDepth( SimplexSolverInterface& simplexSolver,
|
||||||
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
||||||
const SimdTransform& transformA, const SimdTransform& transformB,
|
const SimdTransform& transformA, const SimdTransform& transformB,
|
||||||
SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB )
|
SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB )
|
||||||
{
|
{
|
||||||
Epa epa( pConvexA, pConvexB, transformA, transformB );
|
Epa epa( pConvexA, pConvexB, transformA, transformB );
|
||||||
|
|
||||||
if ( !epa.Initialize( simplexSolver ) )
|
if ( !epa.Initialize( simplexSolver ) )
|
||||||
{
|
{
|
||||||
assert( false && "Epa failed to initialize!" );
|
assert( false && "Epa failed to initialize!" );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return epa.CalcPenDepth( wWitnessOnA, wWitnessOnB );
|
return epa.CalcPenDepth( wWitnessOnA, wWitnessOnB );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,56 +1,56 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef EPA_PENETRATION_DEPTH_H
|
#ifndef EPA_PENETRATION_DEPTH_H
|
||||||
#define EPA_PENETRATION_DEPTH_H
|
#define EPA_PENETRATION_DEPTH_H
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EpaPenetrationDepthSolver uses the Expanding Polytope Algorithm to
|
* EpaPenetrationDepthSolver uses the Expanding Polytope Algorithm to
|
||||||
* calculate the penetration depth between two convex shapes.
|
* calculate the penetration depth between two convex shapes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern SimdScalar g_GJKMaxRelError;
|
extern SimdScalar g_GJKMaxRelError;
|
||||||
extern SimdScalar g_GJKMaxRelErrorSqrd;
|
extern SimdScalar g_GJKMaxRelErrorSqrd;
|
||||||
|
|
||||||
//! Note : This class is not supposed to be a base class
|
//! Note : This class is not supposed to be a base class
|
||||||
class EpaPenetrationDepthSolver : public ConvexPenetrationDepthSolver
|
class EpaPenetrationDepthSolver : public ConvexPenetrationDepthSolver
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
|
|
||||||
bool CalcPenDepth( SimplexSolverInterface& simplexSolver,
|
bool CalcPenDepth( SimplexSolverInterface& simplexSolver,
|
||||||
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
||||||
const SimdTransform& transformA, const SimdTransform& transformB,
|
const SimdTransform& transformA, const SimdTransform& transformB,
|
||||||
SimdVector3& v, SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB,
|
SimdVector3& v, SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB,
|
||||||
class IDebugDraw* debugDraw );
|
class IDebugDraw* debugDraw );
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
#ifdef EPA_USE_HYBRID
|
#ifdef EPA_USE_HYBRID
|
||||||
bool HybridPenDepth( SimplexSolverInterface& simplexSolver,
|
bool HybridPenDepth( SimplexSolverInterface& simplexSolver,
|
||||||
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
||||||
const SimdTransform& transformA, const SimdTransform& transformB,
|
const SimdTransform& transformA, const SimdTransform& transformB,
|
||||||
SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB,
|
SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB,
|
||||||
SimdScalar& penDepth, SimdVector3& v );
|
SimdScalar& penDepth, SimdVector3& v );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SimdScalar EpaPenDepth( SimplexSolverInterface& simplexSolver,
|
SimdScalar EpaPenDepth( SimplexSolverInterface& simplexSolver,
|
||||||
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
ConvexShape* pConvexA, ConvexShape* pConvexB,
|
||||||
const SimdTransform& transformA, const SimdTransform& transformB,
|
const SimdTransform& transformA, const SimdTransform& transformB,
|
||||||
SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB );
|
SimdPoint3& wWitnessOnA, SimdPoint3& wWitnessOnB );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // EPA_PENETRATION_DEPTH_H
|
#endif // EPA_PENETRATION_DEPTH_H
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,89 +1,89 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef EPA_POLYHEDRON_H
|
#ifndef EPA_POLYHEDRON_H
|
||||||
#define EPA_POLYHEDRON_H
|
#define EPA_POLYHEDRON_H
|
||||||
|
|
||||||
class EpaFace;
|
class EpaFace;
|
||||||
class EpaVertex;
|
class EpaVertex;
|
||||||
|
|
||||||
//! Note : This class is not supposed to be a base class
|
//! Note : This class is not supposed to be a base class
|
||||||
class EpaPolyhedron
|
class EpaPolyhedron
|
||||||
{
|
{
|
||||||
private :
|
private :
|
||||||
|
|
||||||
//! Prevents copying objects from this class
|
//! Prevents copying objects from this class
|
||||||
EpaPolyhedron( const EpaPolyhedron& epaPolyhedron );
|
EpaPolyhedron( const EpaPolyhedron& epaPolyhedron );
|
||||||
const EpaPolyhedron& operator = ( const EpaPolyhedron& epaPolyhedron );
|
const EpaPolyhedron& operator = ( const EpaPolyhedron& epaPolyhedron );
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
EpaPolyhedron();
|
EpaPolyhedron();
|
||||||
~EpaPolyhedron();
|
~EpaPolyhedron();
|
||||||
|
|
||||||
bool Create( SimdPoint3* pInitialPoints,
|
bool Create( SimdPoint3* pInitialPoints,
|
||||||
SimdPoint3* pSupportPointsOnA, SimdPoint3* pSupportPointsOnB,
|
SimdPoint3* pSupportPointsOnA, SimdPoint3* pSupportPointsOnB,
|
||||||
const int nbInitialPoints );
|
const int nbInitialPoints );
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
EpaFace* CreateFace();
|
EpaFace* CreateFace();
|
||||||
EpaHalfEdge* CreateHalfEdge();
|
EpaHalfEdge* CreateHalfEdge();
|
||||||
EpaVertex* CreateVertex( const SimdPoint3& wSupportPoint,
|
EpaVertex* CreateVertex( const SimdPoint3& wSupportPoint,
|
||||||
const SimdPoint3& wSupportPointOnA,
|
const SimdPoint3& wSupportPointOnA,
|
||||||
const SimdPoint3& wSupportPointOnB );
|
const SimdPoint3& wSupportPointOnB );
|
||||||
|
|
||||||
void DeleteFace( EpaFace* pFace );
|
void DeleteFace( EpaFace* pFace );
|
||||||
|
|
||||||
void DestroyAllFaces();
|
void DestroyAllFaces();
|
||||||
void DestroyAllHalfEdges();
|
void DestroyAllHalfEdges();
|
||||||
void DestroyAllVertices();
|
void DestroyAllVertices();
|
||||||
|
|
||||||
bool Expand( const SimdPoint3& wSupportPoint,
|
bool Expand( const SimdPoint3& wSupportPoint,
|
||||||
const SimdPoint3& wSupportPointOnA,
|
const SimdPoint3& wSupportPointOnA,
|
||||||
const SimdPoint3& wSupportPointOnB,
|
const SimdPoint3& wSupportPointOnB,
|
||||||
EpaFace* pFace, std::list< EpaFace* >& newFaces );
|
EpaFace* pFace, std::list< EpaFace* >& newFaces );
|
||||||
|
|
||||||
std::list< EpaFace* >& GetFaces();
|
std::list< EpaFace* >& GetFaces();
|
||||||
int GetNbFaces() const;
|
int GetNbFaces() const;
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
void DeleteVisibleFaces( const SimdPoint3& point, EpaFace* pFace,
|
void DeleteVisibleFaces( const SimdPoint3& point, EpaFace* pFace,
|
||||||
std::list< EpaHalfEdge* >& coneBaseTwinHalfEdges );
|
std::list< EpaHalfEdge* >& coneBaseTwinHalfEdges );
|
||||||
|
|
||||||
void CreateCone( EpaVertex* pAppexVertex, std::list< EpaHalfEdge* >& baseTwinHalfEdges,
|
void CreateCone( EpaVertex* pAppexVertex, std::list< EpaHalfEdge* >& baseTwinHalfEdges,
|
||||||
std::list< EpaFace* >& newFaces );
|
std::list< EpaFace* >& newFaces );
|
||||||
EpaFace* CreateConeFace( EpaVertex* pAppexVertex, EpaHalfEdge* pBaseTwinHalfEdge,
|
EpaFace* CreateConeFace( EpaVertex* pAppexVertex, EpaHalfEdge* pBaseTwinHalfEdge,
|
||||||
std::list< EpaHalfEdge* >& halfEdgesToLink );
|
std::list< EpaHalfEdge* >& halfEdgesToLink );
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
public :
|
public :
|
||||||
//! Please don't remove this method, it will help debugging if some problems arise in the future
|
//! Please don't remove this method, it will help debugging if some problems arise in the future
|
||||||
bool _dbgSaveToFile( const char* pFileName );
|
bool _dbgSaveToFile( const char* pFileName );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
//! This is the number of valid faces, m_faces list also contain deleted faces
|
//! This is the number of valid faces, m_faces list also contain deleted faces
|
||||||
int m_nbFaces;
|
int m_nbFaces;
|
||||||
|
|
||||||
std::list< EpaFace* > m_faces;
|
std::list< EpaFace* > m_faces;
|
||||||
std::list< EpaHalfEdge* > m_halfEdges;
|
std::list< EpaHalfEdge* > m_halfEdges;
|
||||||
std::list< EpaVertex* > m_vertices;
|
std::list< EpaVertex* > m_vertices;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1,61 +1,61 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
EPA Copyright (c) Ricardo Padrela 2006
|
EPA Copyright (c) Ricardo Padrela 2006
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
#ifndef EPA_VERTEX_H
|
#ifndef EPA_VERTEX_H
|
||||||
#define EPA_VERTEX_H
|
#define EPA_VERTEX_H
|
||||||
|
|
||||||
class EpaHalfEdge;
|
class EpaHalfEdge;
|
||||||
|
|
||||||
//! Note : This class is not supposed to be a base class
|
//! Note : This class is not supposed to be a base class
|
||||||
class EpaVertex
|
class EpaVertex
|
||||||
{
|
{
|
||||||
private :
|
private :
|
||||||
|
|
||||||
//! Prevents copying objects from this class
|
//! Prevents copying objects from this class
|
||||||
EpaVertex( const EpaVertex& epaVertex );
|
EpaVertex( const EpaVertex& epaVertex );
|
||||||
const EpaVertex& operator = ( const EpaVertex& epaVertex );
|
const EpaVertex& operator = ( const EpaVertex& epaVertex );
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
EpaVertex( const SimdPoint3& point ) : /*m_pHalfEdge( 0 ),*/ m_point( point )
|
EpaVertex( const SimdPoint3& point ) : /*m_pHalfEdge( 0 ),*/ m_point( point )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
EpaVertex( const SimdPoint3& point,
|
EpaVertex( const SimdPoint3& point,
|
||||||
const SimdPoint3& wSupportPointOnA,
|
const SimdPoint3& wSupportPointOnA,
|
||||||
const SimdPoint3& wSupportPointOnB ) : /*m_pHalfEdge( 0 ),*/ m_point( point ),
|
const SimdPoint3& wSupportPointOnB ) : /*m_pHalfEdge( 0 ),*/ m_point( point ),
|
||||||
m_wSupportPointOnA( wSupportPointOnA ),
|
m_wSupportPointOnA( wSupportPointOnA ),
|
||||||
m_wSupportPointOnB( wSupportPointOnB )
|
m_wSupportPointOnB( wSupportPointOnB )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~EpaVertex()
|
~EpaVertex()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public :
|
public :
|
||||||
|
|
||||||
//! This is not necessary
|
//! This is not necessary
|
||||||
//EpaHalfEdge* m_pHalfEdge;
|
//EpaHalfEdge* m_pHalfEdge;
|
||||||
|
|
||||||
SimdPoint3 m_point;
|
SimdPoint3 m_point;
|
||||||
|
|
||||||
SimdPoint3 m_wSupportPointOnA;
|
SimdPoint3 m_wSupportPointOnA;
|
||||||
SimdPoint3 m_wSupportPointOnB;
|
SimdPoint3 m_wSupportPointOnB;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -36,8 +36,7 @@ subject to the following restrictions:
|
|||||||
#include "BroadphaseCollision/Dispatcher.h"
|
#include "BroadphaseCollision/Dispatcher.h"
|
||||||
#include "NarrowPhaseCollision/PersistentManifold.h"
|
#include "NarrowPhaseCollision/PersistentManifold.h"
|
||||||
#include "CollisionShapes/TriangleMeshShape.h"
|
#include "CollisionShapes/TriangleMeshShape.h"
|
||||||
#include "ConstraintSolver/OdeConstraintSolver.h"
|
#include "ConstraintSolver/SequentialImpulseConstraintSolver.h"
|
||||||
#include "ConstraintSolver/SimpleConstraintSolver.h"
|
|
||||||
|
|
||||||
|
|
||||||
//profiling/timings
|
//profiling/timings
|
||||||
@@ -325,7 +324,7 @@ static void DrawAabb(IDebugDraw* debugDrawer,const SimdVector3& from,const SimdV
|
|||||||
|
|
||||||
CcdPhysicsEnvironment::CcdPhysicsEnvironment(CollisionDispatcher* dispatcher,BroadphaseInterface* broadphase)
|
CcdPhysicsEnvironment::CcdPhysicsEnvironment(CollisionDispatcher* dispatcher,BroadphaseInterface* broadphase)
|
||||||
:m_scalingPropagated(false),
|
:m_scalingPropagated(false),
|
||||||
m_numIterations(10),
|
m_numIterations(4),
|
||||||
m_numTimeSubSteps(1),
|
m_numTimeSubSteps(1),
|
||||||
m_ccdMode(0),
|
m_ccdMode(0),
|
||||||
m_solverType(-1),
|
m_solverType(-1),
|
||||||
@@ -1034,7 +1033,7 @@ void CcdPhysicsEnvironment::setSolverType(int solverType)
|
|||||||
if (m_solverType != solverType)
|
if (m_solverType != solverType)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_solver = new SimpleConstraintSolver();
|
m_solver = new SequentialImpulseConstraintSolver();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1044,7 +1043,7 @@ void CcdPhysicsEnvironment::setSolverType(int solverType)
|
|||||||
default:
|
default:
|
||||||
if (m_solverType != solverType)
|
if (m_solverType != solverType)
|
||||||
{
|
{
|
||||||
m_solver = new OdeConstraintSolver();
|
// m_solver = new OdeConstraintSolver();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,265 +1,268 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "OdeConstraintSolver.h"
|
#include "OdeConstraintSolver.h"
|
||||||
|
|
||||||
#include "NarrowPhaseCollision/PersistentManifold.h"
|
#include "NarrowPhaseCollision/PersistentManifold.h"
|
||||||
#include "Dynamics/RigidBody.h"
|
#include "Dynamics/RigidBody.h"
|
||||||
#include "ContactConstraint.h"
|
#include "ContactConstraint.h"
|
||||||
#include "Solve2LinearConstraint.h"
|
#include "Solve2LinearConstraint.h"
|
||||||
#include "ContactSolverInfo.h"
|
#include "ContactSolverInfo.h"
|
||||||
#include "Dynamics/BU_Joint.h"
|
#include "Dynamics/BU_Joint.h"
|
||||||
#include "Dynamics/ContactJoint.h"
|
#include "Dynamics/ContactJoint.h"
|
||||||
|
|
||||||
#include "IDebugDraw.h"
|
#include "IDebugDraw.h"
|
||||||
|
|
||||||
#define USE_SOR_SOLVER
|
#define USE_SOR_SOLVER
|
||||||
|
|
||||||
#include "SorLcp.h"
|
#include "SorLcp.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <float.h>//FLT_MAX
|
#include <float.h>//FLT_MAX
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
#endif
|
#endif
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#if defined (WIN32)
|
#if defined (WIN32)
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#else
|
#else
|
||||||
#if defined (__FreeBSD__)
|
#if defined (__FreeBSD__)
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#else
|
#else
|
||||||
#include <alloca.h>
|
#include <alloca.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class BU_Joint;
|
class BU_Joint;
|
||||||
|
|
||||||
//see below
|
//see below
|
||||||
|
|
||||||
OdeConstraintSolver::OdeConstraintSolver():
|
//to bridge with ODE quickstep, we make a temp copy of the rigidbodies in each simultion island, stored in an array of size MAX_RIGIDBODIES
|
||||||
m_cfm(0.f),//1e-5f),
|
#define MAX_QUICKSTEP_RIGIDBODIES 8192
|
||||||
m_erp(0.4f)
|
|
||||||
{
|
OdeConstraintSolver::OdeConstraintSolver():
|
||||||
}
|
m_cfm(0.f),//1e-5f),
|
||||||
|
m_erp(0.4f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//iterative lcp and penalty method
|
|
||||||
float OdeConstraintSolver::SolveGroup(PersistentManifold** manifoldPtr, int numManifolds,const ContactSolverInfo& infoGlobal,IDebugDraw* debugDrawer)
|
|
||||||
{
|
|
||||||
m_CurBody = 0;
|
//iterative lcp and penalty method
|
||||||
m_CurJoint = 0;
|
float OdeConstraintSolver::SolveGroup(PersistentManifold** manifoldPtr, int numManifolds,const ContactSolverInfo& infoGlobal,IDebugDraw* debugDrawer)
|
||||||
|
{
|
||||||
|
m_CurBody = 0;
|
||||||
RigidBody* bodies [MAX_RIGIDBODIES];
|
m_CurJoint = 0;
|
||||||
|
|
||||||
int numBodies = 0;
|
|
||||||
BU_Joint* joints [MAX_RIGIDBODIES*4];
|
RigidBody* bodies [MAX_QUICKSTEP_RIGIDBODIES];
|
||||||
int numJoints = 0;
|
|
||||||
|
int numBodies = 0;
|
||||||
for (int j=0;j<numManifolds;j++)
|
BU_Joint* joints [MAX_QUICKSTEP_RIGIDBODIES*4];
|
||||||
{
|
int numJoints = 0;
|
||||||
|
|
||||||
int body0=-1,body1=-1;
|
for (int j=0;j<numManifolds;j++)
|
||||||
|
{
|
||||||
PersistentManifold* manifold = manifoldPtr[j];
|
|
||||||
if (manifold->GetNumContacts() > 0)
|
int body0=-1,body1=-1;
|
||||||
{
|
|
||||||
body0 = ConvertBody((RigidBody*)manifold->GetBody0(),bodies,numBodies);
|
PersistentManifold* manifold = manifoldPtr[j];
|
||||||
body1 = ConvertBody((RigidBody*)manifold->GetBody1(),bodies,numBodies);
|
if (manifold->GetNumContacts() > 0)
|
||||||
ConvertConstraint(manifold,joints,numJoints,bodies,body0,body1,debugDrawer);
|
{
|
||||||
}
|
body0 = ConvertBody((RigidBody*)manifold->GetBody0(),bodies,numBodies);
|
||||||
}
|
body1 = ConvertBody((RigidBody*)manifold->GetBody1(),bodies,numBodies);
|
||||||
|
ConvertConstraint(manifold,joints,numJoints,bodies,body0,body1,debugDrawer);
|
||||||
SolveInternal1(m_cfm,m_erp,bodies,numBodies,joints,numJoints,infoGlobal);
|
}
|
||||||
|
}
|
||||||
return 0.f;
|
|
||||||
|
SolveInternal1(m_cfm,m_erp,bodies,numBodies,joints,numJoints,infoGlobal);
|
||||||
}
|
|
||||||
|
return 0.f;
|
||||||
/////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
}
|
||||||
|
|
||||||
typedef SimdScalar dQuaternion[4];
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
#define _R(i,j) R[(i)*4+(j)]
|
|
||||||
|
|
||||||
void dRfromQ1 (dMatrix3 R, const dQuaternion q)
|
typedef SimdScalar dQuaternion[4];
|
||||||
{
|
#define _R(i,j) R[(i)*4+(j)]
|
||||||
// q = (s,vx,vy,vz)
|
|
||||||
SimdScalar qq1 = 2.f*q[1]*q[1];
|
void dRfromQ1 (dMatrix3 R, const dQuaternion q)
|
||||||
SimdScalar qq2 = 2.f*q[2]*q[2];
|
{
|
||||||
SimdScalar qq3 = 2.f*q[3]*q[3];
|
// q = (s,vx,vy,vz)
|
||||||
_R(0,0) = 1.f - qq2 - qq3;
|
SimdScalar qq1 = 2.f*q[1]*q[1];
|
||||||
_R(0,1) = 2*(q[1]*q[2] - q[0]*q[3]);
|
SimdScalar qq2 = 2.f*q[2]*q[2];
|
||||||
_R(0,2) = 2*(q[1]*q[3] + q[0]*q[2]);
|
SimdScalar qq3 = 2.f*q[3]*q[3];
|
||||||
_R(0,3) = 0.f;
|
_R(0,0) = 1.f - qq2 - qq3;
|
||||||
|
_R(0,1) = 2*(q[1]*q[2] - q[0]*q[3]);
|
||||||
_R(1,0) = 2*(q[1]*q[2] + q[0]*q[3]);
|
_R(0,2) = 2*(q[1]*q[3] + q[0]*q[2]);
|
||||||
_R(1,1) = 1.f - qq1 - qq3;
|
_R(0,3) = 0.f;
|
||||||
_R(1,2) = 2*(q[2]*q[3] - q[0]*q[1]);
|
|
||||||
_R(1,3) = 0.f;
|
_R(1,0) = 2*(q[1]*q[2] + q[0]*q[3]);
|
||||||
|
_R(1,1) = 1.f - qq1 - qq3;
|
||||||
_R(2,0) = 2*(q[1]*q[3] - q[0]*q[2]);
|
_R(1,2) = 2*(q[2]*q[3] - q[0]*q[1]);
|
||||||
_R(2,1) = 2*(q[2]*q[3] + q[0]*q[1]);
|
_R(1,3) = 0.f;
|
||||||
_R(2,2) = 1.f - qq1 - qq2;
|
|
||||||
_R(2,3) = 0.f;
|
_R(2,0) = 2*(q[1]*q[3] - q[0]*q[2]);
|
||||||
|
_R(2,1) = 2*(q[2]*q[3] + q[0]*q[1]);
|
||||||
}
|
_R(2,2) = 1.f - qq1 - qq2;
|
||||||
|
_R(2,3) = 0.f;
|
||||||
|
|
||||||
|
}
|
||||||
int OdeConstraintSolver::ConvertBody(RigidBody* body,RigidBody** bodies,int& numBodies)
|
|
||||||
{
|
|
||||||
if (!body || (body->getInvMass() == 0.f) )
|
|
||||||
{
|
int OdeConstraintSolver::ConvertBody(RigidBody* body,RigidBody** bodies,int& numBodies)
|
||||||
return -1;
|
{
|
||||||
}
|
if (!body || (body->getInvMass() == 0.f) )
|
||||||
//first try to find
|
{
|
||||||
int i,j;
|
return -1;
|
||||||
for (i=0;i<numBodies;i++)
|
}
|
||||||
{
|
//first try to find
|
||||||
if (bodies[i] == body)
|
int i,j;
|
||||||
return i;
|
for (i=0;i<numBodies;i++)
|
||||||
}
|
{
|
||||||
//if not found, create a new body
|
if (bodies[i] == body)
|
||||||
bodies[numBodies++] = body;
|
return i;
|
||||||
//convert data
|
}
|
||||||
|
//if not found, create a new body
|
||||||
|
bodies[numBodies++] = body;
|
||||||
body->m_facc.setValue(0,0,0,0);
|
//convert data
|
||||||
body->m_tacc.setValue(0,0,0,0);
|
|
||||||
|
|
||||||
//are the indices the same ?
|
body->m_facc.setValue(0,0,0,0);
|
||||||
for (i=0;i<4;i++)
|
body->m_tacc.setValue(0,0,0,0);
|
||||||
{
|
|
||||||
for ( j=0;j<3;j++)
|
//are the indices the same ?
|
||||||
{
|
for (i=0;i<4;i++)
|
||||||
body->m_invI[i+4*j] = 0.f;
|
{
|
||||||
body->m_I[i+4*j] = 0.f;
|
for ( j=0;j<3;j++)
|
||||||
}
|
{
|
||||||
}
|
body->m_invI[i+4*j] = 0.f;
|
||||||
body->m_invI[0+4*0] = body->getInvInertiaDiagLocal()[0];
|
body->m_I[i+4*j] = 0.f;
|
||||||
body->m_invI[1+4*1] = body->getInvInertiaDiagLocal()[1];
|
}
|
||||||
body->m_invI[2+4*2] = body->getInvInertiaDiagLocal()[2];
|
}
|
||||||
|
body->m_invI[0+4*0] = body->getInvInertiaDiagLocal()[0];
|
||||||
body->m_I[0+0*4] = 1.f/body->getInvInertiaDiagLocal()[0];
|
body->m_invI[1+4*1] = body->getInvInertiaDiagLocal()[1];
|
||||||
body->m_I[1+1*4] = 1.f/body->getInvInertiaDiagLocal()[1];
|
body->m_invI[2+4*2] = body->getInvInertiaDiagLocal()[2];
|
||||||
body->m_I[2+2*4] = 1.f/body->getInvInertiaDiagLocal()[2];
|
|
||||||
|
body->m_I[0+0*4] = 1.f/body->getInvInertiaDiagLocal()[0];
|
||||||
|
body->m_I[1+1*4] = 1.f/body->getInvInertiaDiagLocal()[1];
|
||||||
|
body->m_I[2+2*4] = 1.f/body->getInvInertiaDiagLocal()[2];
|
||||||
|
|
||||||
dQuaternion q;
|
|
||||||
|
|
||||||
q[1] = body->getOrientation()[0];
|
|
||||||
q[2] = body->getOrientation()[1];
|
dQuaternion q;
|
||||||
q[3] = body->getOrientation()[2];
|
|
||||||
q[0] = body->getOrientation()[3];
|
q[1] = body->getOrientation()[0];
|
||||||
|
q[2] = body->getOrientation()[1];
|
||||||
dRfromQ1(body->m_R,q);
|
q[3] = body->getOrientation()[2];
|
||||||
|
q[0] = body->getOrientation()[3];
|
||||||
return numBodies-1;
|
|
||||||
}
|
dRfromQ1(body->m_R,q);
|
||||||
|
|
||||||
|
return numBodies-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define MAX_JOINTS_1 8192
|
|
||||||
|
|
||||||
static ContactJoint gJointArray[MAX_JOINTS_1];
|
|
||||||
|
#define MAX_JOINTS_1 65535
|
||||||
|
|
||||||
void OdeConstraintSolver::ConvertConstraint(PersistentManifold* manifold,BU_Joint** joints,int& numJoints,
|
static ContactJoint gJointArray[MAX_JOINTS_1];
|
||||||
RigidBody** bodies,int _bodyId0,int _bodyId1,IDebugDraw* debugDrawer)
|
|
||||||
{
|
|
||||||
|
void OdeConstraintSolver::ConvertConstraint(PersistentManifold* manifold,BU_Joint** joints,int& numJoints,
|
||||||
|
RigidBody** bodies,int _bodyId0,int _bodyId1,IDebugDraw* debugDrawer)
|
||||||
manifold->RefreshContactPoints(((RigidBody*)manifold->GetBody0())->getCenterOfMassTransform(),
|
{
|
||||||
((RigidBody*)manifold->GetBody1())->getCenterOfMassTransform());
|
|
||||||
|
|
||||||
int bodyId0 = _bodyId0,bodyId1 = _bodyId1;
|
manifold->RefreshContactPoints(((RigidBody*)manifold->GetBody0())->getCenterOfMassTransform(),
|
||||||
|
((RigidBody*)manifold->GetBody1())->getCenterOfMassTransform());
|
||||||
int i,numContacts = manifold->GetNumContacts();
|
|
||||||
|
int bodyId0 = _bodyId0,bodyId1 = _bodyId1;
|
||||||
bool swapBodies = (bodyId0 < 0);
|
|
||||||
|
int i,numContacts = manifold->GetNumContacts();
|
||||||
|
|
||||||
RigidBody* body0,*body1;
|
bool swapBodies = (bodyId0 < 0);
|
||||||
|
|
||||||
if (swapBodies)
|
|
||||||
{
|
RigidBody* body0,*body1;
|
||||||
bodyId0 = _bodyId1;
|
|
||||||
bodyId1 = _bodyId0;
|
if (swapBodies)
|
||||||
|
{
|
||||||
body0 = (RigidBody*)manifold->GetBody1();
|
bodyId0 = _bodyId1;
|
||||||
body1 = (RigidBody*)manifold->GetBody0();
|
bodyId1 = _bodyId0;
|
||||||
|
|
||||||
} else
|
body0 = (RigidBody*)manifold->GetBody1();
|
||||||
{
|
body1 = (RigidBody*)manifold->GetBody0();
|
||||||
body0 = (RigidBody*)manifold->GetBody0();
|
|
||||||
body1 = (RigidBody*)manifold->GetBody1();
|
} else
|
||||||
}
|
{
|
||||||
|
body0 = (RigidBody*)manifold->GetBody0();
|
||||||
assert(bodyId0 >= 0);
|
body1 = (RigidBody*)manifold->GetBody1();
|
||||||
|
}
|
||||||
SimdVector3 color(0,1,0);
|
|
||||||
for (i=0;i<numContacts;i++)
|
assert(bodyId0 >= 0);
|
||||||
{
|
|
||||||
|
SimdVector3 color(0,1,0);
|
||||||
if (debugDrawer)
|
for (i=0;i<numContacts;i++)
|
||||||
{
|
{
|
||||||
const ManifoldPoint& cp = manifold->GetContactPoint(i);
|
|
||||||
|
if (debugDrawer)
|
||||||
debugDrawer->DrawContactPoint(
|
{
|
||||||
cp.m_positionWorldOnB,
|
const ManifoldPoint& cp = manifold->GetContactPoint(i);
|
||||||
cp.m_normalWorldOnB,
|
|
||||||
cp.GetDistance(),
|
debugDrawer->DrawContactPoint(
|
||||||
cp.GetLifeTime(),
|
cp.m_positionWorldOnB,
|
||||||
color);
|
cp.m_normalWorldOnB,
|
||||||
|
cp.GetDistance(),
|
||||||
}
|
cp.GetLifeTime(),
|
||||||
assert (m_CurJoint < MAX_JOINTS_1);
|
color);
|
||||||
|
|
||||||
// if (manifold->GetContactPoint(i).GetDistance() < 0.0f)
|
}
|
||||||
{
|
assert (m_CurJoint < MAX_JOINTS_1);
|
||||||
ContactJoint* cont = new (&gJointArray[m_CurJoint++]) ContactJoint( manifold ,i, swapBodies,body0,body1);
|
|
||||||
|
// if (manifold->GetContactPoint(i).GetDistance() < 0.0f)
|
||||||
cont->node[0].joint = cont;
|
{
|
||||||
cont->node[0].body = bodyId0 >= 0 ? bodies[bodyId0] : 0;
|
ContactJoint* cont = new (&gJointArray[m_CurJoint++]) ContactJoint( manifold ,i, swapBodies,body0,body1);
|
||||||
|
|
||||||
cont->node[1].joint = cont;
|
cont->node[0].joint = cont;
|
||||||
cont->node[1].body = bodyId1 >= 0 ? bodies[bodyId1] : 0;
|
cont->node[0].body = bodyId0 >= 0 ? bodies[bodyId0] : 0;
|
||||||
|
|
||||||
joints[numJoints++] = cont;
|
cont->node[1].joint = cont;
|
||||||
for (int i=0;i<6;i++)
|
cont->node[1].body = bodyId1 >= 0 ? bodies[bodyId1] : 0;
|
||||||
cont->lambda[i] = 0.f;
|
|
||||||
|
joints[numJoints++] = cont;
|
||||||
cont->flags = 0;
|
for (int i=0;i<6;i++)
|
||||||
}
|
cont->lambda[i] = 0.f;
|
||||||
}
|
|
||||||
|
cont->flags = 0;
|
||||||
//create a new contact constraint
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
|
//create a new contact constraint
|
||||||
|
};
|
||||||
|
|
||||||
@@ -1,66 +1,66 @@
|
|||||||
/*
|
/*
|
||||||
Bullet Continuous Collision Detection and Physics Library
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty.
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
In no event will the authors be held liable for any damages arising from the use of this software.
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it freely,
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
subject to the following restrictions:
|
subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ODE_CONSTRAINT_SOLVER_H
|
#ifndef ODE_CONSTRAINT_SOLVER_H
|
||||||
#define ODE_CONSTRAINT_SOLVER_H
|
#define ODE_CONSTRAINT_SOLVER_H
|
||||||
|
|
||||||
#include "ConstraintSolver.h"
|
#include "ConstraintSolver.h"
|
||||||
|
|
||||||
class RigidBody;
|
class RigidBody;
|
||||||
class BU_Joint;
|
class BU_Joint;
|
||||||
|
|
||||||
/// OdeConstraintSolver is one of the available solvers for Bullet dynamics framework
|
/// OdeConstraintSolver is one of the available solvers for Bullet dynamics framework
|
||||||
/// It uses the the unmodified version of quickstep solver from the open dynamics project
|
/// It uses the the unmodified version of quickstep solver from the open dynamics project
|
||||||
class OdeConstraintSolver : public ConstraintSolver
|
class OdeConstraintSolver : public ConstraintSolver
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
int m_CurBody;
|
int m_CurBody;
|
||||||
int m_CurJoint;
|
int m_CurJoint;
|
||||||
|
|
||||||
float m_cfm;
|
float m_cfm;
|
||||||
float m_erp;
|
float m_erp;
|
||||||
|
|
||||||
|
|
||||||
int ConvertBody(RigidBody* body,RigidBody** bodies,int& numBodies);
|
int ConvertBody(RigidBody* body,RigidBody** bodies,int& numBodies);
|
||||||
void ConvertConstraint(PersistentManifold* manifold,BU_Joint** joints,int& numJoints,
|
void ConvertConstraint(PersistentManifold* manifold,BU_Joint** joints,int& numJoints,
|
||||||
RigidBody** bodies,int _bodyId0,int _bodyId1,IDebugDraw* debugDrawer);
|
RigidBody** bodies,int _bodyId0,int _bodyId1,IDebugDraw* debugDrawer);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
OdeConstraintSolver();
|
OdeConstraintSolver();
|
||||||
|
|
||||||
virtual ~OdeConstraintSolver() {}
|
virtual ~OdeConstraintSolver() {}
|
||||||
|
|
||||||
virtual float SolveGroup(PersistentManifold** manifold,int numManifolds,const ContactSolverInfo& info,IDebugDraw* debugDrawer = 0);
|
virtual float SolveGroup(PersistentManifold** manifold,int numManifolds,const ContactSolverInfo& info,IDebugDraw* debugDrawer = 0);
|
||||||
|
|
||||||
///setConstraintForceMixing, the cfm adds some positive value to the main diagonal
|
///setConstraintForceMixing, the cfm adds some positive value to the main diagonal
|
||||||
///This can improve convergence (make matrix positive semidefinite), but it can make the simulation look more 'springy'
|
///This can improve convergence (make matrix positive semidefinite), but it can make the simulation look more 'springy'
|
||||||
void setConstraintForceMixing(float cfm) {
|
void setConstraintForceMixing(float cfm) {
|
||||||
m_cfm = cfm;
|
m_cfm = cfm;
|
||||||
}
|
}
|
||||||
|
|
||||||
///setErrorReductionParamter sets the maximum amount of error reduction
|
///setErrorReductionParamter sets the maximum amount of error reduction
|
||||||
///which limits energy addition during penetration depth recovery
|
///which limits energy addition during penetration depth recovery
|
||||||
void setErrorReductionParamter(float erp)
|
void setErrorReductionParamter(float erp)
|
||||||
{
|
{
|
||||||
m_erp = erp;
|
m_erp = erp;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //ODE_CONSTRAINT_SOLVER_H
|
#endif //ODE_CONSTRAINT_SOLVER_H
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,45 +1,45 @@
|
|||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* *
|
* *
|
||||||
* Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. *
|
* Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. *
|
||||||
* All rights reserved. Email: russ@q12.org Web: www.q12.org *
|
* All rights reserved. Email: russ@q12.org Web: www.q12.org *
|
||||||
* *
|
* *
|
||||||
* This library is free software; you can redistribute it and/or *
|
* This library is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of EITHER: *
|
* modify it under the terms of EITHER: *
|
||||||
* (1) The GNU Lesser General Public License as published by the Free *
|
* (1) The GNU Lesser General Public License as published by the Free *
|
||||||
* Software Foundation; either version 2.1 of the License, or (at *
|
* Software Foundation; either version 2.1 of the License, or (at *
|
||||||
* your option) any later version. The text of the GNU Lesser *
|
* your option) any later version. The text of the GNU Lesser *
|
||||||
* General Public License is included with this library in the *
|
* General Public License is included with this library in the *
|
||||||
* file LICENSE.TXT. *
|
* file LICENSE.TXT. *
|
||||||
* (2) The BSD-style license that is included with this library in *
|
* (2) The BSD-style license that is included with this library in *
|
||||||
* the file LICENSE-BSD.TXT. *
|
* the file LICENSE-BSD.TXT. *
|
||||||
* *
|
* *
|
||||||
* This library is distributed in the hope that it will be useful, *
|
* This library is distributed in the hope that it will be useful, *
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files *
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files *
|
||||||
* LICENSE.TXT and LICENSE-BSD.TXT for more details. *
|
* LICENSE.TXT and LICENSE-BSD.TXT for more details. *
|
||||||
* *
|
* *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
#define USE_SOR_SOLVER
|
#define USE_SOR_SOLVER
|
||||||
#ifdef USE_SOR_SOLVER
|
#ifdef USE_SOR_SOLVER
|
||||||
|
|
||||||
#ifndef SOR_LCP_H
|
#ifndef SOR_LCP_H
|
||||||
#define SOR_LCP_H
|
#define SOR_LCP_H
|
||||||
class RigidBody;
|
class RigidBody;
|
||||||
class BU_Joint;
|
class BU_Joint;
|
||||||
#include "SimdScalar.h"
|
#include "SimdScalar.h"
|
||||||
|
|
||||||
struct ContactSolverInfo;
|
struct ContactSolverInfo;
|
||||||
|
|
||||||
void SolveInternal1 (float global_cfm,
|
void SolveInternal1 (float global_cfm,
|
||||||
float global_erp,
|
float global_erp,
|
||||||
RigidBody * const *body, int nb,
|
RigidBody * const *body, int nb,
|
||||||
BU_Joint * const *_joint, int nj, const ContactSolverInfo& info);
|
BU_Joint * const *_joint, int nj, const ContactSolverInfo& info);
|
||||||
|
|
||||||
int dRandInt2 (int n);
|
int dRandInt2 (int n);
|
||||||
|
|
||||||
|
|
||||||
#endif //SOR_LCP_H
|
#endif //SOR_LCP_H
|
||||||
|
|
||||||
#endif //USE_SOR_SOLVER
|
#endif //USE_SOR_SOLVER
|
||||||
|
|
||||||
@@ -1,15 +1,17 @@
|
|||||||
<?xml version="1.0" encoding = "Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8.00"
|
Version="8.00"
|
||||||
Name="libbullet"
|
Name="libbullet"
|
||||||
ProjectGUID="{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}"
|
ProjectGUID="{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}"
|
||||||
SccProjectName=""
|
>
|
||||||
SccLocalPath="">
|
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
Name="Win32"/>
|
Name="Win32"
|
||||||
|
/>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release|Win32"
|
||||||
@@ -17,73 +19,82 @@
|
|||||||
IntermediateDirectory="..\..\out\release8\build\libbullet\"
|
IntermediateDirectory="..\..\out\release8\build\libbullet\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\release8\build\libbullet\libbullet.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
BufferSecurityCheck="FALSE"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="2"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
StringPooling="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
BufferSecurityCheck="false"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
PrecompiledHeaderFile="..\..\out\release8\build\libbullet\libbullet.pch"
|
PrecompiledHeaderFile="..\..\out\release8\build\libbullet\libbullet.pch"
|
||||||
AssemblerListingLocation="..\..\out\release8\build\libbullet\"
|
AssemblerListingLocation="..\..\out\release8\build\libbullet\"
|
||||||
ObjectFile="..\..\out\release8\build\libbullet\"
|
ObjectFile="..\..\out\release8\build\libbullet\"
|
||||||
ProgramDataBaseFileName="..\..\out\release8\build\libbullet\bullet.pdb"
|
ProgramDataBaseFileName="..\..\out\release8\build\libbullet\bullet.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="3"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="1"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\release8\build\libbullet\bullet.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\release8\libs\libbullet.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\release8\build\libbullet\libbullet.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\release8\libs\libbullet.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug|Win32"
|
||||||
@@ -91,471 +102,554 @@
|
|||||||
IntermediateDirectory="..\..\out\debug8\build\libbullet\"
|
IntermediateDirectory="..\..\out\debug8\build\libbullet\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\debug8\build\libbullet\libbullet.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
|
||||||
MinimalRebuild="TRUE"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
RuntimeTypeInfo="FALSE"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
PrecompiledHeaderFile="..\..\out\debug8\build\libbullet\libbullet.pch"
|
PrecompiledHeaderFile="..\..\out\debug8\build\libbullet\libbullet.pch"
|
||||||
AssemblerListingLocation="..\..\out\debug8\build\libbullet\"
|
AssemblerListingLocation="..\..\out\debug8\build\libbullet\"
|
||||||
ObjectFile="..\..\out\debug8\build\libbullet\"
|
ObjectFile="..\..\out\debug8\build\libbullet\"
|
||||||
ProgramDataBaseFileName="..\..\out\debug8\build\libbullet\bullet.pdb"
|
ProgramDataBaseFileName="..\..\out\debug8\build\libbullet\bullet.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="4"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\debug8\build\libbullet\bullet.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\debug8\libs\libbullet_d.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\debug8\build\libbullet\libbullet.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\debug8\libs\libbullet_d.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
<Files>
|
<Files>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\AxisSweep3.cpp">
|
RelativePath="..\..\Bullet\BroadphaseCollision\AxisSweep3.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\BroadphaseProxy.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\BoxShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\CollisionAlgorithm.cpp">
|
RelativePath="..\..\Bullet\BroadphaseCollision\BroadphaseProxy.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\Dispatcher.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\BvhTriangleMeshShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\SimpleBroadphase.cpp">
|
RelativePath="..\..\Bullet\BroadphaseCollision\CollisionAlgorithm.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\CollisionDispatcher.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\CollisionDispatcher.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\CollisionObject.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\CollisionObject.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\CollisionWorld.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\CollisionShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\CompoundCollisionAlgorithm.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\CollisionWorld.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\ConvexConcaveCollisionAlgorithm.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\CompoundCollisionAlgorithm.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\ConvexConvexAlgorithm.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\CompoundShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\EmptyCollisionAlgorithm.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\ConeShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\ManifoldResult.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\ContinuousConvexCollision.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\UnionFind.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\ConvexCast.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\BoxShape.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\ConvexConcaveCollisionAlgorithm.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\BvhTriangleMeshShape.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\ConvexConvexAlgorithm.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\CollisionShape.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\ConvexHullShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\CompoundShape.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\ConvexShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\ConeShape.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\ConvexTriangleMeshShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\ConvexHullShape.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\CylinderShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\ConvexShape.cpp">
|
RelativePath="..\..\Bullet\BroadphaseCollision\Dispatcher.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\ConvexTriangleMeshShape.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\EmptyCollisionAlgorithm.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\CylinderShape.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\EmptyShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\EmptyShape.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\GjkConvexCast.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\MinkowskiSumShape.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\GjkPairDetector.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\MultiSphereShape.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\Hull.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\OptimizedBvh.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\ManifoldContactAddResult.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\PolyhedralConvexShape.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\ManifoldResult.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\Simplex1to4Shape.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\MinkowskiPenetrationDepthSolver.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\SphereShape.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\MinkowskiSumShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\StridingMeshInterface.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\MultiSphereShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleCallback.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\OptimizedBvh.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleIndexVertexArray.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\PersistentManifold.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleMesh.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\PolyhedralConvexShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleMeshShape.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\RaycastCallback.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_AlgebraicPolynomialSolver.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\Shape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_Collidable.cpp">
|
RelativePath="..\..\Bullet\BroadphaseCollision\SimpleBroadphase.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_CollisionPair.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\Simplex1to4Shape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_EdgeEdge.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\SphereShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_Screwing.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\StridingMeshInterface.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_VertexPoly.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\SubSimplexConvexCast.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\ContinuousConvexCollision.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleCallback.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\ConvexCast.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleIndexVertexArray.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\Epa.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleMesh.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaFace.cpp">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleMeshShape.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaPenetrationDepthSolver.cpp">
|
RelativePath="..\..\Bullet\CollisionDispatch\UnionFind.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaPolyhedron.cpp">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\VoronoiSimplexSolver.cpp"
|
||||||
</File>
|
>
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\GjkConvexCast.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\GjkPairDetector.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\Hull.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\ManifoldContactAddResult.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\MinkowskiPenetrationDepthSolver.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\PersistentManifold.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\RaycastCallback.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\Shape.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\SubSimplexConvexCast.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\VoronoiSimplexSolver.cpp">
|
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\AxisSweep3.h">
|
RelativePath="..\..\Bullet\BroadphaseCollision\AxisSweep3.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\BroadphaseInterface.h">
|
RelativePath="..\..\Bullet\CollisionShapes\BoxShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\BroadphaseProxy.h">
|
RelativePath="..\..\Bullet\BroadphaseCollision\BroadphaseInterface.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\CollisionAlgorithm.h">
|
RelativePath="..\..\Bullet\BroadphaseCollision\BroadphaseProxy.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\Dispatcher.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_AlgebraicPolynomialSolver.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\BroadphaseCollision\SimpleBroadphase.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_Collidable.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\CollisionDispatcher.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_CollisionPair.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\CollisionObject.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_EdgeEdge.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\CollisionWorld.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_MotionStateInterface.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\CompoundCollisionAlgorithm.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_PolynomialSolverInterface.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\ConvexConcaveCollisionAlgorithm.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_Screwing.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\ConvexConvexAlgorithm.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_StaticMotionState.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\EmptyCollisionAlgorithm.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_VertexPoly.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\ManifoldResult.h">
|
RelativePath="..\..\Bullet\CollisionShapes\BvhTriangleMeshShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionDispatch\UnionFind.h">
|
RelativePath="..\..\Bullet\BroadphaseCollision\CollisionAlgorithm.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\BoxShape.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\CollisionDispatcher.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\BvhTriangleMeshShape.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\CollisionMargin.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\CollisionMargin.h">
|
RelativePath="..\..\Bullet\CollisionShapes\CollisionMargin.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\CollisionShape.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\CollisionObject.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\CompoundShape.h">
|
RelativePath="..\..\Bullet\CollisionShapes\CollisionShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\ConeShape.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\CollisionWorld.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\ConvexHullShape.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\CompoundCollisionAlgorithm.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\ConvexShape.h">
|
RelativePath="..\..\Bullet\CollisionShapes\CompoundShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\ConvexTriangleMeshShape.h">
|
RelativePath="..\..\Bullet\CollisionShapes\ConeShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\CylinderShape.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\ContinuousConvexCollision.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\EmptyShape.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\ConvexCast.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\MinkowskiSumShape.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\ConvexConcaveCollisionAlgorithm.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\MultiSphereShape.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\ConvexConvexAlgorithm.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\OptimizedBvh.h">
|
RelativePath="..\..\Bullet\CollisionShapes\ConvexHullShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\PolyhedralConvexShape.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\ConvexPenetrationDepthSolver.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\Simplex1to4Shape.h">
|
RelativePath="..\..\Bullet\CollisionShapes\ConvexShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\SphereShape.h">
|
RelativePath="..\..\Bullet\CollisionShapes\ConvexTriangleMeshShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\StridingMeshInterface.h">
|
RelativePath="..\..\Bullet\CollisionShapes\CylinderShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleCallback.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\DiscreteCollisionDetectorInterface.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleIndexVertexArray.h">
|
RelativePath="..\..\Bullet\BroadphaseCollision\Dispatcher.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleMesh.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\EmptyCollisionAlgorithm.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleMeshShape.h">
|
RelativePath="..\..\Bullet\CollisionShapes\EmptyShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\CollisionShapes\TriangleShape.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\GjkConvexCast.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_AlgebraicPolynomialSolver.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\GjkPairDetector.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_Collidable.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\Hull.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_CollisionPair.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\HullContactCollector.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_EdgeEdge.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\ManifoldContactAddResult.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_MotionStateInterface.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\ManifoldPoint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_PolynomialSolverInterface.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\ManifoldResult.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_Screwing.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\MinkowskiPenetrationDepthSolver.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_StaticMotionState.h">
|
RelativePath="..\..\Bullet\CollisionShapes\MinkowskiSumShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\BU_VertexPoly.h">
|
RelativePath="..\..\Bullet\CollisionShapes\MultiSphereShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\CollisionMargin.h">
|
RelativePath="..\..\Bullet\CollisionShapes\OptimizedBvh.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\ContinuousConvexCollision.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\PersistentManifold.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\ConvexCast.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\PointCollector.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\ConvexPenetrationDepthSolver.h">
|
RelativePath="..\..\Bullet\CollisionShapes\PolyhedralConvexShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\DiscreteCollisionDetectorInterface.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\RaycastCallback.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\Epa.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\Shape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaCommon.h">
|
RelativePath="..\..\Bullet\BroadphaseCollision\SimpleBroadphase.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaFace.h">
|
RelativePath="..\..\Bullet\CollisionShapes\Simplex1to4Shape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaHalfEdge.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\SimplexSolverInterface.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaPenetrationDepthSolver.h">
|
RelativePath="..\..\Bullet\CollisionShapes\SphereShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaPolyhedron.h">
|
RelativePath="..\..\Bullet\CollisionShapes\StridingMeshInterface.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\EpaVertex.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\SubSimplexConvexCast.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\GjkConvexCast.h">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleCallback.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\GjkPairDetector.h">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleIndexVertexArray.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\Hull.h">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleMesh.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\HullContactCollector.h">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleMeshShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\ManifoldContactAddResult.h">
|
RelativePath="..\..\Bullet\CollisionShapes\TriangleShape.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\ManifoldPoint.h">
|
RelativePath="..\..\Bullet\CollisionDispatch\UnionFind.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\MinkowskiPenetrationDepthSolver.h">
|
RelativePath="..\..\Bullet\NarrowPhaseCollision\VoronoiSimplexSolver.h"
|
||||||
</File>
|
>
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\PersistentManifold.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\PointCollector.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\RaycastCallback.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\Shape.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\SimplexSolverInterface.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\SubSimplexConvexCast.h">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\Bullet\NarrowPhaseCollision\VoronoiSimplexSolver.h">
|
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Bullet\BroadphaseCollision\OverlappingPairCache.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Bullet\BroadphaseCollision\OverlappingPairCache.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
<Globals>
|
<Globals>
|
||||||
</Globals>
|
</Globals>
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
<?xml version="1.0" encoding = "Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8.00"
|
Version="8.00"
|
||||||
Name="libbulletccdphysics"
|
Name="libbulletccdphysics"
|
||||||
ProjectGUID="{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}"
|
ProjectGUID="{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}"
|
||||||
SccProjectName=""
|
>
|
||||||
SccLocalPath="">
|
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
Name="Win32"/>
|
Name="Win32"
|
||||||
|
/>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release|Win32"
|
||||||
@@ -17,73 +19,82 @@
|
|||||||
IntermediateDirectory="..\..\out\release8\build\libbulletccdphysics\"
|
IntermediateDirectory="..\..\out\release8\build\libbulletccdphysics\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\release8\build\libbulletccdphysics\libbulletccdphysics.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
BufferSecurityCheck="FALSE"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="2"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
StringPooling="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
BufferSecurityCheck="false"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
PrecompiledHeaderFile="..\..\out\release8\build\libbulletccdphysics\libbulletccdphysics.pch"
|
PrecompiledHeaderFile="..\..\out\release8\build\libbulletccdphysics\libbulletccdphysics.pch"
|
||||||
AssemblerListingLocation="..\..\out\release8\build\libbulletccdphysics\"
|
AssemblerListingLocation="..\..\out\release8\build\libbulletccdphysics\"
|
||||||
ObjectFile="..\..\out\release8\build\libbulletccdphysics\"
|
ObjectFile="..\..\out\release8\build\libbulletccdphysics\"
|
||||||
ProgramDataBaseFileName="..\..\out\release8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
ProgramDataBaseFileName="..\..\out\release8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="3"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="1"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\release8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\release8\libs\libbulletccdphysics.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\release8\build\libbulletccdphysics\libbulletccdphysics.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\release8\libs\libbulletccdphysics.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug|Win32"
|
||||||
@@ -91,91 +102,116 @@
|
|||||||
IntermediateDirectory="..\..\out\debug8\build\libbulletccdphysics\"
|
IntermediateDirectory="..\..\out\debug8\build\libbulletccdphysics\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\debug8\build\libbulletccdphysics\libbulletccdphysics.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
|
||||||
MinimalRebuild="TRUE"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
RuntimeTypeInfo="FALSE"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
PrecompiledHeaderFile="..\..\out\debug8\build\libbulletccdphysics\libbulletccdphysics.pch"
|
PrecompiledHeaderFile="..\..\out\debug8\build\libbulletccdphysics\libbulletccdphysics.pch"
|
||||||
AssemblerListingLocation="..\..\out\debug8\build\libbulletccdphysics\"
|
AssemblerListingLocation="..\..\out\debug8\build\libbulletccdphysics\"
|
||||||
ObjectFile="..\..\out\debug8\build\libbulletccdphysics\"
|
ObjectFile="..\..\out\debug8\build\libbulletccdphysics\"
|
||||||
ProgramDataBaseFileName="..\..\out\debug8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
ProgramDataBaseFileName="..\..\out\debug8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="4"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\debug8\build\libbulletccdphysics\bulletccdphysics.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\debug8\libs\libbulletccdphysics_d.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\debug8\build\libbulletccdphysics\libbulletccdphysics.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath;..\..\Extras\PhysicsInterface\Common"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\debug8\libs\libbulletccdphysics_d.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
<Files>
|
<Files>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsController.cpp">
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsController.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsEnvironment.cpp">
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsEnvironment.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\ParallelPhysicsEnvironment.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsController.h">
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsController.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsEnvironment.h">
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\CcdPhysicsEnvironment.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Extras\PhysicsInterface\CcdPhysics\ParallelPhysicsEnvironment.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
</Files>
|
</Files>
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
<?xml version="1.0" encoding = "Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="8.00"
|
Version="8.00"
|
||||||
Name="libbulletdynamics"
|
Name="libbulletdynamics"
|
||||||
ProjectGUID="{61BD1097-CF2E-B296-DAA9-73A6FE135319}"
|
ProjectGUID="{61BD1097-CF2E-B296-DAA9-73A6FE135319}"
|
||||||
SccProjectName=""
|
>
|
||||||
SccLocalPath="">
|
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
Name="Win32"/>
|
Name="Win32"
|
||||||
|
/>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release|Win32"
|
||||||
@@ -17,73 +19,82 @@
|
|||||||
IntermediateDirectory="..\..\out\release8\build\libbulletdynamics\"
|
IntermediateDirectory="..\..\out\release8\build\libbulletdynamics\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="2"
|
|
||||||
StringPooling="TRUE"
|
|
||||||
EnableFunctionLevelLinking="TRUE"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
BufferSecurityCheck="FALSE"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="2"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
StringPooling="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
BufferSecurityCheck="false"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
PrecompiledHeaderFile="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.pch"
|
PrecompiledHeaderFile="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.pch"
|
||||||
AssemblerListingLocation="..\..\out\release8\build\libbulletdynamics\"
|
AssemblerListingLocation="..\..\out\release8\build\libbulletdynamics\"
|
||||||
ObjectFile="..\..\out\release8\build\libbulletdynamics\"
|
ObjectFile="..\..\out\release8\build\libbulletdynamics\"
|
||||||
ProgramDataBaseFileName="..\..\out\release8\build\libbulletdynamics\bulletdynamics.pdb"
|
ProgramDataBaseFileName="..\..\out\release8\build\libbulletdynamics\bulletdynamics.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="3"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="1"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\release8\build\libbulletdynamics\bulletdynamics.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\release8\libs\libbulletdynamics.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\release8\build\libbulletdynamics\libbulletdynamics.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="NDEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\release8\libs\libbulletdynamics.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug|Win32"
|
||||||
@@ -91,165 +102,202 @@
|
|||||||
IntermediateDirectory="..\..\out\debug8\build\libbulletdynamics\"
|
IntermediateDirectory="..\..\out\debug8\build\libbulletdynamics\"
|
||||||
ConfigurationType="4"
|
ConfigurationType="4"
|
||||||
UseOfMFC="0"
|
UseOfMFC="0"
|
||||||
ATLMinimizesCRunTimeLibraryUsage="FALSE">
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.tlb"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
|
||||||
MinimalRebuild="TRUE"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
RuntimeTypeInfo="FALSE"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
|
||||||
OptimizeForProcessor="1"
|
|
||||||
ExceptionHandling="0"
|
|
||||||
AdditionalOptions=" "
|
AdditionalOptions=" "
|
||||||
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;WIN32"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
ExceptionHandling="0"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
TreatWChar_tAsBuiltInType="false"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
PrecompiledHeaderFile="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.pch"
|
PrecompiledHeaderFile="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.pch"
|
||||||
AssemblerListingLocation="..\..\out\debug8\build\libbulletdynamics\"
|
AssemblerListingLocation="..\..\out\debug8\build\libbulletdynamics\"
|
||||||
ObjectFile="..\..\out\debug8\build\libbulletdynamics\"
|
ObjectFile="..\..\out\debug8\build\libbulletdynamics\"
|
||||||
ProgramDataBaseFileName="..\..\out\debug8\build\libbulletdynamics\bulletdynamics.pdb"
|
ProgramDataBaseFileName="..\..\out\debug8\build\libbulletdynamics\bulletdynamics.pdb"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
SuppressStartupBanner="TRUE"
|
SuppressStartupBanner="true"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="true"
|
||||||
TreatWChar_tAsBuiltInType="false"
|
DebugInformationFormat="4"
|
||||||
CompileAs="0"/>
|
CompileAs="0"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCManagedResourceCompilerTool"
|
||||||
<Tool
|
/>
|
||||||
Name="VCLinkerTool"
|
|
||||||
LinkIncremental="2"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
IgnoreDefaultLibraryNames="LIBC,LIBCD"
|
|
||||||
AdditionalOptions=" "
|
|
||||||
AdditionalDependencies=""
|
|
||||||
IgnoreImportLibrary="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
GenerateManifest="false"
|
|
||||||
AdditionalLibraryDirectories=""
|
|
||||||
ProgramDatabaseFile="..\..\out\debug8\build\libbulletdynamics\bulletdynamics.pdb"
|
|
||||||
TargetMachine="1"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="..\..\out\debug8\libs\libbulletdynamics_d.lib"
|
|
||||||
SuppressStartupBanner="TRUE"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS"
|
|
||||||
MkTypLibCompatible="TRUE"
|
|
||||||
SuppressStartupBanner="TRUE"
|
|
||||||
TargetEnvironment="1"
|
|
||||||
TypeLibraryName="..\..\out\debug8\build\libbulletdynamics\libbulletdynamics.tlb"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"
|
Name="VCResourceCompilerTool"
|
||||||
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
PreprocessorDefinitions="_DEBUG;_LIB;_WINDOWS;PROJECTGEN_VERSION=8"
|
||||||
|
Culture="1033"
|
||||||
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
AdditionalIncludeDirectories=".;..\..;..\..\Bullet;..\..\BulletDynamics;..\..\LinearMath"
|
||||||
Culture="1033"/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCLibrarianTool"
|
||||||
|
OutputFile="..\..\out\debug8\libs\libbulletdynamics_d.lib"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
<Files>
|
<Files>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\OdeConstraintSolver.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\SimpleConstraintSolver.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\SorLcp.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.cpp"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.cpp">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.cpp"
|
||||||
</File>
|
>
|
||||||
<File
|
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.cpp">
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.cpp">
|
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="">
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\ConstraintSolver.h">
|
RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\ConstraintSolver.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactSolverInfo.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.h">
|
RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\ContactSolverInfo.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\JacobianEntry.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Generic6DofConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\OdeConstraintSolver.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\HingeConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\JacobianEntry.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\SimpleConstraintSolver.h">
|
RelativePath="..\..\BulletDynamics\Dynamics\MassProps.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\OdeConstraintSolver.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\SorLcp.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Point2PointConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.h">
|
RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\BU_Joint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\SimpleConstraintSolver.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\ContactJoint.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\Solve2LinearConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\MassProps.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\SorLcp.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\BulletDynamics\Dynamics\RigidBody.h">
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\TypedConstraint.h"
|
||||||
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\SequentialImpulseConstraintSolver.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\BulletDynamics\ConstraintSolver\SequentialImpulseConstraintSolver.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
<Globals>
|
<Globals>
|
||||||
</Globals>
|
</Globals>
|
||||||
|
|||||||
@@ -1,34 +1,172 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
# Visual C++ Express 2005
|
# Visual Studio 2005
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCcdPhysicsDemo", "appCcdPhysicsDemo.vcproj", "{7284F809-AF30-6315-88C6-86F1C0798760}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCcdPhysicsDemo", "appCcdPhysicsDemo.vcproj", "{7284F809-AF30-6315-88C6-86F1C0798760}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appColladaDemo", "appColladaDemo.vcproj", "{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appColladaDemo", "appColladaDemo.vcproj", "{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{A0958CD9-0E39-4A77-3711-9B488F508FBF} = {A0958CD9-0E39-4A77-3711-9B488F508FBF}
|
||||||
|
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}
|
||||||
|
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4} = {5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionDemo", "appCollisionDemo.vcproj", "{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionDemo", "appCollisionDemo.vcproj", "{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionInterfaceDemo", "appCollisionInterfaceDemo.vcproj", "{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appCollisionInterfaceDemo", "appCollisionInterfaceDemo.vcproj", "{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConcaveDemo", "appConcaveDemo.vcproj", "{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConcaveDemo", "appConcaveDemo.vcproj", "{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConstraintDemo", "appConstraintDemo.vcproj", "{DAA547D0-0166-C085-0F93-B88CAB800F97}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConstraintDemo", "appConstraintDemo.vcproj", "{DAA547D0-0166-C085-0F93-B88CAB800F97}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appContinuousConvexCollision", "appContinuousConvexCollision.vcproj", "{801CB6D4-A45C-C9D2-B176-9711A74B9164}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appContinuousConvexCollision", "appContinuousConvexCollision.vcproj", "{801CB6D4-A45C-C9D2-B176-9711A74B9164}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConvexDecompositionDemo", "appConvexDecompositionDemo.vcproj", "{69C821C7-1E18-D894-068D-C55E063F4859}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appConvexDecompositionDemo", "appConvexDecompositionDemo.vcproj", "{69C821C7-1E18-D894-068D-C55E063F4859}"
|
||||||
EndProject
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appEPAPenDepthDemo", "appEPAPenDepthDemo.vcproj", "{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}"
|
{A0958CD9-0E39-4A77-3711-9B488F508FBF} = {A0958CD9-0E39-4A77-3711-9B488F508FBF}
|
||||||
|
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}
|
||||||
|
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4} = {5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appGjkConvexCastDemo", "appGjkConvexCastDemo.vcproj", "{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appGjkConvexCastDemo", "appGjkConvexCastDemo.vcproj", "{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appRaytracer", "appRaytracer.vcproj", "{60F71B6A-F888-C449-EF49-268BB9F7C963}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appRaytracer", "appRaytracer.vcproj", "{60F71B6A-F888-C449-EF49-268BB9F7C963}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appSimplexDemo", "appSimplexDemo.vcproj", "{60A1DC9D-F837-3923-E9DE-A7925394A578}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "appSimplexDemo", "appSimplexDemo.vcproj", "{60A1DC9D-F837-3923-E9DE-A7925394A578}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpall_bullet", "grpall_bullet.vcproj", "{6210A080-01C0-6D67-F1DB-669393175402}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpall_bullet", "grpall_bullet.vcproj", "{6210A080-01C0-6D67-F1DB-669393175402}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{A0958CD9-0E39-4A77-3711-9B488F508FBF} = {A0958CD9-0E39-4A77-3711-9B488F508FBF}
|
||||||
|
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}
|
||||||
|
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4} = {5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
{60A1DC9D-F837-3923-E9DE-A7925394A578} = {60A1DC9D-F837-3923-E9DE-A7925394A578}
|
||||||
|
{60F71B6A-F888-C449-EF49-268BB9F7C963} = {60F71B6A-F888-C449-EF49-268BB9F7C963}
|
||||||
|
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}
|
||||||
|
{69C821C7-1E18-D894-068D-C55E063F4859} = {69C821C7-1E18-D894-068D-C55E063F4859}
|
||||||
|
{801CB6D4-A45C-C9D2-B176-9711A74B9164} = {801CB6D4-A45C-C9D2-B176-9711A74B9164}
|
||||||
|
{DAA547D0-0166-C085-0F93-B88CAB800F97} = {DAA547D0-0166-C085-0F93-B88CAB800F97}
|
||||||
|
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}
|
||||||
|
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B} = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}
|
||||||
|
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}
|
||||||
|
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}
|
||||||
|
{7284F809-AF30-6315-88C6-86F1C0798760} = {7284F809-AF30-6315-88C6-86F1C0798760}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpapps_bullet", "grpapps_bullet.vcproj", "{9E59B16D-0924-409C-1611-DF2207A0053F}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpapps_bullet", "grpapps_bullet.vcproj", "{9E59B16D-0924-409C-1611-DF2207A0053F}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{60A1DC9D-F837-3923-E9DE-A7925394A578} = {60A1DC9D-F837-3923-E9DE-A7925394A578}
|
||||||
|
{60F71B6A-F888-C449-EF49-268BB9F7C963} = {60F71B6A-F888-C449-EF49-268BB9F7C963}
|
||||||
|
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1} = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}
|
||||||
|
{69C821C7-1E18-D894-068D-C55E063F4859} = {69C821C7-1E18-D894-068D-C55E063F4859}
|
||||||
|
{801CB6D4-A45C-C9D2-B176-9711A74B9164} = {801CB6D4-A45C-C9D2-B176-9711A74B9164}
|
||||||
|
{DAA547D0-0166-C085-0F93-B88CAB800F97} = {DAA547D0-0166-C085-0F93-B88CAB800F97}
|
||||||
|
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3} = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}
|
||||||
|
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B} = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}
|
||||||
|
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9} = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}
|
||||||
|
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF} = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}
|
||||||
|
{7284F809-AF30-6315-88C6-86F1C0798760} = {7284F809-AF30-6315-88C6-86F1C0798760}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grplibs_bullet", "grplibs_bullet.vcproj", "{DFAF0062-4CD7-9AB8-0683-A6026B326F56}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grplibs_bullet", "grplibs_bullet.vcproj", "{DFAF0062-4CD7-9AB8-0683-A6026B326F56}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{A0958CD9-0E39-4A77-3711-9B488F508FBF} = {A0958CD9-0E39-4A77-3711-9B488F508FBF}
|
||||||
|
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3} = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}
|
||||||
|
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4} = {5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}
|
||||||
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822} = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
||||||
|
{7C428E76-9271-6284-20F0-9B38ED6931E3} = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
||||||
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
||||||
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
||||||
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E} = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
||||||
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97} = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbullet", "libbullet.vcproj", "{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbullet", "libbullet.vcproj", "{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}"
|
||||||
EndProject
|
EndProject
|
||||||
@@ -49,232 +187,105 @@ EndProject
|
|||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblibxml", "liblibxml.vcproj", "{A0958CD9-0E39-4A77-3711-9B488F508FBF}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblibxml", "liblibxml.vcproj", "{A0958CD9-0E39-4A77-3711-9B488F508FBF}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfiguration) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
ConfigName.0 = Release
|
Debug|Win32 = Debug|Win32
|
||||||
ConfigName.1 = Debug
|
Release|Win32 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectDependencies) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{7284F809-AF30-6315-88C6-86F1C0798760}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{7284F809-AF30-6315-88C6-86F1C0798760}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{7284F809-AF30-6315-88C6-86F1C0798760}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{7284F809-AF30-6315-88C6-86F1C0798760}.Release|Win32.Build.0 = Release|Win32
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release|Win32.Build.0 = Release|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release|Win32.Build.0 = Release|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.6 = {5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}
|
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.7 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}
|
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.8 = {A0958CD9-0E39-4A77-3711-9B488F508FBF}
|
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release|Win32.Build.0 = Release|Win32
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release|Win32.Build.0 = Release|Win32
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{DAA547D0-0166-C085-0F93-B88CAB800F97}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{DAA547D0-0166-C085-0F93-B88CAB800F97}.Release|Win32.Build.0 = Release|Win32
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release|Win32.Build.0 = Release|Win32
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{69C821C7-1E18-D894-068D-C55E063F4859}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{69C821C7-1E18-D894-068D-C55E063F4859}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{69C821C7-1E18-D894-068D-C55E063F4859}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{69C821C7-1E18-D894-068D-C55E063F4859}.Release|Win32.Build.0 = Release|Win32
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release|Win32.Build.0 = Release|Win32
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{60F71B6A-F888-C449-EF49-268BB9F7C963}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{60F71B6A-F888-C449-EF49-268BB9F7C963}.Release|Win32.Build.0 = Release|Win32
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{60A1DC9D-F837-3923-E9DE-A7925394A578}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{60A1DC9D-F837-3923-E9DE-A7925394A578}.Release|Win32.Build.0 = Release|Win32
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{6210A080-01C0-6D67-F1DB-669393175402}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{6210A080-01C0-6D67-F1DB-669393175402}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{6210A080-01C0-6D67-F1DB-669393175402}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{6210A080-01C0-6D67-F1DB-669393175402}.Release|Win32.Build.0 = Release|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{9E59B16D-0924-409C-1611-DF2207A0053F}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{9E59B16D-0924-409C-1611-DF2207A0053F}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{9E59B16D-0924-409C-1611-DF2207A0053F}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.6 = {5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}
|
{9E59B16D-0924-409C-1611-DF2207A0053F}.Release|Win32.Build.0 = Release|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.7 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}
|
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.8 = {A0958CD9-0E39-4A77-3711-9B488F508FBF}
|
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release|Win32.Build.0 = Release|Win32
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release|Win32.Build.0 = Release|Win32
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release|Win32.Build.0 = Release|Win32
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Win32.Build.0 = Release|Win32
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Win32.Build.0 = Release|Win32
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
{7C428E76-9271-6284-20F0-9B38ED6931E3}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
{7C428E76-9271-6284-20F0-9B38ED6931E3}.Release|Win32.Build.0 = Release|Win32
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.0 = {7284F809-AF30-6315-88C6-86F1C0798760}
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.1 = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}
|
{85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release|Win32.Build.0 = Release|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.2 = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}
|
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.3 = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}
|
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.4 = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}
|
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.5 = {DAA547D0-0166-C085-0F93-B88CAB800F97}
|
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}.Release|Win32.Build.0 = Release|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.6 = {801CB6D4-A45C-C9D2-B176-9711A74B9164}
|
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.7 = {69C821C7-1E18-D894-068D-C55E063F4859}
|
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.8 = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}
|
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.9 = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}
|
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release|Win32.Build.0 = Release|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.10 = {60F71B6A-F888-C449-EF49-268BB9F7C963}
|
{A0958CD9-0E39-4A77-3711-9B488F508FBF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.11 = {60A1DC9D-F837-3923-E9DE-A7925394A578}
|
{A0958CD9-0E39-4A77-3711-9B488F508FBF}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.12 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
{A0958CD9-0E39-4A77-3711-9B488F508FBF}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.13 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
{A0958CD9-0E39-4A77-3711-9B488F508FBF}.Release|Win32.Build.0 = Release|Win32
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.14 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.15 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.16 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.17 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.18 = {5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.19 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.20 = {A0958CD9-0E39-4A77-3711-9B488F508FBF}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.0 = {7284F809-AF30-6315-88C6-86F1C0798760}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.1 = {D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.2 = {E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.3 = {F38629D2-EEB2-1A09-FB82-52B8A8DE759B}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.4 = {B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.5 = {DAA547D0-0166-C085-0F93-B88CAB800F97}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.6 = {801CB6D4-A45C-C9D2-B176-9711A74B9164}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.7 = {69C821C7-1E18-D894-068D-C55E063F4859}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.8 = {1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.9 = {780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.10 = {60F71B6A-F888-C449-EF49-268BB9F7C963}
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.11 = {60A1DC9D-F837-3923-E9DE-A7925394A578}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.0 = {90F5975E-550B-EEC8-9A8A-B8581D3FCF97}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.1 = {C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.2 = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.3 = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.4 = {7C428E76-9271-6284-20F0-9B38ED6931E3}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.5 = {85BCCE3E-992B-B6D7-28F6-CF0A12680822}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.6 = {5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.7 = {8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.8 = {A0958CD9-0E39-4A77-3711-9B488F508FBF}
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfiguration) = postSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.Release.ActiveCfg = Release|Win32
|
HideSolutionNode = FALSE
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.Release.Build.0 = Release|Win32
|
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{7284F809-AF30-6315-88C6-86F1C0798760}.Debug.Build.0 = Debug|Win32
|
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release.ActiveCfg = Release|Win32
|
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Release.Build.0 = Release|Win32
|
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{D7BF5DDA-C097-9E8B-5EC1-40DE45FB46BF}.Debug.Build.0 = Debug|Win32
|
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release.ActiveCfg = Release|Win32
|
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Release.Build.0 = Release|Win32
|
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{E70DB92E-C1F5-AE72-F9E2-DB9B4B3DBEC9}.Debug.Build.0 = Debug|Win32
|
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release.ActiveCfg = Release|Win32
|
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Release.Build.0 = Release|Win32
|
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{F38629D2-EEB2-1A09-FB82-52B8A8DE759B}.Debug.Build.0 = Debug|Win32
|
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release.ActiveCfg = Release|Win32
|
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Release.Build.0 = Release|Win32
|
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{B94C19C6-F6E7-2F60-56E2-E0BA681B74B3}.Debug.Build.0 = Debug|Win32
|
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.Release.ActiveCfg = Release|Win32
|
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.Release.Build.0 = Release|Win32
|
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{DAA547D0-0166-C085-0F93-B88CAB800F97}.Debug.Build.0 = Debug|Win32
|
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release.ActiveCfg = Release|Win32
|
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.Release.Build.0 = Release|Win32
|
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{801CB6D4-A45C-C9D2-B176-9711A74B9164}.Debug.Build.0 = Debug|Win32
|
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.Release.ActiveCfg = Release|Win32
|
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.Release.Build.0 = Release|Win32
|
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{69C821C7-1E18-D894-068D-C55E063F4859}.Debug.Build.0 = Debug|Win32
|
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release.ActiveCfg = Release|Win32
|
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Release.Build.0 = Release|Win32
|
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{1125C7F3-9E0D-27B1-C97B-CDAB5CE161A3}.Debug.Build.0 = Debug|Win32
|
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release.ActiveCfg = Release|Win32
|
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Release.Build.0 = Release|Win32
|
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{780752A8-6322-5D3E-EF42-D0FD8BF9CEA1}.Debug.Build.0 = Debug|Win32
|
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.Release.ActiveCfg = Release|Win32
|
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.Release.Build.0 = Release|Win32
|
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{60F71B6A-F888-C449-EF49-268BB9F7C963}.Debug.Build.0 = Debug|Win32
|
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.Release.ActiveCfg = Release|Win32
|
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.Release.Build.0 = Release|Win32
|
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{60A1DC9D-F837-3923-E9DE-A7925394A578}.Debug.Build.0 = Debug|Win32
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.Release.ActiveCfg = Release|Win32
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.Release.Build.0 = Release|Win32
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{6210A080-01C0-6D67-F1DB-669393175402}.Debug.Build.0 = Debug|Win32
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.Release.ActiveCfg = Release|Win32
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.Release.Build.0 = Release|Win32
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{9E59B16D-0924-409C-1611-DF2207A0053F}.Debug.Build.0 = Debug|Win32
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release.ActiveCfg = Release|Win32
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Release.Build.0 = Release|Win32
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{DFAF0062-4CD7-9AB8-0683-A6026B326F56}.Debug.Build.0 = Debug|Win32
|
|
||||||
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release.ActiveCfg = Release|Win32
|
|
||||||
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Release.Build.0 = Release|Win32
|
|
||||||
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{90F5975E-550B-EEC8-9A8A-B8581D3FCF97}.Debug.Build.0 = Debug|Win32
|
|
||||||
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release.ActiveCfg = Release|Win32
|
|
||||||
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Release.Build.0 = Release|Win32
|
|
||||||
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{C63CFD5B-23E8-FB4F-79DB-E40F463B0C1E}.Debug.Build.0 = Debug|Win32
|
|
||||||
{61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release.ActiveCfg = Release|Win32
|
|
||||||
{61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release.Build.0 = Release|Win32
|
|
||||||
{61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug.Build.0 = Debug|Win32
|
|
||||||
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release.ActiveCfg = Release|Win32
|
|
||||||
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release.Build.0 = Release|Win32
|
|
||||||
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug.Build.0 = Debug|Win32
|
|
||||||
{7C428E76-9271-6284-20F0-9B38ED6931E3}.Release.ActiveCfg = Release|Win32
|
|
||||||
{7C428E76-9271-6284-20F0-9B38ED6931E3}.Release.Build.0 = Release|Win32
|
|
||||||
{7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{7C428E76-9271-6284-20F0-9B38ED6931E3}.Debug.Build.0 = Debug|Win32
|
|
||||||
{85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release.ActiveCfg = Release|Win32
|
|
||||||
{85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Release.Build.0 = Release|Win32
|
|
||||||
{85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{85BCCE3E-992B-B6D7-28F6-CF0A12680822}.Debug.Build.0 = Debug|Win32
|
|
||||||
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}.Release.ActiveCfg = Release|Win32
|
|
||||||
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}.Release.Build.0 = Release|Win32
|
|
||||||
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{5E57E40B-B2C3-7595-57AB-A3936FFBD7D4}.Debug.Build.0 = Debug|Win32
|
|
||||||
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release.ActiveCfg = Release|Win32
|
|
||||||
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Release.Build.0 = Release|Win32
|
|
||||||
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{8050F819-5B5B-1504-BC6D-7F2B4C6C85F3}.Debug.Build.0 = Debug|Win32
|
|
||||||
{A0958CD9-0E39-4A77-3711-9B488F508FBF}.Release.ActiveCfg = Release|Win32
|
|
||||||
{A0958CD9-0E39-4A77-3711-9B488F508FBF}.Release.Build.0 = Release|Win32
|
|
||||||
{A0958CD9-0E39-4A77-3711-9B488F508FBF}.Debug.ActiveCfg = Debug|Win32
|
|
||||||
{A0958CD9-0E39-4A77-3711-9B488F508FBF}.Debug.Build.0 = Debug|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityAddIns) = postSolution
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|||||||
Reference in New Issue
Block a user