看了一下Quake3 Portal生成,发现其技巧性还是很强的,特别是Portal数据的组织上,比Auto Portal Generation里的组织方式更加合理.
把分析写下来,方便自己以后温习.
首先需要理解它Portal数据的组织方式
struct Portal
{
Node* nodes[2]; //0: front node 1: back node
Portal* next[2]; //0: next portal of front node 1: next portal of back node
};
struct Node
{
Portal* portal; //the portal of this node
};
BSP树根结点上有6个portal,它们连接着游戏世界和外域,这6个portal组织成一个链表保存着,根结点保存了这个portal链表的表头.
在每个Node里都为下级子结点切割portal,首先在分割平面上产生一个足够大的矩形,然后用所有父结点的分割平面切割这个大矩形,将大矩形限制在Node的子空间中,然后用Node中所有的portal多边形继续切割(父结点传下来的portal),进一步限制portal范围.将切割完毕的新portal保存进入2个子结点的portal指针.
用当前node的分割平面分割父结点传进来的portal多边形,将分割结果保存进入2个子结点portal指针,递归处理2个子结点,OVER.从处理流程上来看,因为Q3的portal没有经过场景几何体的裁减,似乎其多边形很不精确啊
Quake3 Portal Generation
浙公网安备 33010602011771号