~ubuntu-branches/ubuntu/gutsy/blender/gutsy-security

« back to all changes in this revision

Viewing changes to source/gameengine/Physics/BlOde/OdePhysicsEnvironment.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Florian Ernst
  • Date: 2005-11-06 12:40:03 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051106124003-3pgs7tcg5rox96xg
Tags: 2.37a-1.1
* Non-maintainer upload.
* Split out parts of 01_SConstruct_debian.dpatch again: root_build_dir
  really needs to get adjusted before the clean target runs - closes: #333958,
  see #288882 for reference

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/**
2
 
 * $Id: OdePhysicsEnvironment.cpp,v 1.4 2004/03/22 22:02:07 jesterking Exp $
 
2
 * $Id: OdePhysicsEnvironment.cpp,v 1.6 2005/03/25 10:33:38 kester Exp $
3
3
 *
4
4
 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5
5
 *
36
36
ODEPhysicsEnvironment::ODEPhysicsEnvironment()
37
37
{
38
38
        m_OdeWorld = dWorldCreate();
39
 
        m_OdeSpace = dHashSpaceCreate();
 
39
        m_OdeSpace = dHashSpaceCreate(0);
40
40
        m_OdeContactGroup = dJointGroupCreate (0);
41
41
        dWorldSetCFM (m_OdeWorld,1e-5f);
42
42
 
43
43
        m_JointGroup = dJointGroupCreate(0);
44
 
        
 
44
 
 
45
        setFixedTimeStep(true,1.f/60.f);
45
46
}
46
47
 
47
48
 
55
56
        dWorldDestroy (m_OdeWorld);
56
57
}
57
58
 
58
 
void ODEPhysicsEnvironment::proceed(double timeStep)
59
 
{
60
 
        // ode collision update
61
 
        dSpaceCollide (m_OdeSpace,this,&ODEPhysicsEnvironment::OdeNearCallback);
62
 
 
63
 
        int m_odeContacts = GetNumOdeContacts();
64
 
        
65
 
        //physics integrator + resolver update
66
 
        dWorldStep (m_OdeWorld,timeStep);
67
 
        
68
 
        //clear collision points
69
 
        this->ClearOdeContactGroup();
 
59
 
 
60
 
 
61
void            ODEPhysicsEnvironment::setFixedTimeStep(bool useFixedTimeStep,float fixedTimeStep)
 
62
{
 
63
        m_useFixedTimeStep = useFixedTimeStep;
 
64
 
 
65
        if (useFixedTimeStep)
 
66
        {
 
67
                m_fixedTimeStep = fixedTimeStep;
 
68
        } else
 
69
        {
 
70
                m_fixedTimeStep = 0.f;
 
71
        }
 
72
        m_currentTime = 0.f;
 
73
 
 
74
        //todo:implement fixed timestepping
 
75
 
 
76
}
 
77
float           ODEPhysicsEnvironment::getFixedTimeStep()
 
78
{
 
79
        return m_fixedTimeStep;
 
80
}
 
81
 
 
82
 
 
83
 
 
84
bool            ODEPhysicsEnvironment::proceedDeltaTime(double  curTime,float timeStep1)
 
85
{
 
86
 
 
87
        float deltaTime = timeStep1;
 
88
        int     numSteps = 1;
 
89
 
 
90
        if (m_useFixedTimeStep)
 
91
        {
 
92
                m_currentTime += timeStep1;             
 
93
                // equal to subSampling (might be a little smaller).
 
94
                numSteps = (int)(m_currentTime / m_fixedTimeStep);
 
95
                m_currentTime -= m_fixedTimeStep * (float)numSteps;
 
96
                deltaTime = m_fixedTimeStep;
 
97
                //todo: experiment by smoothing the remaining time over the substeps
 
98
        }
 
99
 
 
100
        for (int i=0;i<numSteps;i++)
 
101
        {
 
102
                // ode collision update
 
103
                dSpaceCollide (m_OdeSpace,this,&ODEPhysicsEnvironment::OdeNearCallback);
 
104
 
 
105
                int m_odeContacts = GetNumOdeContacts();
 
106
                
 
107
                //physics integrator + resolver update
 
108
                dWorldStep (m_OdeWorld,deltaTime);
 
109
                
 
110
                //clear collision points
 
111
                this->ClearOdeContactGroup();
 
112
        }
 
113
        return true;
70
114
}
71
115
 
72
116
void ODEPhysicsEnvironment::setGravity(float x,float y,float z)
166
210
        }
167
211
}
168
212
 
169
 
PHY_IPhysicsController* ODEPhysicsEnvironment::rayTest(void* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
 
213
PHY_IPhysicsController* ODEPhysicsEnvironment::rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
170
214
                                                                        float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)
171
215
{
 
216
 
 
217
        //m_OdeWorld
172
218
        //collision detection / raytesting
173
219
        return NULL;
174
220
}