- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十讲 H的idden Surface Removal
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 内容 消隐的基本概念 图像空间消隐:z缓冲器(z-buffer)算法 物体空间消隐 背面剔除算法 表优先级算法 三维物体的深度排序算法 二叉空间剖分树算法 * 二叉空间剖分树(Binary Space Partitioning) 二叉空间剖分树 (BSP树): 适用于多边形场景 如果场景中的多边形可以被一个平面分割成两部分,与视点同侧的物体不会被异侧物体遮挡 对位于分割平面两侧的多边形继续进行递归分割,直至每一个分割平面两侧或一侧只有一个多边形 分割过程可以用一个二叉树的数据结构来表示 在BSP树算法中,分割平面取作场景中的多边形 适用于视点变化场景不变的绘制 * 二叉空间剖分树 z x H. Fuchs, Z. M. Kedem and B. F. Naylor. “On Visible Surface Generation by A Priori Tree Structures.” ACM Computer Graphics, pp 124–133. July 1980. * 二叉空间剖分树实例 箭头表示多边形的正侧。在图 (a)中,首先选取1作为分割平面,2位于1的正侧,3和5位于1的负侧。4被1分割为4a和4b。其中,4a位于1的正侧,4b位于1的负侧。 * 二叉空间剖分树实例 对上述二叉树的左右两个分支进行进一步的分割。对于左侧分支,再取2所在平面为分割平面,4a位于2的正侧;对于右侧分支,取3所在的平面为分割平面,4b位于3的正侧,5位于3的负侧。至此建立了对所给场景的BSP树,树的每个叶节点是一个多边形 * 二叉空间剖分树 给定场景的BSP树不是唯一的 “最佳”的BSP树的两个标准 使BSP树尽可能平衡 尽可能减少多边形的剖分 * 二叉空间剖分树另一种实例 * 二叉空间剖分树描述性算法 BSP_Tree BSP_MakeTree(PolygonList) if PolygonList == NULL then BSPTree=NULL; else { PartitionPolygon = SelectAndRemove(PolygonList); PositiveBranch = NegativeBranch = NULL; for ( each polygon P in PolygonList) { if( P in the positive side of PartitionPolygon) AddPolygonToBSP(P, PositiveBranch); else if (P in the negative side of PartitionPolygon ) AddPolygonToBSP(P, NegativeBranch); else { SubdividePolygon(P, PartitionPolygon, PosiP, NegaP); AddPolygonToBSP(PosiP, PositveBranch); AddPolygonToBSP(NegaP, NegativeBranch); } } CombineBSPTree(PositiveBranch, PartitionPolygon, NegativeBranch); } * 二叉空间剖分树的遍历 BSP树的从后往前遍历 可以从后往前, 也可以从前往后(被绘制的象素不再绘制) 视点位于分割平面的正侧,遍历顺序: 负侧分支→根结点多边形→正侧分支 视点位于分割平面的负侧,遍历顺序: 正侧分支→根结点多边形→负侧分支 * 二叉空间剖分树的遍历算法 void showBSP(v: Viewer, T: BSPtree) { if (T is empty) return; P = root of T; if (viewer is in front of P) { showBSP(back subtree of T); draw P; showBSP(front subtree of T); } else { showBSP(front subtree of T); draw P; showBSP(back subtree of T); } } Henry Fuchs the Federico Gil Professor of Com
文档评论(0)