raSystem  1.0 bata
raPhysik.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 namespace System
3 {
5  m_Velocity(0,0,0), m_Accelerate(0,0,0), m_AngularAccelerate(0,0,0), m_AngularVelocity(0,0,0)
6  {
7  m_pRender = rand;
8 
9  m_Translation = raMatrixIdentity();
10  m_Rotation = raMatrixIdentity();
11 
12  m_Scaling = raMatrixScaling(raVector3(m_pRender->GetWorldMatrix()->m11,
13  m_pRender->GetWorldMatrix()->m22,
14  m_pRender->GetWorldMatrix()->m33));
15 
16  m_Mass = 1;
17  }
18  raPhysik::raPhysik(raRender* rend, const raVector3& Position, const raVector3& Velocity,
19  const raVector3& Accelerator, float mass) :
20  m_Velocity(Velocity), m_Accelerate(Accelerator), m_AngularVelocity(0,0,0), m_AngularAccelerate(0,0,0)
21  {
22  m_pRender = rend;
23 
24  D3DXMatrixTranslation((D3DXMATRIX*)&m_Translation, Position.x, Position.y, Position.z);
25  m_Rotation = raMatrixIdentity();
26 
27  m_Scaling = raMatrixScaling(raVector3(m_pRender->GetWorldMatrix()->m11,
28  m_pRender->GetWorldMatrix()->m22,
29  m_pRender->GetWorldMatrix()->m33));
30 
31  m_Mass = mass;
32  }
33 //-----------------------------------------------------------------------------------------------
34 
36  {
37  }
38  void raPhysik::Update(float fTime, float fRunTime)
39  {
40  raVector3 translation;
41  D3DXVec3Scale((D3DXVECTOR3*)translation, (D3DXVECTOR3*)m_Velocity, fTime);
42 
43  float angle = fTime * raVector3LenghtSq(m_AngularAccelerate);
44  raVector3 axis;
45  D3DXVec3Normalize((D3DXVECTOR3*)&axis, (D3DXVECTOR3*)&m_AngularVelocity);
46 
47  if(m_pRender)
48  {
49  raMatrix mr, mt, mWorld;
50 
51  mr = raMatrixRotationAxis(axis, angle);
52  m_Rotation *= mr;
53 
54  D3DXMatrixTranslation((D3DXMATRIX*)&mt, translation.x, translation.y, translation.z);
55  m_Translation *= mt;
56 
57  raMatrix m;
58  m = m_Scaling * m_Rotation;
59  mWorld = m * m_Translation;
60 
61  m_pRender->SetWorldMatrix(mWorld);
62  }
63  m_Velocity += fTime * m_Accelerate;
64  m_AngularVelocity += fTime * m_AngularAccelerate;
65  }
66  void raPhysik::SetAccelerate(float x, float y, float z)
67  {
68  SetAccelerate(raVector3(x, y, z));
69  }
71  {
72  m_Accelerate = Acc;
73  }
74  void raPhysik::SetAngAccel(float x, float y, float z)
75  {
76  SetAngAccel(raVector3(x, y, z));
77  }
79  {
80  m_AngularAccelerate = Ang;
81  }
83  {
84  m_Accelerate.x = 0;
85  m_Accelerate.y = 0;
86  m_Accelerate.z = 0;
87 
88  m_AngularAccelerate.x = 0;
89  m_AngularAccelerate.y = 0;
90  m_AngularAccelerate.z = 0;
91 
92  m_Velocity.x = 0;
93  m_Velocity.y = 0;
94  m_Velocity.z = 0;
95 
96  m_AngularVelocity.x = 0;
97  m_AngularVelocity.y = 0;
98  m_AngularVelocity.z = 0;
99  }
101  {
102  raVector3 pos1(0,0,0), pos2;
103  D3DXVec3TransformCoord((D3DXVECTOR3*)&pos2, (D3DXVECTOR3*)&pos1, (D3DXMATRIX*)&m_Translation);
104 
105  return pos2;
106  }
108  {
109  return m_Velocity;
110  }
112  {
113  return m_Mass;
114  }
116  {
117  return m_pRender->GetBoundingsphereRadius();
118  }
119 
120  void raPhysik::SetVelocity(float x, float y, float z)
121  {
122  m_Velocity.x = x;
123  m_Velocity.y = y;
124  m_Velocity.z = z;
125  }
126  void raPhysik::Accelerate(float x, float y, float z)
127  {
128  raVector3 a(x, y, z);
129  D3DXVec3TransformNormal((D3DXVECTOR3*)&m_Accelerate, (D3DXVECTOR3*)&a, (D3DXMATRIX*)m_pRender->GetWorldMatrix());
130  }
131  void raPhysik::AngAccel(float x, float y, float z)
132  {
133  raVector3 a(x, y, z);
134  D3DXVec3TransformNormal((D3DXVECTOR3*)&m_AngularAccelerate, (D3DXVECTOR3*)&a, (D3DXMATRIX*)m_pRender->GetWorldMatrix());
135  }
136 };
float m11
Definition: raMatrix.h:12
raFloat y
Definition: raVector3.h:13
raFloat x
Definition: raVector3.h:12
raMatrix raMatrixIdentity()
Definition: raMatrix.h:211
void SetAccelerate(float x, float y, float z)
Definition: raPhysik.cpp:66
void SetVelocity(float x, float y, float z)
Definition: raPhysik.cpp:120
float m33
Definition: raMatrix.h:12
void StopMotion()
Definition: raPhysik.cpp:82
RAPI raMatrix raMatrixScaling(const raVector3 &v)
Definition: raMatrix.cpp:100
raFloat z
Definition: raVector3.h:14
virtual const float GetBoundingsphereRadius()
Definition: raRender.h:27
float GetMass()
Definition: raPhysik.cpp:111
raPhysik(raRender *rand)
Definition: raPhysik.cpp:4
float GetBoundingSphereRadius()
Definition: raPhysik.cpp:115
virtual raMatrix * GetWorldMatrix(void)
Definition: raRender.cpp:14
float m22
Definition: raMatrix.h:12
void SetAngAccel(float x, float y, float z)
Definition: raPhysik.cpp:74
raVector3 GetPosition()
Definition: raPhysik.cpp:100
raFloat raVector3LenghtSq(const raVector3 &v)
Definition: raVector3.h:58
RAPI raMatrix raMatrixRotationAxis(const raVector3 &v, const float f)
Definition: raMatrix.cpp:74
virtual ~raPhysik(void)
Definition: raPhysik.cpp:35
raVector3 GetVelocity()
Definition: raPhysik.cpp:107
void Accelerate(float x, float y, float z)
Definition: raPhysik.cpp:126
virtual void Update(float fTime, float fRunTime)
Definition: raPhysik.cpp:38
void AngAccel(float x, float y, float z)
Definition: raPhysik.cpp:131
virtual void SetWorldMatrix(const raMatrix &value)
Definition: raRender.cpp:13