Ignore:
Timestamp:
Jul 9, 2012, 1:00:09 AM (10 years ago)
Author:
touky
Message:

Added walls and better context to the physics.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/BtPhysTest.cpp

    r1605 r1607  
    7575        m_simulation->SetGravity(NewGravity);
    7676
    77         m_ground_object = new PhysicsObject(m_simulation);
    78         Ticker::Ref(m_ground_object);
    79 
    80         for (int x=0; x < 10; x++)
    81         {
    82                 for (int y=0; y < 10; y++)
    83                 {
    84                         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));
    85                         m_physobj_list << new_physobj;
    86                         Ticker::Ref(new_physobj);
     77        float offset = 30.f;
     78        vec3 pos_offset = vec3(.0f, 30.f, .0f);
     79        for (int i=0; i < 6; i++)
     80        {
     81                int idx = i/2;
     82                vec3 NewPosition = pos_offset;
     83                NewPosition[idx] += offset;
     84                offset *= -1.f;
     85
     86                quat NewRotation = quat(mat4(1.f));
     87                PhysicsObject* NewPhyobj = new PhysicsObject(m_simulation, NewPosition, NewRotation);
     88
     89                if (idx != 1)
     90                {
     91                        vec3 axis = vec3(.0f);
     92                        axis[idx] = 1;
     93                        NewRotation = quat::rotate(90.f, axis);
     94                }
     95
     96                NewPhyobj->SetTransform(NewPosition, NewRotation);
     97                Ticker::Ref(NewPhyobj);
     98                m_ground_list << NewPhyobj;
     99        }
     100
     101        for (int x=0; x < 5; x++)
     102        {
     103                for (int y=0; y < 5; y++)
     104                {
     105                        for (int z=0; z < 4; z++)
     106                        {
     107                                PhysicsObject* new_physobj = new PhysicsObject(m_simulation, 10.f,
     108                                        vec3(-20.f, 40.f, -20.f) +
     109                                        vec3(4.f * (float)x, 4.f * (float)y, 4.f * (float)z));
     110                                m_physobj_list << new_physobj;
     111                                Ticker::Ref(new_physobj);
     112                        }
    87113                }
    88114        }
     
    243269        m_simulation->TickContext(seconds);
    244270
    245         m_camera->SetTarget(vec3(.0f));
    246         m_camera->SetPosition(vec3(-30.0f, 20.0f, .0f));
     271        vec3 barycenter = vec3(.0f);
     272        float factor = .0f;
     273        for (int i = 0; i < m_ground_list.Count(); i++)
     274        {
     275                PhysicsObject* PhysObj = m_ground_list[i];
     276
     277                mat4 GroundMat = PhysObj->GetTransform();
     278                vec3 CenterToGround = GroundMat.v3.xyz - vec3(.0f, 50.f, .0f);
     279                vec3 CenterToCam = m_camera->m_position - vec3(.0f, 50.f, .0f);
     280                if (dot(CenterToCam, CenterToGround) > .0f)
     281                        PhysObj->SetRender(false);
     282                else
     283                        PhysObj->SetRender(true);
     284
     285                barycenter += GroundMat.v3.xyz;
     286                factor += 1.f;
     287        }
     288
     289        barycenter /= factor;
     290
     291        for (int i = 0; i < m_ground_list.Count(); i++)
     292        {
     293                PhysicsObject* PhysObj = m_ground_list[i];
     294
     295                mat4 GroundMat = PhysObj->GetTransform();
     296                mat4 CenterMx = mat4::translate(barycenter);
     297                //GroundMat = inverse(CenterMx) * GroundMat;
     298                //GroundMat = CenterMx * GroundMat;
     299                                        //mat4(quat::rotate(seconds * 10.0f, vec3(0, 1, 0))) * CenterMx;
     300                //PhysObj->SetTransform(GroundMat.v3.xyz, quat(GroundMat));
     301        }
     302
     303        m_camera->SetTarget(barycenter);
     304        m_camera->SetPosition(vec3(-40.0f, 60.0f, -40.0f));
    247305
    248306#if 0
     
    323381{
    324382        Ticker::Unref(m_camera);
    325         Ticker::Unref(m_ground_object);
     383        while (m_ground_list.Count())
     384        {
     385                PhysicsObject* CurPop = m_ground_list.Last();
     386                m_ground_list.Pop();
     387                Ticker::Unref(CurPop);
     388        }
    326389        while (m_physobj_list.Count())
    327390        {
Note: See TracChangeset for help on using the changeset viewer.