Blender V2.61 - r43446
|
00001 /* 00002 Bullet Continuous Collision Detection and Physics Library 00003 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ 00004 00005 This software is provided 'as-is', without any express or implied warranty. 00006 In no event will the authors be held liable for any damages arising from the use of this software. 00007 Permission is granted to anyone to use this software for any purpose, 00008 including commercial applications, and to alter it and redistribute it freely, 00009 subject to the following restrictions: 00010 00011 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. 00012 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 00013 3. This notice may not be removed or altered from any source distribution. 00014 */ 00015 00016 #ifndef RAYCAST_TRI_CALLBACK_H 00017 #define RAYCAST_TRI_CALLBACK_H 00018 00019 #include "BulletCollision/CollisionShapes/btTriangleCallback.h" 00020 #include "LinearMath/btTransform.h" 00021 struct btBroadphaseProxy; 00022 class btConvexShape; 00023 00024 class btTriangleRaycastCallback: public btTriangleCallback 00025 { 00026 public: 00027 00028 //input 00029 btVector3 m_from; 00030 btVector3 m_to; 00031 00032 //@BP Mod - allow backface filtering and unflipped normals 00033 enum EFlags 00034 { 00035 kF_None = 0, 00036 kF_FilterBackfaces = 1 << 0, 00037 kF_KeepUnflippedNormal = 1 << 1, // Prevents returned face normal getting flipped when a ray hits a back-facing triangle 00038 00039 kF_Terminator = 0xFFFFFFFF 00040 }; 00041 unsigned int m_flags; 00042 00043 btScalar m_hitFraction; 00044 00045 btTriangleRaycastCallback(const btVector3& from,const btVector3& to, unsigned int flags=0); 00046 00047 virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex); 00048 00049 virtual btScalar reportHit(const btVector3& hitNormalLocal, btScalar hitFraction, int partId, int triangleIndex ) = 0; 00050 00051 }; 00052 00053 class btTriangleConvexcastCallback : public btTriangleCallback 00054 { 00055 public: 00056 const btConvexShape* m_convexShape; 00057 btTransform m_convexShapeFrom; 00058 btTransform m_convexShapeTo; 00059 btTransform m_triangleToWorld; 00060 btScalar m_hitFraction; 00061 btScalar m_triangleCollisionMargin; 00062 btScalar m_allowedPenetration; 00063 00064 btTriangleConvexcastCallback (const btConvexShape* convexShape, const btTransform& convexShapeFrom, const btTransform& convexShapeTo, const btTransform& triangleToWorld, const btScalar triangleCollisionMargin); 00065 00066 virtual void processTriangle (btVector3* triangle, int partId, int triangleIndex); 00067 00068 virtual btScalar reportHit (const btVector3& hitNormalLocal, const btVector3& hitPointLocal, btScalar hitFraction, int partId, int triangleIndex) = 0; 00069 }; 00070 00071 #endif //RAYCAST_TRI_CALLBACK_H 00072