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

CDDetectorImp.h

00001 #ifndef CDDETECTORIMP_H
00002 #define CDDETECTORIMP_H
00003 #include "CDQuickHull3D.h"
00004 
00005 namespace Spr {;
00006 
00007 #define CD_EPSILON  HULL_EPSILON
00008 #define CD_INFINITE HULL_INFINITE
00009 
00010 class CDFace;
00011 class CDConvex;
00012 class CDConvexPair;
00013 class CDConvexPairWithNormal;
00014 class SGScene;
00015 
00016 /// BBox同士の交差判定.交差していれば true.
00017 bool BBoxIntersection(Affinef postureA, Vec3f centerA, Vec3f extentA,
00018                       Affinef postureB, Vec3f centerB, Vec3f extentB);
00019 
00020 /// GJKで共有点を見つける
00021 bool FindCommonPoint(const CDConvex& a, const CDConvex& b,
00022                      const Affinef& a2w, const Affinef& b2w,
00023                      Vec3d& v, Vec3d& pa, Vec3d& pb);
00024 
00025 /// GJKで最近傍点対を見つける
00026 void FindClosestPoints(const CDConvex& a, const CDConvex& b,
00027                        const Affinef& a2w, const Affinef& b2w,
00028                        Vec3d& pa, Vec3d& pb);
00029 
00030 /** 衝突判定結果(交叉部分の形状を求める機能/法線を求める機能付き)   */
00031 class CDContactAnalysis{
00032 public:
00033     /// \addtogroup quickHull QuickHullのための頂点と平面
00034     //@{
00035     /// 面を双対変換した頂点でQuickHullをするので,CDFaceがVtxs.
00036     typedef std::vector<CDFace*> Vtxs;  
00037     static Vtxs vtxs;                   ///<    QuickHullの頂点
00038     static CDQHPlanes<CDFace> planes;   ///<    面
00039     bool isValid;                       ///<    交差部分のポリゴンは有効?
00040     //@}
00041     /** 共通部分の形状を求める.
00042         結果は,共通部分を構成する面を vtxs.begin() から返り値までに,
00043         共通部分を構成する頂点を, planes.begin から planes.end のうちの
00044         deleted==false のものに入れて返す.
00045         convex[0], convex[1]の頂点をWorld系に変換する変換行列を
00046         af0, af1 に渡さなければならない.   */
00047     CDFace** FindIntersection(CDConvexPair& cp, Affinef* af);
00048     /** 交差部分の形状の法線を積分して,衝突の法線を求める.
00049         物体AとBの衝突の法線は,交差部分の面のうち,Aの面の法線の積分
00050         からBの面の法線の積分を引いたものになる.   */
00051     void IntegrateNormal(CDConvexPairWithNormal& cp, Affinef* af);
00052     /** 法線の計算.前回の法線の向きに物体を動かし,
00053         物体を離して最近傍点を求める.  */
00054     void CalcNormal(CDConvexPairWithNormal& cp,  Affinef* af);
00055     /** 共通点と交差部分の形状の描画    */
00056     void Draw(CDConvexPair& cp, Affinef afw, SGScene* s);
00057 };
00058 
00059 }
00060 #endif

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