Blender V2.61 - r43446

btRaycastCallback.h

Go to the documentation of this file.
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