Changeset 1591


Ignore:
Timestamp:
Jul 8, 2012, 6:16:57 PM (8 years ago)
Author:
touky
Message:

Behold the power of LolPhysics !
Added lol::phys::Simulation, lol::phys::EasyPhysics for easy physic uses.
Added PhysicsObject, wich hold EasyMesh & EasyPhysics components so it is easy to use. Easy seems to be the consensus.
BtPhysTest now works with new physics classes.

Known problem for this commit:
Physics is not properly setup.
There might be memory leaks, I don't think I've parsed all new/delete.
A LOT of primitives are not taken into account.

Location:
trunk
Files:
6 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/build/vs2010/Lol.Core.Vars.props

    r1586 r1591  
    2323    <BtPhysDir>$(ContribDir)\bullet-2.80-rev2531</BtPhysDir>
    2424    <BtPhysIncludes>$(BtPhysDir)\include;$(BtPhysDir)\include\bullet</BtPhysIncludes>
     25        <Win32Defines>HAVE_PHYS_USE_BULLET;$(Win32Defines)</Win32Defines>
    2526
    26     <!-- GTK+ & GtkGl -->
     27          <!-- GTK+ & GtkGl -->
    2728    <GtkDir>$(ContribDir)\gtk-2.22.1</GtkDir>
    2829    <GtkGlDir>$(ContribDir)\gtkglarea-2.0.1</GtkGlDir>
  • trunk/test/BtPhysTest.cpp

    r1581 r1591  
    4141using namespace lol;
    4242
     43#ifndef HAVE_PHYS_USE_BULLET
     44#define HAVE_PHYS_USE_BULLET
     45#endif /* HAVE_PHYS_USE_BULLET */
     46
     47#include "Physics\LolPhysics.h"
     48#include "Physics\EasyPhysics.h"
     49#include "PhysicObject.h"
    4350#include "BtPhysTest.h"
     51
     52using namespace lol::phys;
    4453
    4554#define CUBE_HALF_EXTENTS .5f
     
    6170    m_ready = false;
    6271
     72        m_simulation = new Simulation();
     73        m_simulation->InitContext();
     74        m_simulation->SetGravity(vec3(.0f, -10.0f, .0f));
     75
     76        m_ground_object = new PhysicsObject(m_simulation);
     77        Ticker::Ref(m_ground_object);
     78
     79        for (int x=0; x < 10; x++)
     80        {
     81                for (int y=0; y < 10; y++)
     82                {
     83                        PhysicsObject* new_physobj = new PhysicsObject(m_simulation, 10.f, vec3(0.f, 20.f, -20.0f) + vec3(.0f, 4.f * (float)y, 4.f * (float)x));
     84                        m_physobj_list << new_physobj;
     85                        Ticker::Ref(new_physobj);
     86                }
     87        }
     88
     89#if 0
    6390        //init Physics
    6491        {
     
    7097                //use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded)
    7198                m_bt_dispatcher = new btCollisionDispatcher(m_bt_collision_config);
    72                 m_bt_dispatcher->registerCollisionCreateFunc(BOX_SHAPE_PROXYTYPE,BOX_SHAPE_PROXYTYPE,m_bt_collision_config->getCollisionAlgorithmCreateFunc(CONVEX_SHAPE_PROXYTYPE,CONVEX_SHAPE_PROXYTYPE));
     99                m_bt_dispatcher->registerCollisionCreateFunc(BOX_SHAPE_PROXYTYPE,
     100                                                                                                        BOX_SHAPE_PROXYTYPE,
     101                                                                                                        m_bt_collision_config->getCollisionAlgorithmCreateFunc(CONVEX_SHAPE_PROXYTYPE,
     102                                                                                                                                                                                                                        CONVEX_SHAPE_PROXYTYPE));
    73103
    74104                m_bt_broadphase = new btDbvtBroadphase();
     
    89119                btCollisionShape* groundShape = box;
    90120                m_bt_collision_shapes << groundShape;
    91         m_ground_mesh.Compile("[sc#ddd afcb110 1 110 -1]");
     121        m_ground_mesh.Compile("[sc#ddd afcb220 2 220 -1]");
    92122
    93123                //m_bt_collision_shapes << new btCylinderShape(btVector3(.5f,.5f,.5f));
     
    152182                                //stack them
    153183                                int colsize = 10;
    154                                 int row = (i*CUBE_HALF_EXTENTS*2)/(colsize*2*CUBE_HALF_EXTENTS);
     184                                int row = int(((float)i*CUBE_HALF_EXTENTS*2.0f)/((float)colsize*2.0f*CUBE_HALF_EXTENTS));
    155185                                int row2 = row;
    156186                                int col = (i)%(colsize)-colsize/2;
     
    200230                }
    201231        }
     232#endif
    202233}
    203234
     
    209240        Ticker::Shutdown();
    210241
     242        m_simulation->TickContext(seconds);
     243
     244        m_camera->SetTarget(vec3(.0f));
     245        m_camera->SetPosition(vec3(-30.0f, 10.0f, .0f));
     246
     247#if 0
    211248        ///step the simulation
    212249        if (m_bt_world)
    213250        {
    214                 int steps = (int)(seconds / 0.005f);
    215                 for (int i = 0; i < steps; i++)
    216                         m_bt_world->stepSimulation(seconds / steps);
     251                //int steps = (int)(seconds / 0.005f);
     252                //for (int i = 0; i < steps; i++)
     253                        m_bt_world->stepSimulation(seconds /*/ steps*/);
    217254                //optional but useful: debug drawing
    218255                //m_bt_world->debugDrawWorld();
    219256        }
     257#endif
    220258}
    221259
     
    226264    if (!m_ready)
    227265    {
     266#if 0
    228267                m_ground_mesh.MeshConvert();
    229268                m_rigid_mesh[0].MeshConvert();
     
    233272                m_rigid_mesh[4].MeshConvert();
    234273                m_rigid_mesh[5].MeshConvert();
     274#endif
    235275        /* FIXME: this object never cleans up */
    236276        m_ready = true;
     
    239279    Video::SetClearColor(vec4(0.0f, 0.0f, 0.12f, 1.0f));
    240280
     281#if 0
    241282        vec3 BarycenterLocation = vec3(.0f);
    242283        float BarycenterFactor = 0.0f;
     
    275316                m_camera->SetPosition(BarycenterLocation + vec3(-20.0f, 8.0f, .0f));
    276317        }
     318#endif
    277319}
    278320
     
    281323        Ticker::Unref(m_camera);
    282324
     325#if 0
    283326        //Exit Physics
    284327        {
     
    310353                delete m_bt_collision_config;
    311354        }
     355#endif
    312356}
    313357
  • trunk/test/BtPhysTest.h

    r1581 r1591  
    2424    Camera*                                                             m_camera;
    2525    bool                                                                m_ready;
     26
     27        lol::phys::Simulation*                          m_simulation;
     28        Array<PhysicsObject*>                           m_physobj_list;
     29        PhysicsObject*                                          m_ground_object;
     30
     31#if 0
    2632        EasyMesh                                                        m_ground_mesh;
    2733        EasyMesh                                                        m_rigid_mesh[6];
     
    4147        Array<btCollisionShape*>                                m_bt_collision_shapes;
    4248        Array<btCollisionShape*>                                m_bt_dynamic_shapes;
     49#endif
    4350};
    4451
  • trunk/test/BtPhysTest.vcxproj

    r1554 r1591  
    3737  <ItemGroup>
    3838    <ClInclude Include="BtPhysTest.h" />
     39    <ClInclude Include="PhysicObject.h" />
     40    <ClInclude Include="Physics\EasyPhysics.h" />
     41    <ClInclude Include="Physics\LolBtPhysicsIntegration.h" />
     42    <ClInclude Include="Physics\LolPhysics.h" />
    3943  </ItemGroup>
    4044  <ItemGroup>
    4145    <ClCompile Include="BtPhysTest.cpp" />
     46    <ClCompile Include="Physics\EasyPhysics.cpp" />
    4247  </ItemGroup>
    4348  <ItemGroup>
  • trunk/test/BtPhysTest.vcxproj.filters

    r1554 r1591  
    33  <ItemGroup>
    44    <ClInclude Include="BtPhysTest.h" />
     5    <ClInclude Include="Physics\EasyPhysics.h">
     6      <Filter>Physics</Filter>
     7    </ClInclude>
     8    <ClInclude Include="Physics\LolPhysics.h">
     9      <Filter>Physics</Filter>
     10    </ClInclude>
     11    <ClInclude Include="Physics\LolBtPhysicsIntegration.h">
     12      <Filter>Physics</Filter>
     13    </ClInclude>
     14    <ClInclude Include="PhysicObject.h" />
    515  </ItemGroup>
    616  <ItemGroup>
    717    <ClCompile Include="BtPhysTest.cpp" />
     18    <ClCompile Include="Physics\EasyPhysics.cpp">
     19      <Filter>Physics</Filter>
     20    </ClCompile>
    821  </ItemGroup>
    922  <ItemGroup>
     
    1124      <UniqueIdentifier>{4fc7662b-b17a-49b9-acd1-0cf767183b06}</UniqueIdentifier>
    1225    </Filter>
     26    <Filter Include="Physics">
     27      <UniqueIdentifier>{ccecd634-9321-4c49-9471-e9da50dda6d3}</UniqueIdentifier>
     28    </Filter>
    1329  </ItemGroup>
    1430</Project>
Note: See TracChangeset for help on using the changeset viewer.