计算机图形学·25 消隐2 区域子分算法-光线投射算法

本文为记录专业课计算机图形学的部分笔记,参考教材为Angel的第八版交互式计算机图形学------基于WebGL 2.0的自顶向下方法。

1、区域子分算法的由来:①Z缓存器算法,将像素孤立来考虑,未利用相邻像素之间存在的属性的连贯性,即区域的连贯性,所以算法效率不高;②区间扫描线Z缓存器算法仅利用了扫描线的连贯性。实际上,可见多边形至少覆盖了绘图窗内的一块区域,如果能将这类区域找出来,则避免了在每个像素处计算深度值,消隐问题也就解决了。

基本思路:

首先,将场景中的多边形投影到绘图窗口内(假设它为边长为k的正方形)

然后,判断窗口/多边形关系是否足够简单:

若是足够简单,则按简单关系来处理,并且算法结束;

否则将窗口进一步分为四块(左上,右上,左下,右下)。对此四个小窗口重复上述过程,直到窗口仅为一个像素大小。

此时可能有多个多边形覆盖了该像素,计算它们的深度值,以最靠近观察点的颜色显示该像素即可。

何谓"窗口/多边形关系足够简单?"

存在下列情况之一,即可称为窗口/多边形关系足够简单:

①窗口为空,即多边形与窗口的关系是分离的------取背景色,图中(a)

②窗口仅内含一个多边形,或者一个多边形与窗口相交------此时先对多边形投影进行裁剪,再对裁剪结果进行分别上色,图中(b)和(c)

③有一个多边形的投影包围了窗口,并且它是最靠近观察点的------,以该多边形颜色上色,图中(d)

如何判别多边形与窗口的分离与包围关系?可以使用例如编码方法------区域编码:多边形顶点的编码/多边形边的编码/多边形的编码。

2、光线投射算法(Ray casting)基本思路:

①将通过绘图窗口内每一个像素的投影线与场景中的所有多边形求交。

②如果有交点,用深度值z最大 (视点最近/小的) 的交点所属的多边形的颜色显示相应的像素;

③如果没有交点,说明没有多边形的投影覆盖此像素,用背景色显示即可。

相关推荐
测试人社区—小叶子2 小时前
接口测试全攻略:从Swagger到MockServer
运维·c++·人工智能·测试工具·机器人·自动化·测试用例
Jack___Xue2 小时前
LangChain实战快速入门笔记(三)--LangChain使用之Chains
人工智能·笔记·langchain
jinxinyuuuus2 小时前
FIRE之旅 财务计算器:实时交互式建模与前端性能工程
前端·人工智能·算法·自动化
千丈之松2 小时前
能力和法律
算法
IT·小灰灰2 小时前
当AI开口说话:可灵视频2.6如何终结“默片时代“重塑视听共生
大数据·人工智能·python·深度学习·数据挖掘·开源·音视频
nju_spy2 小时前
复杂结构数据挖掘(八)社交网络挖掘:标签传播、社区发现、影响力传播
人工智能·数据挖掘·谱聚类·社交网络挖掘·图标签转播·迭代改进·社交影响力分析
多则惑少则明2 小时前
AI测试、大模型测试(八)SpringAI核心技术
人工智能·ai测试·ai大模型测试
youcans_2 小时前
【跟我学YOLO】Mamba-YOLO-World:YOLO-World与Mamba 融合的开放词汇目标检测
论文阅读·人工智能·yolo·计算机视觉·mamba
2401_841495642 小时前
【LeetCode刷题】缺失的第一个正数
数据结构·python·算法·leetcode·数组·哈希·缺失最小正整数