Ignore:
Timestamp:
Aug 12, 2012, 5:23:25 PM (9 years ago)
Author:
touky
Message:

LocalInertia error FIX.
Character integration better but still not working.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/BtPhysTest.cpp

    r1698 r1722  
    5050int gNumObjects = 64;
    5151
     52#define USE_WALL                1
     53#define USE_PLATFORM    1
     54#define USE_ROPE                0
     55#define USE_BODIES              0
     56#define USE_ROTATION    0
     57#define USE_CHARACTER   1
     58
    5259BtPhysTest::BtPhysTest(bool editor)
    5360{
     
    7380        float offset = 29.5f;
    7481        vec3 pos_offset = vec3(.0f, 30.f, .0f);
    75         for (int i=0; i < 6; i++)
    76         {
    77                 vec3 NewPosition = vec3(.0f);
    78                 quat NewRotation = quat(1.f);
    79 
    80                 PhysicsObject* NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation);
    81 
    82                 int idx = i/2;
    83                 NewPosition = pos_offset;
    84                 NewPosition[idx] += offset;
    85                 offset *= -1.f;
    86 
    87                 if (idx != 1)
    88                 {
    89                         vec3 axis = vec3(.0f);
    90                         axis[2 - idx] = 1;
    91                         NewRotation = quat::rotate(90.f, axis);
    92                 }
    93 
    94                 NewPhyobj->SetTransform(NewPosition, NewRotation);
    95                 Ticker::Ref(NewPhyobj);
    96                 m_ground_list << NewPhyobj;
    97         }
    98 
    99         {
    100                 quat NewRotation = quat(1.f);
     82        if (USE_WALL)
     83        {
     84                for (int i=0; i < 6; i++)
     85                {
     86                        vec3 NewPosition = vec3(.0f);
     87                        quat NewRotation = quat(1.f);
     88
     89                        PhysicsObject* NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation);
     90
     91                        int idx = i/2;
     92                        NewPosition = pos_offset;
     93                        NewPosition[idx] += offset;
     94                        offset *= -1.f;
     95
     96                        if (idx != 1)
     97                        {
     98                                vec3 axis = vec3(.0f);
     99                                axis[2 - idx] = 1;
     100                                NewRotation = quat::rotate(90.f, axis);
     101                        }
     102
     103                        NewPhyobj->SetTransform(NewPosition, NewRotation);
     104                        Ticker::Ref(NewPhyobj);
     105                        m_ground_list << NewPhyobj;
     106                }
     107        }
     108
     109        if (USE_PLATFORM)
     110        {
     111                quat NewRotation = quat::fromeuler_xyz(5.f, 0.f, 0.f);
    101112                vec3 NewPosition = pos_offset + vec3(5.0f, -20.0f, -15.0f);
    102113
    103                 PhysicsObject* NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation, 0);
     114                PhysicsObject* NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation, 1);
    104115
    105116                m_platform_list << NewPhyobj;
     
    108119                NewPosition = pos_offset + vec3(-20.0f, -25.0f, 5.0f);
    109120
    110                 NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation, 0);
     121                NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation, 1);
    111122
    112123                m_platform_list << NewPhyobj;
     
    114125        }
    115126
    116         if (1)
     127        if (USE_CHARACTER)
     128        {
     129                quat NewRotation = quat::fromeuler_xyz(0.f, 0.f, 0.f);
     130                vec3 NewPosition = pos_offset + vec3(.0f, 40.0f, .0f);
     131
     132                PhysicsObject* NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation, 2);
     133
     134                m_character_list << NewPhyobj;
     135                Ticker::Ref(NewPhyobj);
     136        }
     137
     138        if (USE_BODIES)
    117139        {
    118140                for (int x=0; x < 6; x++)
     
    132154        }
    133155
    134         if (1)
     156        if (USE_ROPE)
    135157        {
    136158                Array<PhysicsObject*> RopeElements;
     
    315337        vec3 PhysObjBarycenter = vec3(.0f);
    316338        float factor = .0f;
    317        
    318         for (int i = 0; i < m_ground_list.Count(); i++)
    319         {
    320                 PhysicsObject* PhysObj = m_ground_list[i];
    321                 mat4 GroundMat = PhysObj->GetTransform();
    322 
    323                 GroundBarycenter += GroundMat.v3.xyz;
    324                 factor += 1.f;
    325         }
    326 
    327         GroundBarycenter /= factor;
    328 
    329         for (int i = 0; i < m_ground_list.Count(); i++)
    330         {
    331                 PhysicsObject* PhysObj = m_ground_list[i];
    332 
    333                 mat4 GroundMat = PhysObj->GetTransform();
    334                 vec3 CenterToGround = GroundMat.v3.xyz - GroundBarycenter;
    335                 vec3 CenterToCam = m_camera->m_position - GroundBarycenter;
    336 
    337                 if (dot(normalize(CenterToCam - CenterToGround),
    338                 normalize(CenterToGround)) > 0.f)
    339                         PhysObj->SetRender(false);
    340                 else
    341                         PhysObj->SetRender(true);
    342         }
    343 
    344         if (0)
     339
     340        if (USE_WALL)
     341        {
     342                for (int i = 0; i < m_ground_list.Count(); i++)
     343                {
     344                        PhysicsObject* PhysObj = m_ground_list[i];
     345                        mat4 GroundMat = PhysObj->GetTransform();
     346
     347                        GroundBarycenter += GroundMat.v3.xyz;
     348                        factor += 1.f;
     349                }
     350
     351                GroundBarycenter /= factor;
     352
     353                for (int i = 0; i < m_ground_list.Count(); i++)
     354                {
     355                        PhysicsObject* PhysObj = m_ground_list[i];
     356
     357                        mat4 GroundMat = PhysObj->GetTransform();
     358                        vec3 CenterToGround = GroundMat.v3.xyz - GroundBarycenter;
     359                        vec3 CenterToCam = m_camera->m_position - GroundBarycenter;
     360
     361                        if (dot(normalize(CenterToCam - CenterToGround),
     362                                        normalize(CenterToGround)) > 0.f)
     363                                PhysObj->SetRender(false);
     364                        else
     365                                PhysObj->SetRender(true);
     366                }
     367        }
     368
     369        if (USE_ROTATION)
    345370        {
    346371                for (int i = 0; i < m_ground_list.Count(); i++)
     
    358383        }
    359384
     385        if (USE_PLATFORM)
    360386        {
    361387                for (int i = 0; i < m_platform_list.Count(); i++)
     
    379405        }
    380406
    381         PhysObjBarycenter = vec3(.0f);
    382         for (int i = 0; i < m_physobj_list.Count(); i++)
    383         {
    384                 PhysicsObject* PhysObj = m_physobj_list[i];
    385                 mat4 GroundMat = PhysObj->GetTransform();
    386 
    387                 PhysObjBarycenter += GroundMat.v3.xyz;
    388                 factor += 1.f;
    389         }
    390 
    391         PhysObjBarycenter /= factor;
    392 
    393         m_camera->SetTarget(PhysObjBarycenter);
    394         m_camera->SetPosition(GroundBarycenter + normalize(GroundBarycenter - PhysObjBarycenter) * 60.0f);
     407        if (USE_CHARACTER)
     408        {
     409                for (int i = 0; i < m_character_list.Count(); i++)
     410                {
     411                        PhysicsObject* PhysObj = m_character_list[i];
     412                        mat4 GroundMat = PhysObj->GetTransform();
     413
     414                        PhysObjBarycenter += GroundMat.v3.xyz;
     415                        factor += 1.f;
     416                }
     417
     418                PhysObjBarycenter /= factor;
     419
     420                m_camera->SetTarget(PhysObjBarycenter);
     421                m_camera->SetPosition(PhysObjBarycenter + vec3(-80.0f, 80.0f, .0f));
     422        }
     423        else
     424        {
     425                PhysObjBarycenter = vec3(.0f);
     426                for (int i = 0; i < m_physobj_list.Count(); i++)
     427                {
     428                        PhysicsObject* PhysObj = m_physobj_list[i];
     429                        mat4 GroundMat = PhysObj->GetTransform();
     430
     431                        PhysObjBarycenter += GroundMat.v3.xyz;
     432                        factor += 1.f;
     433                }
     434
     435                PhysObjBarycenter /= factor;
     436
     437                m_camera->SetTarget(PhysObjBarycenter);
     438                m_camera->SetPosition(GroundBarycenter + normalize(GroundBarycenter - PhysObjBarycenter) * 60.0f);
     439        }
    395440
    396441#if 0
     
    426471    }
    427472
    428     Video::SetClearColor(vec4(0.0f, 0.0f, 0.12f, 1.0f));
     473    //Video::SetClearColor(vec4(0.0f, 0.0f, 0.12f, 1.0f));
    429474
    430475#if 0
     
    486531                Ticker::Unref(CurPop);
    487532        }
     533        while (m_character_list.Count())
     534        {
     535                PhysicsObject* CurPop = m_character_list.Last();
     536                m_character_list.Pop();
     537                CurPop->GetCharacter()->RemoveFromSimulation(m_simulation);
     538                Ticker::Unref(CurPop);
     539        }
    488540        while (m_platform_list.Count())
    489541        {
Note: See TracChangeset for help on using the changeset viewer.