八叉树的实现与应用
1. 视线遮挡检测
在三维空间中,判断两点之间的视线是否被遮挡是一个常见的问题。可以通过计算两点之间的向量,将其长度作为射线的长度,归一化后的向量作为射线的方向向量。然后调用碰撞检测函数,检查这条射线是否与场景几何图形发生碰撞。如果发生碰撞,则说明被击中的多边形遮挡了这两点之间的视线。
需要注意的是,在判断怪物是否能看到玩家时,仅检查怪物的眼睛点与玩家的中心点之间的视线可能是不够的。例如,如果玩家部分隐藏在箱子后面,其中心点可能被遮挡,但怪物仍能看到玩家的头部。因此,最好向玩家的三到四个点发射射线,以获得更准确的结果。
2. 八叉树概述
八叉树是一种用于管理三维空间数据的树状数据结构,每个节点有八个子节点或没有子节点(叶子节点)。在本文中,八叉树主要用于碰撞检测,而不是为渲染组织多边形以找到最佳的图元集。
2.1 子节点命名
为了方便使用,为八叉树的八个子节点进行了命名:
#define UP_NE 0 // upper north east
#define UP_NW 1 // upper north west
#define UP_SE 2 // upper south east
#define UP_SW 3 // upper south west
#define LW_NE 4 // lower north east
#define LW_NW 5 // lower north west
#define LW_SE 6 //
超级会员免费看
订阅专栏 解锁全文
990

被折叠的 条评论
为什么被折叠?



