Changeset 1698


Ignore:
Timestamp:
Aug 5, 2012, 7:06:28 PM (7 years ago)
Author:
touky
Message:

Lazy WE :
Small tweaks in the BtPhysTest demo.
Added Ghost Object skeleton (not tested)

Location:
trunk/test
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/BtPhysTest.cpp

    r1647 r1698  
    9797        }
    9898
     99        {
     100                quat NewRotation = quat(1.f);
     101                vec3 NewPosition = pos_offset + vec3(5.0f, -20.0f, -15.0f);
     102
     103                PhysicsObject* NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation, 0);
     104
     105                m_platform_list << NewPhyobj;
     106                Ticker::Ref(NewPhyobj);
     107
     108                NewPosition = pos_offset + vec3(-20.0f, -25.0f, 5.0f);
     109
     110                NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation, 0);
     111
     112                m_platform_list << NewPhyobj;
     113                Ticker::Ref(NewPhyobj);
     114        }
     115
    99116        if (1)
    100117        {
     
    325342        }
    326343
    327         if (1)
     344        if (0)
    328345        {
    329346                for (int i = 0; i < m_ground_list.Count(); i++)
     
    338355                                                * GroundMat;
    339356                        PhysObj->SetTransform(GroundMat.v3.xyz, quat(GroundMat));
     357                }
     358        }
     359
     360        {
     361                for (int i = 0; i < m_platform_list.Count(); i++)
     362                {
     363                        PhysicsObject* PhysObj = m_platform_list[i];
     364
     365                        mat4 GroundMat = PhysObj->GetTransform();
     366                        if (i == 0)
     367                        {
     368                                GroundMat = GroundMat * mat4(quat::fromeuler_xyz(vec3(20.f, .0f, .0f) * seconds));
     369                                PhysObj->SetTransform(GroundMat.v3.xyz, quat(GroundMat));
     370                        }
     371                        else
     372                        {
     373                                GroundMat = GroundMat * mat4::translate(vec3(.0f, .0f, 10.0f) * seconds);
     374                                if (GroundMat.v3.z > 40.0f)
     375                                        GroundMat = GroundMat * mat4::translate(vec3(.0f, .0f, -80.0f));
     376                                PhysObj->SetTransform(GroundMat.v3.xyz, quat(GroundMat));
     377                        }
    340378                }
    341379        }
     
    448486                Ticker::Unref(CurPop);
    449487        }
     488        while (m_platform_list.Count())
     489        {
     490                PhysicsObject* CurPop = m_platform_list.Last();
     491                m_platform_list.Pop();
     492                CurPop->GetPhysic()->RemoveFromSimulation(m_simulation);
     493                Ticker::Unref(CurPop);
     494        }
    450495        while (m_physobj_list.Count())
    451496        {
  • trunk/test/BtPhysTest.h

    r1633 r1698  
    2929        Array<PhysicsObject*>                           m_physobj_list;
    3030        Array<PhysicsObject*>                           m_ground_list;
     31        Array<PhysicsObject*>                           m_platform_list;
    3132
    3233#if 0
  • trunk/test/PhysicObject.h

    r1696 r1698  
    3535        }
    3636
     37        PhysicsObject(Simulation* new_sim, const vec3 &base_location, const quat &base_rotation, int dummy)
     38                : m_ready(false), m_should_render(true)
     39        {
     40                m_mesh.Compile("[sc#ddd afcb20 1 20 -.1]");
     41                vec3 BoxSize = vec3(20.f, 1.f, 20.f);
     42                m_physics.SetCollisionChannel(0, 0xFF);
     43                m_physics.SetShapeToBox(BoxSize);
     44                m_physics.SetMass(.0f);
     45                m_physics.SetTransform(base_location, base_rotation);
     46                m_physics.InitBodyToRigid(true);
     47                m_physics.AddToSimulation(new_sim);
     48        }
     49
    3750        PhysicsObject(Simulation* new_sim, float base_mass, const vec3 &base_location, int RandValue = -1)
    3851                : m_ready(false), m_should_render(true)
  • trunk/test/Physics/EasyPhysics.cpp

    r1633 r1698  
    3333        m_collision_object(NULL),
    3434        m_rigid_body(NULL),
     35        m_ghost_object(NULL),
    3536        m_collision_shape(NULL),
    3637        m_motion_state(NULL),
     
    107108void EasyPhysic::SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation)
    108109{
    109         if (m_motion_state)
    110                 m_motion_state->setWorldTransform(btTransform(LOL2BT_QUAT(base_rotation), LOL2BT_VEC3(base_location * LOL2BT_UNIT)));
     110        if (m_ghost_object)
     111                m_ghost_object->setWorldTransform(btTransform(LOL2BT_QUAT(base_rotation), LOL2BT_VEC3(base_location * LOL2BT_UNIT)));
    111112        else
    112                 m_motion_state = new btDefaultMotionState(btTransform(LOL2BT_QUAT(base_rotation), LOL2BT_VEC3(base_location * LOL2BT_UNIT)));
     113        {
     114                if (m_motion_state)
     115                        m_motion_state->setWorldTransform(btTransform(LOL2BT_QUAT(base_rotation), LOL2BT_VEC3(base_location * LOL2BT_UNIT)));
     116                else
     117                        m_motion_state = new btDefaultMotionState(btTransform(LOL2BT_QUAT(base_rotation), LOL2BT_VEC3(base_location * LOL2BT_UNIT)));
     118        }
    113119}
    114120
     
    138144                delete m_collision_object;
    139145
    140         SetLocalInertia(m_mass);
    141146        if (!m_motion_state)
    142147                SetTransform(vec3(.0f));
     
    153158}
    154159
     160//Init to Ghost object, for Overlap/Sweep Test/Touching logic
     161void EasyPhysic::InitBodyToGhost()
     162{
     163        if (m_collision_object)
     164                delete m_collision_object;
     165
     166        m_ghost_object = new btGhostObject();
     167        m_ghost_object->setCollisionShape(m_collision_shape);
     168        m_collision_object = m_ghost_object;
     169
     170        SetTransform(vec3(.0f));
     171
     172        m_ghost_object->setCollisionFlags(m_ghost_object->getCollisionFlags());
     173        //btCollisionObject::CF_CHARACTER_OBJECT
     174}
     175
     176//Add Physic object to the simulation
    155177void EasyPhysic::AddToSimulation(class Simulation* current_simulation)
    156178{
     
    158180        if (dynamics_world)
    159181        {
    160                 if (m_rigid_body)
     182                if (m_ghost_object)
     183                {
     184                        dynamics_world->addCollisionObject(m_ghost_object, m_collision_group, m_collision_mask);
     185                        current_simulation->AddToGhost(this);
     186                }
     187                else if (m_rigid_body)
    161188                {
    162189                        dynamics_world->addRigidBody(m_rigid_body, m_collision_group, m_collision_mask);
  • trunk/test/Physics/EasyPhysics.h

    r1633 r1698  
    2222#include <bullet/btBulletDynamicsCommon.h>
    2323#include <bullet/btBulletCollisionCommon.h>
     24#include <bullet/BulletCollision/CollisionDispatch/btGhostObject.h>
    2425#endif
    2526
     
    5152        void SetMass(float mass);
    5253        void InitBodyToRigid(bool ZeroMassIsKinematic=false);
     54        void InitBodyToGhost();
    5355        void AddToSimulation(class Simulation* current_simulation);
    5456        void RemoveFromSimulation(class Simulation* current_simulation);
     
    6062
    6163        btCollisionObject*                                                      m_collision_object;
     64
     65        btGhostObject*                                                          m_ghost_object;
    6266
    6367        btRigidBody*                                                            m_rigid_body;
     
    8286        void SetMass(float mass) { }
    8387        void InitBodyToRigid() { }
     88        void InitBodyToGhost() { }
    8489        void AddToSimulation(class Simulation* current_simulation) { }
    8590        void RemoveFromSimulation(class Simulation* current_simulation) { }
  • trunk/test/Physics/LolPhysics.h

    r1641 r1698  
    160160        void AddToDynamic(EasyPhysic* NewEPDynamic)     { m_dynamic_list << NewEPDynamic; }
    161161        void AddToStatic(EasyPhysic* NewEPStatic)       { m_static_list << NewEPStatic; }
     162        void AddToGhost(EasyPhysic* NewEPGhost)         { m_ghost_list << NewEPGhost; }
    162163        void AddToConstraint(EasyConstraint* NewEC)     { m_constraint_list     << NewEC; }
    163164
     
    165166        Array<EasyPhysic*>                                              m_dynamic_list;
    166167        Array<EasyPhysic*>                                              m_static_list;
     168        Array<EasyPhysic*>                                              m_ghost_list;
    167169        Array<EasyConstraint*>                                  m_constraint_list;
    168170
Note: See TracChangeset for help on using the changeset viewer.