0001: // ----------------------------------------------------------------------------
0002: //
0003: // rigidbody.h - 全体的な定義
0004: // 
0005: // Copyright (c) 2002 IF (imagire@gmail.com)
0006: // All Rights Reserved.
0007: //
0008: // ----------------------------------------------------------------------------
0009: #ifndef _RIGIDBODY_H
0010: #define _RIGIDBODY_H
0011: 
0012: #include <d3d8.h>
0013: #include <d3dx8.h>
0014: 
0015: class CRigidBody {
0016: private:
0017: protected:
0018:     // 定数
0019:     float           mass;
0020:     D3DXMATRIX      IBody;
0021:     D3DXMATRIX      IBodyinv;
0022:     // 状態ベクトル
0023:     D3DXVECTOR4     x;                      // 重心座標
0024:     D3DXQUATERNION  q;                      // May 23
0025:     D3DXVECTOR4     p;                      // 運動量
0026:     D3DXVECTOR3     L;                      // 回転モーメント
0027:     // 2次的変数
0028:     D3DXVECTOR4     v;
0029:     D3DXMATRIX      Iinv;
0030:     D3DXMATRIX      R;                      // 回転座標
0031:     D3DXVECTOR3     omega;
0032:     // 外力
0033:     D3DXVECTOR4     force;
0034:     D3DXVECTOR3     torque;
0035: 
0036:     void            Calc2ndValues();        // v や ω を計算
0037:     virtual void    ComputeForceAndTorque(float dt){};
0038: public:
0039:                     CRigidBody(){Init();};
0040:     virtual         ~CRigidBody(){};
0041:     virtual void    Init();
0042:     void            Update(float dt);       // 座標に時間変化を足しこむ
0043: 
0044:     D3DXMATRIX      GetRotation() const;
0045:     D3DXVECTOR4     GetTranslate() const;
0046:     void            SetTranslate(const D3DXVECTOR4 tr);
0047: };
0048: 
0049: // ----------------------------------------------------------------------------
0050: // 車へのカスタマイズ
0051: // ----------------------------------------------------------------------------
0052: class CCar : public CRigidBody {
0053: private:
0054:     int             time;
0055:     int             dt;
0056:     float           speed;
0057:     float           handle;
0058: protected:
0059:     virtual void    ComputeForceAndTorque(float dt);
0060: public:
0061:                     CCar();
0062:     virtual         ~CCar(){};
0063:     virtual void    Init();
0064:     virtual void    Control();
0065:     virtual void    AddSpeed(float acc);
0066:     virtual void    AddHandle(float dh);
0067: };
0068: 
0069: // ----------------------------------------------------------------------------
0070: // 宣言
0071: // ----------------------------------------------------------------------------
0072: void MyMsgProc(UINT wParam);
0073: 
0074: extern CCar car;
0075: 
0076: #endif /* !_RIGIDBODY_H */
0077: