collision.h
来自「国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国」· C头文件 代码 · 共 115 行
H
115 行
//-----------------------------------------------------------------------------------------------------------
// File : Collision.h
//-----------------------------------------------------------------------------------------------------------
#ifndef _COLLISION_
#define _COLLISION_
typedef struct SPHEREINFO
{
D3DXVECTOR3 vCenter;
float R;
SPHEREINFO::SPHEREINFO():vCenter(0,0,0),R(0){}
}SPHEREINFO;
typedef struct PICKING
{
D3DXVECTOR3 vRayOrig;
D3DXVECTOR3 vRayDir;
float Dist;
D3DXVECTOR3 vTri[3];
D3DXVECTOR3 vIntersectPt;
CMCObjMesh * pObjectMesh;
D3DXMATRIX matWorld;
PICKING::PICKING():Dist(0),vIntersectPt(0,0,0)
{ pObjectMesh = NULL; }
}PICKING;
typedef struct INTERSECT
{
D3DXVECTOR3 vTri[3];
D3DXVECTOR3 vInterPt;
D3DXVECTOR3 vN;
float Dist;
}INTERSECT;
class CCollision
{
public:
CCollision();
CCollision(CMCParts *pPart) {this->CreateOBB(pPart);}
//CCollision(CBaseBuildObject *pOb) {this->CreateOBB(pOb);} 寝哎妨辑 瘤框
~CCollision();
void Init();
// vMins, vMaxs : 惑措谅钎
// pMat : 弥辆 岿靛谅钎肺 函券且 荐 乐绰 Matrix狼 器牢磐
CCollision* CreateOBB(D3DXVECTOR3 vMins, D3DXVECTOR3 vMaxs, D3DXMATRIX *pMat);
CCollision* CreateOBB(CMCParts *pPart);
CCollision* CreateOBB(CBaseBuildObject *pOb);
CCollision *CreateTri(CBaseBuildObject *pObj);
CCollision *CreateTri(CPlayer *pPlayer);
CCollision *CreateTri(CTerrain *pTerrain);
void Refresh();
static void SetBox(D3DXVECTOR3 *pvStartPt, D3DXVECTOR3& vMins, D3DXVECTOR3& vMaxs);
BOOL SphereToSphere(CCollision *pObject);
BOOL OBBToOBB(CCollision *pObject);
BOOL OBBToOBBEx(CCollision *pObject,D3DXVECTOR3 vDir, float Speed); // 加档档 捧康矫挪促.
BOOL OBBToSphere(CCollision *pObject);
BOOL OBBToBox(MD3BOUNDBOX *pBox);
BOOL OBBToPlane(D3DXPLANE *pPlane, D3DXVECTOR3 vN);
BOOL OBBToLine(CCollision *pObject);
const D3DXVECTOR3* GetSize() { return &m_vSize; }
D3DXVECTOR3 GetCollisionOffset(D3DXVECTOR3 &vNormal, float radius, float distance);
///////////////////////////////////////////////////
DWORD TriangleToSphere(D3DXVECTOR3 vCenter, float radius, INTERSECT **ppOut);
BOOL OBBToTriangle();
BOOL Unprojection(POINT *ptCursor, D3DXVECTOR3 *pvRayOrig=NULL, D3DXVECTOR3 *pvRayDir=NULL);
BOOL TriangleIntersect(PICKING *ptagInfo, DWORD dwPickCnt);
BOOL TriangleIntersect(LPD3DXMESH pMesh,D3DXMATRIXA16 *pMatWorld, PICKING *ptagInfo);
BOOL Targetting( CCollision *pPick );
private: // 窃荐
void CreateOBBAxis(CCollision *pObject, D3DXVECTOR3 *vAxis);
public:
// 傍烹
MODEL_TYPE m_Type; // 蜡历牢瘤, 坷宏璃飘牢瘤 鸥涝
D3DXMATRIX* m_pMatWorld;
// OBB Box
D3DXVECTOR3 m_vAxis[3]; // x,y,z 绵
D3DXVECTOR3 m_vSize;
D3DXVECTOR3 m_vVertex[8];
D3DXVECTOR3 m_vCenter;
float m_fR;
// Mesh
DWORD m_dwMeshCnt;
// Object Mesh
CMCObjMesh *m_pObjectMesh;
// Part
//CMCMesh *m_pMCMesh;
// Targetting~
PICKING m_tagUnproRay; // 攫橇肺璃记 棺 弥辆 乔欧 单捞磐
CPlayer *m_pPlayer;
CBaseBuildObject *m_pObject;
CMCParts *m_pPart;
CMCMesh *m_pPickMesh;
};
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?