メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

PHWaterContact.h

00001 #pragma once
00002 #ifndef PHWATERCONTACT_H
00003 #define PHWATERCONTACT_H
00004 
00005 #include <Base/BaseUtility.h>
00006 #include <SceneGraph/SGScene.h>
00007 #include <Collision/CDMesh.h>
00008 #include <vector>
00009 
00010 //  FRMを使う場合は,USE_FRMを定義  FRMのソースは非公開.
00011 //  #define USE_FRM
00012 
00013 #ifdef USE_FRM
00014 #include "PHWaterResistanceMap.h"
00015 #endif
00016 
00017 namespace Spr{;
00018 
00019 //この辺の機能は出来る限りCollisionとマージしたいところ...
00020 //PHWサフィックスはPHWater内部クラスの意
00021 
00022 class CDConvex;
00023 class CDMesh;
00024 //typedef std::vector<UTRef<CDConvex> > CDConveces;
00025 
00026 //ジオメトリが持つ凸多面体をリストアップしたもの
00027 class PHWaterContactEngine;
00028 class PHWGeometry : public UTRefCount{
00029 public:
00030     PHWGeometry();
00031     UTRef<SGFrame>  frame;          //このジオメトリが属する子フレーム
00032     CDMesh*         mesh;
00033 #ifdef USE_FRM
00034     PHWaterResistanceMap* frm;      ///
00035 #endif
00036     CDGeometries    conveces;       //このジオメトリを構成する凸多面体
00037     void Set(SGFrame* f, CDMesh* g, PHWaterContactEngine* e);
00038 };
00039 typedef std::vector<UTRef<PHWGeometry> >    PHWGeometries;
00040 
00041 class PHSolid;
00042 class PHWSolid : public UTRefCount{
00043 public:
00044     UTRef<PHSolid>      solid;      //剛体
00045     UTRef<SGFrame>      frame;      //剛体フレーム
00046     //UTRef<PHWResistanceMap> frm;
00047 //  Affinef             posture;    //剛体フレームのワールドフレームに対するposture
00048     PHWGeometries       geometries; //剛体のフレームの形状データ
00049     void Init(PHWaterContactEngine* e);
00050     void EnumGeometries(SGFrame*, PHWaterContactEngine* e);
00051 };
00052 typedef std::vector<UTRef<PHWSolid> >       PHWSolids;
00053 
00054 /** 剛体と流体との接触力計算エンジン.
00055     現状ではPHWater 1 対 PHSolid 多
00056     もちろんPHSolid同士の接触は別途PHContactEngineでやってください.
00057  */
00058 class PHWater;
00059 class PHWaterContactEngine : public SGBehaviorEngine{
00060 public:
00061     PHSolid* soPaddle;
00062     Vec3f paddleForceK;
00063     Vec3f paddleForceB;
00064     Vec3f paddleTorqueK;
00065     Vec3f paddleTorqueB;
00066 public:
00067     SGOBJECTDEF(PHWaterContactEngine);
00068     bool bUseFrm;
00069 
00070     UTRef<PHWater>  water;          ///水
00071     PHWSolids       solids;         ///水に接触する剛体
00072 #ifdef USE_FRM
00073     PHWaterResistanceMaps   frms;   ///
00074 #endif
00075 
00076     std::vector<Vec3f> tris;        ///<    デバッグ用:水面下の3角形
00077     std::vector<Vec3f> points;      ///<    デバッグ用:物体と重なっている水
00078 
00079     ///
00080     PHWaterContactEngine();
00081 
00082     /// 子オブジェクトの追加
00083     virtual bool AddChildObject(SGObject* o, SGScene* s);
00084     /// ロード完了時の処理
00085     virtual void Loaded(SGScene* scene);
00086     /// 初期化処理、Loadedが呼ぶ
00087     virtual void Init(SGScene* scene);
00088     ///
00089     int GetPriority() const { return SGBP_WATERCONTACTENGINE; }
00090     /// 時間を dt 進める.
00091     virtual void Step(SGScene* s);
00092     /// 
00093     virtual void Clear(SGScene* s);
00094     /// 状態の読み出し
00095     virtual void LoadState(const SGBehaviorStates& states);
00096     /// 状態の保存
00097     virtual void SaveState(SGBehaviorStates& states) const;
00098     ///
00099     virtual void Render(GRRender* r, SGScene* s);
00100 };
00101 
00102 
00103 }
00104 #endif
00105 

Springheadに対してSun Apr 16 01:57:55 2006に生成されました。  doxygen 1.4.1