Initial commit: ROW Client source code
Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
137
Engine/CrossM/Include/OctreeCollider.h
Normal file
137
Engine/CrossM/Include/OctreeCollider.h
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
Collision detection + response <20><> ó<><C3B3><EFBFBD>ϴ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
<20>浹 <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> culling <20><> octree <20><> <20>̿<EFBFBD>
|
||||
|
||||
collision detection <20><> response <20>˰<EFBFBD><CBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Kasper Fauerby <20><>
|
||||
'Improved Collision detection and Response' <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ڵ<EFBFBD><DAB5>̴<EFBFBD>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "./Vector3.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
// forward decl.
|
||||
struct IDirect3DDevice8;
|
||||
|
||||
|
||||
namespace CrossM{
|
||||
namespace Scene{
|
||||
|
||||
struct CollisionTriangleInfo
|
||||
{
|
||||
Math::VECTOR3 m_avVertex[3];
|
||||
// <20>ΰ<EFBFBD><CEB0><EFBFBD> <20><><EFBFBD><EFBFBD>..<2E≯<EFBFBD><CCB8><EFBFBD> <20><> <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> id <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>ҵ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ Ŭ<><C5AC><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>/<2F>Ͽ콺/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ)+<2B><> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƮID(<28><> <20>Ͽ콺<CFBF><ECBDBA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ)
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
|
||||
Math::VECTOR3 m_vFaceNormal;
|
||||
};
|
||||
|
||||
// octree <20><> node. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ϶<C6B4> <20>ٱ<EFBFBD> <20><><EFBFBD>嵵 <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
// <20>ٿ<EFBFBD><D9BF><EFBFBD> <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ԵǴ<D4B5> <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ﰢ<EFBFBD><EFB0A2> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>ϵȴ<CFB5>.
|
||||
// (<28><><EFBFBD>迡 <20><>ġ<EFBFBD><C4A1> <20><> <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>忡 <20><><EFBFBD>ϵ<EFBFBD>)
|
||||
class COctreeCollisionNode
|
||||
{
|
||||
public:
|
||||
COctreeCollisionNode();
|
||||
~COctreeCollisionNode();
|
||||
|
||||
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
void ReleaseSubNode();
|
||||
|
||||
// leaf node <20><><EFBFBD><EFBFBD> üũ
|
||||
bool IsLeafNode();
|
||||
|
||||
// <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD>忡 <20><><EFBFBD>Ե<EFBFBD> <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>л<EFBFBD><D0BB><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
// <20>ڱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD>忡<EFBFBD><E5BFA1> <20>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
void BuildSubNode(
|
||||
const std::vector< CollisionTriangleInfo >& vecTriangle,
|
||||
const size_t nMaximumRecursion, const size_t nMinPolyCount,
|
||||
size_t nCurrentRecursionLevel);
|
||||
|
||||
|
||||
// <20>浹 <20><>ü<EFBFBD><C3BC> swept volume <20><> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>浹 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> vecCollidableNode <20><> <20><><EFBFBD><EFBFBD>
|
||||
void CollectCollidableNodes(
|
||||
const Math::VECTOR3& vSweptVolumeMin, const Math::VECTOR3& vSweptVolumeMax,
|
||||
std::vector< COctreeCollisionNode* >& vecCollidableNode);
|
||||
|
||||
Math::VECTOR3 m_vBoundingMin;
|
||||
Math::VECTOR3 m_vBoundingMax;
|
||||
std::vector< size_t > m_vecTriangleIndex;
|
||||
|
||||
COctreeCollisionNode* m_apSubNode[8];
|
||||
};
|
||||
|
||||
|
||||
class COctreeCollider
|
||||
{
|
||||
public:
|
||||
COctreeCollider();
|
||||
~COctreeCollider();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Octree Build <20><><EFBFBD><EFBFBD> <20>ҵ<DEBC>
|
||||
|
||||
/*
|
||||
<09>浹 <20>ﰢ<EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
<09>浹 <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD><D2B4>ǰ<EFBFBD>, octree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1>ȴ<EFBFBD>.
|
||||
BuildOctree() <20><> ȣ<><C8A3><EFBFBD>DZ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> COctreeCollider <20><> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>
|
||||
*/
|
||||
void SetTriangleCount(unsigned int uiTriangleCount);
|
||||
|
||||
/*
|
||||
<09>ﰢ<EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ.
|
||||
<09><> <20>ҵ带 ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20>ﰢ<EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, octree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1>ȴ<EFBFBD>.
|
||||
BuildOctree() <20><> ȣ<><C8A3><EFBFBD>DZ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> COctreeCollider <20><> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>
|
||||
*/
|
||||
void GetTriangleDataPtr(CollisionTriangleInfo*& pTriangleData);
|
||||
|
||||
// <20><><EFBFBD>õ<EFBFBD> <20>ﰢ<EFBFBD><EFB0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ʷ<EFBFBD> octree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool BuildOctree(const size_t nMaximumRecursion, const size_t nMinPolyCount);
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// <20>浹<EFBFBD><E6B5B9><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ҵ<DEBC>
|
||||
|
||||
/*
|
||||
<09>־<EFBFBD><D6BE><EFBFBD> Ÿ<><C5B8>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> <20><>ġ(prevPos)<29><> <20>̵<EFBFBD><CCB5><EFBFBD> <20><>ġ(nextPos) <20><> <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>ͷ<EFBFBD> <20>ѱ<EFBFBD><D1B1><EFBFBD>,
|
||||
<09>浹<EFBFBD><E6B5B9> üũ<C3BC>ϰ<EFBFBD> <20>浹<EFBFBD><E6B5B9> <20>Ͼ<CFBE><EEB3B5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
*/
|
||||
void GetCollisionRespondingPosition(
|
||||
Math::VECTOR3& vRespondingPos,
|
||||
const Math::VECTOR3& vPrevPos, const Math::VECTOR3& vNewPos,
|
||||
const Math::VECTOR3& vEllipsoidRadius,
|
||||
const unsigned int nRecursionLevel = 1);
|
||||
|
||||
|
||||
// <20><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ҵ<DEBC>, <20>浹<EFBFBD><E6B5B9> <20>Ͼ <20><> <20>ִ°<D6B4><C2B0><EFBFBD><EFBFBD><EFBFBD> Ȯ<>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
void RenderCollidableNodeTriangles(IDirect3DDevice8* pDevice);
|
||||
|
||||
|
||||
private:
|
||||
std::vector< CollisionTriangleInfo > m_vecCollisionTriangle;
|
||||
|
||||
Math::VECTOR3 m_vCollisionBoundingMin;
|
||||
Math::VECTOR3 m_vCollisionBoundingMax;
|
||||
|
||||
COctreeCollisionNode m_octreeRootNode;
|
||||
|
||||
|
||||
// <20>ӽÿ<D3BD>, <20>浹<EFBFBD><E6B5B9> <20>Ͼ <20><> <20>ִ°<D6B4><C2B0><EFBFBD><EFBFBD><EFBFBD> Ȯ<>ε<EFBFBD> leaf <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector< COctreeCollisionNode* > m_vecpCollidableNode;
|
||||
|
||||
// <20>ӽÿ<D3BD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector< Math::VECTOR3 > m_vecRenderVertex;
|
||||
|
||||
// <20>ӽÿ<D3BD>. <20>浹<EFBFBD><E6B5B9> <20>Ͼ <20>ﰢ<EFBFBD><EFB0A2><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
size_t m_nColTriIndex;
|
||||
|
||||
};
|
||||
|
||||
|
||||
}}
|
||||
Reference in New Issue
Block a user