Changeset 7983 for code/branches/kicklib/src/external/bullet/BulletCollision/CollisionShapes/btConvexHullShape.cpp
- Timestamp:
- Feb 27, 2011, 7:43:24 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/kicklib/src/external/bullet/BulletCollision/CollisionShapes/btConvexHullShape.cpp
r5781 r7983 1 1 /* 2 2 Bullet Continuous Collision Detection and Physics Library 3 Copyright (c) 2003-200 6 Erwin Coumans http://continuousphysics.com/Bullet/3 Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org 4 4 5 5 This software is provided 'as-is', without any express or implied warranty. … … 13 13 3. This notice may not be removed or altered from any source distribution. 14 14 */ 15 15 16 #include "btConvexHullShape.h" 16 17 #include "BulletCollision/CollisionShapes/btCollisionMargin.h" 17 18 18 19 #include "LinearMath/btQuaternion.h" 19 20 21 22 btConvexHullShape ::btConvexHullShape (const btScalar* points,int numPoints,int stride) : btPolyhedralConvexShape () 20 #include "LinearMath/btSerializer.h" 21 22 btConvexHullShape ::btConvexHullShape (const btScalar* points,int numPoints,int stride) : btPolyhedralConvexAabbCachingShape () 23 23 { 24 24 m_shapeType = CONVEX_HULL_SHAPE_PROXYTYPE; 25 25 m_unscaledPoints.resize(numPoints); 26 26 27 unsigned char* points BaseAddress = (unsigned char*)points;27 unsigned char* pointsAddress = (unsigned char*)points; 28 28 29 29 for (int i=0;i<numPoints;i++) 30 30 { 31 btVector3* point = (btVector3*)(pointsBaseAddress + i*stride); 32 m_unscaledPoints[i] = point[0]; 31 btScalar* point = (btScalar*)pointsAddress; 32 m_unscaledPoints[i] = btVector3(point[0], point[1], point[2]); 33 pointsAddress += stride; 33 34 } 34 35 … … 52 53 } 53 54 54 btVector3 btConvexHullShape::localGetSupportingVertexWithoutMargin(const btVector3& vec 0)const55 btVector3 btConvexHullShape::localGetSupportingVertexWithoutMargin(const btVector3& vec)const 55 56 { 56 57 btVector3 supVec(btScalar(0.),btScalar(0.),btScalar(0.)); 57 btScalar newDot,maxDot = btScalar(-1e30); 58 59 btVector3 vec = vec0; 60 btScalar lenSqr = vec.length2(); 61 if (lenSqr < btScalar(0.0001)) 62 { 63 vec.setValue(1,0,0); 64 } else 65 { 66 btScalar rlen = btScalar(1.) / btSqrt(lenSqr ); 67 vec *= rlen; 68 } 69 58 btScalar newDot,maxDot = btScalar(-BT_LARGE_FLOAT); 70 59 71 60 for (int i=0;i<m_unscaledPoints.size();i++) … … 90 79 for (int i=0;i<numVectors;i++) 91 80 { 92 supportVerticesOut[i][3] = btScalar(- 1e30);81 supportVerticesOut[i][3] = btScalar(-BT_LARGE_FLOAT); 93 82 } 94 83 } … … 186 175 } 187 176 177 ///fills the dataBuffer and returns the struct name (and 0 on failure) 178 const char* btConvexHullShape::serialize(void* dataBuffer, btSerializer* serializer) const 179 { 180 //int szc = sizeof(btConvexHullShapeData); 181 btConvexHullShapeData* shapeData = (btConvexHullShapeData*) dataBuffer; 182 btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer); 183 184 int numElem = m_unscaledPoints.size(); 185 shapeData->m_numUnscaledPoints = numElem; 186 #ifdef BT_USE_DOUBLE_PRECISION 187 shapeData->m_unscaledPointsFloatPtr = 0; 188 shapeData->m_unscaledPointsDoublePtr = numElem ? (btVector3Data*)serializer->getUniquePointer((void*)&m_unscaledPoints[0]): 0; 189 #else 190 shapeData->m_unscaledPointsFloatPtr = numElem ? (btVector3Data*)serializer->getUniquePointer((void*)&m_unscaledPoints[0]): 0; 191 shapeData->m_unscaledPointsDoublePtr = 0; 192 #endif 193 194 if (numElem) 195 { 196 int sz = sizeof(btVector3Data); 197 // int sz2 = sizeof(btVector3DoubleData); 198 // int sz3 = sizeof(btVector3FloatData); 199 btChunk* chunk = serializer->allocate(sz,numElem); 200 btVector3Data* memPtr = (btVector3Data*)chunk->m_oldPtr; 201 for (int i=0;i<numElem;i++,memPtr++) 202 { 203 m_unscaledPoints[i].serialize(*memPtr); 204 } 205 serializer->finalizeChunk(chunk,btVector3DataName,BT_ARRAY_CODE,(void*)&m_unscaledPoints[0]); 206 } 207 208 return "btConvexHullShapeData"; 209 } 210 211
Note: See TracChangeset
for help on using the changeset viewer.