实验四:基于BSP碰撞检测姓名:班级:学号:一、实验目掌握BSP原理;熟悉Ogre中基于S P法。
二、实验仪器pc、visual studio 2010、实验原理 过程//网上检索BS P相关//利 Ogre实现基于B SP 程实现 A PI进行详细说明1、BSP相关(1)BSPBSP TreesB i nary Space Partio ningtrees 二 二 。
: ; 中光照运算;BSP预 。
(2)BSP原理顺 判定BSP:二 。
。
定过 一 B S P。
上 于 件Z Buff er后向前画。
于Z B uffe r前向后 于后画 遮挡而 ZB uffer CUT 而 高。
筛选优化进行顺 判定 中 上 过筛选。
PVS减外BSP过进行进一 筛选优化。
理解Por tal: 。
Portal于 一 进行 算 算 ;二 法集合PVS候 同 关候 PVS 关 。
前 D 候BC过PVS测试 A一 C U T。
(3)BSPBSP流程:1) PVS信息;2) ;3)判 理; 中 判 上级 。
4) 理( ) 后 理 ; 理 后 理 ;5) 判 PVS中 进行。
2、程 实现 相API 详细说明多边 A 一 顶 位于多边 组 一 说多边 A位于多边 “前 ”参考左图。
想象一 一 盒 6 组 朝向盒说盒 一“凸多边 ”朝向盒 盒 “凸多边”。
图1.2让 一 何确定一 图元集合 否一 “凸多边 ” 伪算法 :(1) -参 :o n –确定一 D 中 相 位置 参考多边 。
–待确定 D 中 。
返 值:位于多边 哪一边。
功 :确定一 位于 多边定义 哪一边。
n ce)else if (n ce)DN T(2) -N T参 :o n1 – 来确定 它多边 否“前 ” 多边 。
o n2 –检测 否 一 多边“前 ” 多边 。
返 值:二 多边 否 一 多边 “前 ”。
功 :检测 二 多边 一 顶 否 一 多边 “前 ”。
O N-I o n2)o n2-N T)n true(3) -X-SET参 :– 来检测 否“凸多边 ” 图元集合。
返 值:集合 否 “凸多边 ”。
功 :相 于集合中 它多边 检 一 多边 否位于它多边 “前 ” 任意 多边 满 规 集合“凸多边 ”。
--)for h ()for h ()-[j]))n true-N T中 进行 意味着 多边 位于多边 B“前 ”你 想 认 多边 B一定位于多边B“前 ”。
示 一 。
图1.3图1.3中 多边1位于多边2“前 ” 顶p3、p4位于多边2“前 ”而多边 却 位于多边 1“前 ” 顶 2位于多边1“后 ”。
e e{o de //}e{e e Tree // 接 属 层次e r // 位于 多边// 右h ild // 左[] // 中 多边 集合}y gon{1 // 多边 顶 13 // 多边 顶 23 // 多边 顶 3}现 你 一 多边 顶 来定义件加速 来多边 进行 。
多边 集合小 集合 多 法 你 任意选择 中 一 后 它来 中 多边 进行 把位于 多边 保存 右 中而位于 多边 保存左 中。
法 缺 非常明 想选择一 中 多边 相等 集合 非常困难 中 无 选择 。
何 集合中选择一 最佳 呢?问题给一 适 解决案。
现 已 一 -N T 它 功 确定一 多边 否位于 它多边。
现 做 修改 它也 确定一 多边 否横跨过 它多边 定义 。
算法 :(4) L ATE-SIDE参 :o n1 –确定 它多边 相 位置 多边 。
o n2 –确定相 位置 多边 。
返 值:多边 2位于多边 哪一边功 :过 一 多边 二 多边 上 一 顶 进行检测。
顶 位于 二 多边多边 2 认 位于多边 “前 ”。
二 多边 顶 位于 一 多边多边 2 认 位于多边 “后 ”。
二 多边 顶 位于一 多边 上 多边2 认 位于多边 。
最后一 顶 即位于 位于 多边 2 认 横跨过多边 1。
L-o n1, Pol o n2)e = 0o n2-N T)then e + 1I FY-D)if (Num e = 0)N Te > 0)De = 0)I NG上 算法也给 解答 一 问题 一 多边横跨过 何进行 理 上 算法中 多边多边 解决画家算法中 问题:循环覆盖 多边 相交。
图 示 多边 何进行 。
图1.4图1.4 示 多边 1 而多边 横跨过多边1 图右边 示 多边 2、3多边 2位于“前 ”而多边 位于 “后 ”。
建立一 B SP首 确定 问题 何保证二 衡 意味着 于 一深度而言 太 差异 同 一 左、右 限制 次 。
一次 会产 多边 建立B SP产 太多 多边 图 加速 会加 器 担 而降低 速。
同 一 衡 二 进行遍历 会耗费许多无谓 。
确定一 合理 次 便于 一 衡 二 同 减少 多边 产 。
码示 何过循环多边 集合来 最佳 多边 。
(5) --O N参 :– 于 找最佳多边 集合。
返 值:最佳 多边 。
功 :指定 多边 集合进行搜索 返 最佳 集合 多边。
指定 集合 一 “凸多边 ” 返 。
E-I NG-P)--))Y GONY GONI TYo n = 0循环 找集合 最佳 。
Y GON)for each 多边算 前多边 定义 、 横跨过多边 。
g = 0for each 多边 t P1L ATE-SIDE(P1, P2)N T)e e + 1D)e + 1I NG)g + 1算 前多边 集合 多边 值。
if e)i on eelsee前多边 结 。
前多边少 多边同 后 集合值 接受 保存 前 多边 候选 。
前多边 最佳 一 相同 多边而 后 集合 值 前多边 作 候选 。
n &&s ||s &&o n))n = P1gi on过 一预 定义常 来减少 接受 最小 值。
En四、实验结五、实验心过 次实验 目 于掌握BS P 原理熟悉Ogr e中基于B SP法。
BSP原理 :建立BSPTrees 最 想法 一 图元 集合 集合 一 后 图元集合 小 集合 意 集合 凸多边 。
意味着 集合中任一多边 位于相同集合中 它多边 前 。
BSP现解决 遮挡判定 筛选 问题 件ZBuf fer现后 筛选 中 ;而 于 筛选 外 过Po rtalP VS来实现 解 优缺 P ortal复杂 PVS; 次实验 B S P流程也 一定 认识Ogre 识 学 强化。
六、 码//BSP.hf_H__e_H__d e m ple.h"d e.h"#if O RM ==d e i ls.h"p ace Ogre;p ace i tes;: c m ple{c:(){["] = "BSP";[n"] = e r. "3.";[n ail"] = _bsp.png";[o ry"] = t ry";}i ns(){;b ack(e r");n;}c ted:void(){i on and map name f g filecf;-t h(m ap.cfg"));(v e");("Map");#ifi ve to the app,d ei onif:i ve, "/", )) i ve dirsa th() + "/"i ve);:i ve, "Zip",(), true);}void g er(){-g er("); //e}void c es(){.e for use with the br at 0.7. */-g Bar(1, 1, 0);o n();e Mgr);());(), fals);-g Bar();}void(){e so n();r oup(rgm.g());());}void V iew(){V iew();work-a nce(4);-n ce(4000);-t(true);s-(true Z);-e(90));-i on);-n);-d(350); r}g mMap;};//BSP.cppd e i n.h"d e"BSP.h"p ace Ogre;p ace i tes;fi n* sp;e* s;n"C"r t void u gin(){s = new;-f o()["] + e");-m ple(s);g in(sp);}n"C"r t void g in(){(sp);E sp;e s;}。