Ignore:
Timestamp:
Aug 29, 2012, 11:20:20 PM (7 years ago)
Author:
touky
Message:

small tweak on BtPhysTest. does not work better.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/Physics/Include/BulletCharacterController.h

    r1819 r1834  
    3535#ifdef USE_LOL_CTRLR_CHARAC
    3636#ifdef HAVE_PHYS_USE_BULLET
     37
     38        //SweepCallback used for Swweep Tests.
     39        class ClosestNotMeConvexResultCallback : public btCollisionWorld::ClosestConvexResultCallback
     40        {
     41        public:
     42                ClosestNotMeConvexResultCallback(btCollisionObject* NewMe, const vec3& NewUp, float MinSlopeDot) :
     43                                                btCollisionWorld::ClosestConvexResultCallback(LOL2BTU_VEC3(vec3(.0f)), LOL2BTU_VEC3(vec3(.0f))),
     44                                                m_me(NewMe),
     45                                                m_up(NewUp),
     46                                                m_min_slope_dot(MinSlopeDot) { }
     47
     48                virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult& ConvexResult, bool NormalInWorld)
     49                {
     50                        //We hit ourselves, FAIL
     51                        if (ConvexResult.m_hitCollisionObject == m_me)
     52                                return btScalar(1.f);
     53
     54                        vec3 WorldHitNomal(.0f);
     55                        if (NormalInWorld)
     56                                WorldHitNomal = BT2LOL_VEC3(ConvexResult.m_hitNormalLocal);
     57                        else //need to transform Normal into worldspace
     58                        {
     59                                btVector3 TmpWorldHitNormal = ConvexResult.m_hitCollisionObject->getWorldTransform().getBasis() * ConvexResult.m_hitNormalLocal;
     60                                WorldHitNomal = BT2LOL_VEC3(TmpWorldHitNormal);
     61                        }
     62
     63                        float DotUp = dot(m_up, WorldHitNomal);
     64                        //We hit below the accepted slope_dot, FAIL
     65                        if (DotUp < m_min_slope_dot)
     66                                return btScalar(1.f);
     67
     68                        //Continue to next.
     69                        return ClosestConvexResultCallback::addSingleResult(ConvexResult, NormalInWorld);
     70                }
     71        protected:
     72                btCollisionObject*      m_me;
     73                const vec3                      m_up;
     74                float                           m_min_slope_dot;
     75        };
    3776
    3877                ///BulletKinematicCharacterController is an object that supports a sliding motion in a world.
     
    4584                        {
    4685                                m_convex_shape = NewConvexShape;       
    47                                 m_up_axis = NewUpAxis;
     86                                m_i_up_axis = NewUpAxis;
    4887                                m_ghost_object = NewGhostObject;
    4988                                m_step_height = NewStepHeight;
     
    5796                                m_vertical_velocity = .0f;
    5897                                m_vertical_offset = .0f;
    59                                 m_gravity = 9.8f * 3.f; // 3G acceleration.
     98                                m_f_gravity = 9.8f * 3.f; // 3G acceleration.
    6099                                m_fall_speed = 55.f; // Terminal velocity of a sky diver in m/s.
    61100                                m_jump_speed = 10.f; // ?
     
    103142                        bool RecoverFromPenetration(btCollisionWorld* CollisionWorld);
    104143                        void UpdateTargetOnHit(const vec3& hit_normal, float TangentMag = .0f, float NormalMag = 1.f);
    105                         void StepUp(btCollisionWorld* CollisionWorld);
    106                         void StepForwardAndStrafe(btCollisionWorld* CollisionWorld, const vec3& MoveStep);
    107                         void StepDown(btCollisionWorld* CollisionWorld, float DeltaTime);
     144                        void DoMove(btCollisionWorld* CollisionWorld, const vec3& MoveStep, float DeltaTime);
    108145
    109146                public:
     
    128165                                if (NewAxis > 2)
    129166                                        NewAxis = 2;
    130                                 m_up_axis = NewAxis;
     167                                m_i_up_axis = NewAxis;
    131168                        }
    132169
     
    179216
    180217                        //NewGravity functions
    181                         void SetGravity(float NewGravity)                               { m_gravity = NewGravity; }
    182                         float GetGravity() const                                                { return m_gravity; }
     218                        void SetGravity(float NewGravity)                               { m_f_gravity = NewGravity; }
     219                        float GetGravity() const                                                { return m_f_gravity; }
    183220
    184221                        //The max slope determines the maximum angle that the controller can walk up.
     
    208245                        float                                           m_max_slope_radians; // Slope angle that is set (used for returning the exact value)
    209246                        float                                           m_max_slope_cosine;  // Cosine equivalent of m_max_slope_radians (calculated once when set, for optimization)
    210                         float                                           m_gravity;
     247                        float                                           m_f_gravity;
    211248                        float                                           m_turn_angle;
    212249                        float                                           m_step_height;
     
    229266                        bool                                            m_do_gobject_sweep_test;
    230267                        bool                                            m_use_walk_direction;
    231                         int                                                     m_up_axis;
     268                        int                                                     m_i_up_axis;
     269
     270                        //---------------------------------------------------------------------
     271                        //NEW INTERNAL VARS
     272                        //---------------------------------------------------------------------
     273
     274                        //Gravity in vec3
     275                        vec3                                            m_gravity;
     276
     277                        //Current Velocity
     278                        vec3                                            m_velocity;
    232279                };
    233280
Note: See TracChangeset for help on using the changeset viewer.