消隐算法二

摘 要 造 型 是 计 算 机 三 维 图 形 处 理 的 基 础, 而 消 隐 则 是 三 维 造 型 的 关 键。 本 文 剖 析 了 当 前 在CAD 三 维 图 形 处 理 中 最 主 要 的8 种 物 体 空 间 消 隐 算 法 和4 种 图 象 空 间 消 隐 算 法。
---- 关 键 词 造 型、 消 隐、 物 体 空 间 法、 图 象 空 间 法
---- 分 类 号
---- 造 型(modeling) 是 计 算 机 三 维 图 形 处 理 的 基 础, 而 消 除 隐 藏 面(hidden surface, 简 称 消 隐) 则 是 三 维 造 型 的 关 键。 所 谓 消 隐 就 是 不 画 出 即 隐 藏 从 当 前 观 察 点 看 不 见 的 三 维 模 型 表 面。 消 隐 算 法 的 核 心 就 是 判 断 三 维 模 型 的 表 面 是 否 可 见。
---- 抽 象 来 看, 一 种 消 隐 算 法 可 以 看 作 一 个 五 元 组, 即
HA = (I, O, D, P, S)
---- 其 中,I 为 要 进 行 消 隐 处 理 的 三 维 对 象 的 集 合;
---- O 为 经 过 消 隐 处 理 的 二 维 对 象 的 集 合;
---- D 为 进 行 消 隐 处 理 时 所 采 用 的 数 据 结 构;
---- P 为 进 行 消 隐 处 理 所 需 基 本 操 作 过 程 的 集 合, 主 要 包 括
分 类、 排 序
三 维 坐 标 变 换
透 视 投 影 变 换
基 本 图 形 元 素 间 的 求 交 计 算
两 个 区 域 重 叠 判 断
点 与 区 域 的 包 含 测 试
面 的 朝 向 测 试
---- S 为 消 隐 策 略, 即 规 定P 中 各 基 本 操 作 过 程 被 采 用 的 先 后 次 序。
---- 因 此, 设 计 消 隐 算 法 时 应 考 虑 上 述 五 个 要 素 及 它 们 之 间 的 相 互 关 系。
---- 在 计 算 机 图 形 学 中, 为 了 简 化 算 法, 一 般 是 利 用 多 面 体 去 逼 近 曲 面 体, 因 此 多 面 体 的 消 隐 算 法 是 曲 面 体 的 基 础。 本 文 的 消 隐 算 法 讨 论 主 要 是 基 于 多 面 体 的 消 隐 问 题, 对 曲 面 体 进 行 多 次 多 面 体 近 似, 对 每 一 多 面 体 运 用 多 面 体 消 隐 算 法 就 能 实 现 曲 面 体 的 消 隐。
---- 基 于B-rep 模 型(Boundary Representative Model) 和CSG 模 型(Constructive Solid Geometry Model) 的 三 维 造 型 消 隐 算 法 可 以 分 为 两 大 类, 即 物 体 空 间 法 和 图 象 空 间 法。 物 体 空 间 法 利 用 三 维 环 境 信 息 或 三 维 视 图( 主 要 使 用 三 维 观 察 坐 标, 有 时 也 使 用 三 维 世 界 坐 标) 来 消 除 隐 藏 面, 即 根 据 空 间 中 各 物 体 三 维 模 型 的 几 何 关 系, 来 判 断 哪 些 表 面 可 见, 哪 些 表 面 不 可 见。 图 象 空 间 法 基 于 物 体 三 维 模 型 的 二 维 显 示 图 形( 使 用 二 维 显 示 坐 标) 来 确 定 物 体 或 表 面 与 观 察 点 的 远 近 关 系, 从 而 判 断 哪 些 表 面 遮 挡 了 其 它 表 面。
---- 本 文 将 分 析 当 前 在CAD 三 维 图 形 处 理 中 最 主 要 的12 中 消 隐 算 法, 其 中8 种 属 于 物 体 空 间 法,4 种 属 于 图 象 空 间 法。 在 实 际 处 理 中, 由 于 物 体 表 面 形 态 的 复 杂 性 和 提 高 消 隐 处 理 的 效 率, 通 常 都 是 结 合 使 用 多 种 消 隐 算 法 来 完 成 物 体 的 消 隐 处 理 的。
---- 一、 物 体 空 间 法
---- 物 体 空 间 法 是 在 三 维 坐 标 系 中, 通 过 分 析 物 体 模 型 间 的 几 何 关 系, 如 物 体 的 几 何 位 置、 与 观 察 点 的 相 对 位 置 等, 来 进 行 隐 藏 面 判 断 的 消 隐 算 法。 世 界 坐 标 系 是 描 述 物 体 的 原 始 坐 标 系, 物 体 的 世 界 坐 标 描 述 了 物 体 的 基 本 形 状。 为 了 更 好 地 观 察 和 描 述 物 体, 经 常 需 要 对 其 世 界 坐 标 进 行 平 移 和 旋 转, 而 得 到 物 体 的 观 察 坐 标。 物 体 的 观 察 坐 标 能 得 到 描 述 物 体 的 更 好 视 角, 所 以 物 体 空 间 法 通 常 都 是 在 观 察 坐 标 系 中 进 行 的。 观 察 坐 标 系 的 原 点 一 般 即 是 观 察 点。
---- 物 体 空 间 法 消 隐 包 括 两 个 基 本 步 骤, 即 三 维 坐 标 变 换 和 选 取 适 当 的 隐 藏 面 判 断 算 法。
---- 一) 三 维 坐 标 变 换
---- 选 择 合 适 的 观 察 坐 标 系 不 但 可 以 更 好 地 描 述 物 体, 而 且 可 以 大 大 简 化 和 降 低 消 隐 算 法 的 运 算。 因 此, 利 用 物 体 空 间 法 进 行 消 隐 的 第 一 步 往 往 是 将 物 体 所 处 的 坐 标 系 转 换 为 适 当 的 观 察 坐 标 系。 这 需 要 对 物 体 进 行 三 维 旋 转 和 平 移 变 换。
---- 设 物 体 顶 点 的 原 始 坐 标 为(x, y, z), 变 化 后 的 观 察 坐 标 为(x*, y*, z*), 则
---- 1 . 旋 转 变 换
物 体 绕Y 轴 旋 转 的 角 度 α 的 三 维 旋 转 变 换 公 式 为
[x* y * z* 1]= [x y z] [ cosα sinα 0 0
-sinα cosα 0 0
0 0 1 0
0 0 0 1]

物 体 绕Z 轴 旋 转 的 角 度 β 的 三 维 旋 转 变 换 公 式 为
[x* y * z* 1]= [x y z] [ cosβ 0 -sinβ 0
0 1 0 0
sinβ 0 cosβ 0
0 0 0 1]

物 体 绕X 轴 旋 转 的 角 度 γ 的 三 维 旋 转 变 换 公 式 为
[x* y * z* 1]= [x y z] [1 0 0 0
0 corγ sinγ 0
0 -sinγ cosγ 0
0 0 0 1]

将 上 述 表 达 式 展 开 后 可 得 如 下 公 式
{ x‘=cosα×x-sinα×z;
y‘=cosβ×y-sinβ×x‘;
z‘=sinα×x+cosα×z;
x*=cosβ×x‘+sinβ×y;
y*=sinγ×z‘+cosγ×y‘;
z*=cosγ×z‘-sin γ×y‘;

---- 其 中,x‘、y‘ 和z‘ 是 运 算 中 间 变 量。
---- 2 . 平 移 变 换
---- 三 维 平 移 变 换 公 式 如 下
[x* y * z* 1]= [x y z 1] [1 0 0 0
0 1 0 0
0 0 1 0
Δx Δy Δz 1]

---- 展 开 后 即 得
[ x*=x+Δx
y*=y+Δy
z*=z+Δz 

---- 其 中 Δx、 Δy、 Δz 分 别 为 物 体 沿X、Y、Z 轴 的 平 移 量。
---- 二) 消 隐 算 法
---- 常 用 的 物 体 空 间 消 隐 算 法 包 括 平 面 公 式 法、 背 面 消 除 法、 径 向 预 排 序 法、 径 向 排 序 法、 隔 离 平 面 法、 深 度 排 序 法、 光 线 跟 踪 法 和 分 解 法。 其 中 前 四 种 算 法 最 常 用, 它 们 的 基 础 都 是 背 面 消 隐 原 理。 所 谓 背 面 消 隐 原 理, 即 是 相 对 观 察 点 来 说 朝 向 后 面 的 物 体 表 面 是 不 可 见 的, 应 被 隐 藏。
---- 1 . 平 面 公 式 法
---- 根 据 解 析 几 何 原 理, 通 过 标 准 的 平 面 方 程 可 以 判 断 给 定 点 是 在 平 面 的 正 面 还 是 背 面。 平 面 公 式 法 利 用 此 原 理 来 判 断 观 察 点 位 于 物 体 表 面 的 哪 一 面, 如 位 于 背 面 一 侧, 则 表 面 不 可 见, 应 被 消 隐; 反 之 则 可 见。
---- 对 物 体 得 任 意 表 面, 可 将 其 划 分 为 若 干 个 平 面, 在 根 据 平 面 上 任 意 三 点 的 坐 标 可 以 求 得 其 平 面 方 程。 标 准 得 平 面 方 程 为
Ax+By+Cz+D = 0;
---- 其 中A、B、C、D 为 决 定 平 面 得 常 数。 如 果(x1, y1, z1)、(x2, y2, z2)、(x3, y3, z3) 为 平 面 上 已 知 得 三 点 坐 标, 则 可 求 得A、B、C、D 如 下:
{ A=y1(x2-x3)+y2(z3-z1)+y3(z1-z2);
B=z1(x2-x3)+z2(x3-x1)+z3(x1-x2);
C=x1(y2-y3)+x2(y3-y1)+x3(y1-y2);
D=-x1(y2z3-y3z2)-x2(y3z1-y1z3)-x3(y1z2-y2z1);

---- 设 观 察 点 坐 标 为(x, y, z), 如 果
Ax+By+Cz+D = 0, 则 观 察 点(x, y, z) 位 于 平 面 上;
Ax+By+Cz+D > 0, 则 观 察 点(x, y, z) 位 于 平 面 背 面 一 侧, 平 面 不 可 见, 应 被 隐 藏;
Ax+By+Cz+D < 0, 则 观 察 点(x, y, z) 位 于 平 面 正 面 一 侧, 平 面 是 可 见 面, 应 被 画 出。
---- 通 过 对 物 体 进 行 适 当 旋 转 和 平 移 后, 可 将 物 体 变 换 到 以 观 察 点 为 原 点 得 观 察 坐 标 系 中, 如 果 在 观 察 坐 标 系 中 求 得 了 平 面 得 方 程Ax+By+Cz+D = 0, 将 观 察 点 坐 标(0,0,0) 代 入 上 面 得 判 断 准 则, 则 可 得 出 如 下 得 简 单 判 据:
D > 0, 则 平 面 不 可 见, 应 被 隐 藏;
D < 0, 则 平 面 是 可 见 面, 应 被 画 出。
---- 平 面 公 式 法 算 法 简 便, 是 在 实 际 中 使 用 最 频 繁 得 消 隐 算 法。 但 它 只 能 用 于 凸 面 体 得 消 隐, 而 不 适 用 于 凹 面 体 消 隐。
---- 2 . 背 面 消 除 法
---- 背 面 消 除 法 是 直 接 运 用 背 面 消 隐 原 理 的 消 隐 算 法。 在 数 学 上, 物 体 表 面 的 法 向 量 即 是 表 面 的 朝 向, 因 此, 法 向 量 方 向 背 向 观 察 点 的 物 体 表 面 都 应 被 消 隐。

---- 表 面 的 法 向 量 是 否 背 向 观 察 点 可 以 通 过 表 面 法 向 量 与 视 向 量 的 点 积 来 决 定。 如 图1 所 示, 设 经 坐 标 变 换 后, 坐 标 系 的 原 点O 即 是 观 察 点, 空 间 中 任 意 平 面ABC 的 法 向 量 为, 法 向 量 为 与 平 面 的 交 点 为P, 则 从 向 量OP 即 是 平 面ABC 的 视 向 量。
---- 如 果> 0, 则 物 体 表 面 是 可 见 的 朝 向 观 察 点 的 面; 如 果, 则 物 体 表 面 是 不 可 见 的 背 向 观 察 点 的 面, 应 被 消 隐。
---- 设 θ 为 向 量 和 之 间 的 夹 角, 视 向 量 的 长 度 为 线 段OP 的 长 度|OP|, 则 根 据 向 量 点 积 的 定 义 可 知=|OP|||cos θ。 如 果> 0, 则cos θ> 0( 即> θ> 0); 反 之, 如 果, 则cos θ 0( 即 θ)。
---- 因 此, 背 面 消 除 法 的 判 据 简 化 为:
cos θ 0, 则 物 体 表 面 不 可 见, 应 被 消 隐;
cos θ> 0, 则 物 体 表 面 可 见, 应 被 画 出。
---- 根 据 平 面 法 向 量 的 定 义 可 知, 在 平 面 上 按 逆 时 针 方 向 选 取P1(x1, y1, z1)、P2(x2, y2, z2)、P3(x3, y3, z3) 三 点, 则
---- (公式略)
---- 其 中:
---- (公式略)
---- 经 过 投 影 变 化 后, 视 向 量 与Z 轴 是 平 行 的, 因 此 向 量 和 之 间 的 夹 角 θ 即 为Z 轴 与 向 量 的 夹 角, 所 以
---- 由 于||>0, 所 以cos θ 的 正 负 取 决 于C, 因 此 背 面 消 除 法 的 判 据 转 化 化 为:
---- (公式略)
C 0, 则 物 体 表 面 不 可 见, 应 被 消 隐;
C > 0, 则 物 体 表 面 可 见, 应 被 画 出。
---- 3 . 径 向 预 排 序 法
---- 径 向 预 排 序 法 根 据 物 体 在 三 维 坐 标 系XY 平 面 中 的 角 位 置 来 判 断 哪 些 物 体 挡 住 了 其 它 物 体, 物 体 的 哪 些 表 面 挡 住 了 其 它 表 面。 对 具 有 相 同 角 位 置 的 物 体 或 表 面, 与 观 察 点 较 近 的 将 挡 住 较 远 的。 如 图2 所 示。

图2 径 向 预 排 序 法 示 例
---- 径 向 预 排 序 法 消 隐 的 要 点 是 先 对 物 体 及 物 体 的 表 面 进 行 由 远 及 近 的 排 序, 对 具 有 相 同 角 位 置 的 物 体 或 表 面, 先 画 较 远 的, 后 画 较 近 的, 这 样 如 果 较 近 的 物 体 或 表 面 挡 住 了 较 远 的 物 体 或 表 面, 则 被 遮 挡 的 部 分 被 覆 盖 而 实 现 消 隐。 但 对 具 有 不 同 角 位 置 的 物 体 或 表 面, 先 画 哪 一 个 可 根 据 需 要 来 决 定。 如 果 存 在 凹 面 物 体 的 消 隐, 一 般 应 先 画 物 体 中 心 部 分, 再 画 物 体 的 两 侧, 以 正 确 地 表 现 互 相 重 叠 的 凹 面 模 型。
---- 径 向 预 排 序 法 可 以 对 任 意 形 状 的 物 体 进 行 消 隐 处 理。 但 需 要 预 先 知 道 观 察 角 度, 并 根 据 角 位 置 对 物 体 的 画 图 顺 序 预 先 排 序。 而 且 构 造 模 型 的 编 码 受 到 这 种 排 序 的 限 制, 模 型 不 能 进 行 旋 转 变 换。
---- 4 . 径 向 排 序 法
---- 径 向 排 序 法 是 对 径 向 预 排 序 法 的 改 进 算 法, 使 得 构 造 模 型 的 编 码 能 根 据 观 察 角 度 的 变 化, 来 自 动 调 整 物 体 或 表 面 的 远 近 顺 序 即 画 图 顺 序, 以 实 现 对 模 型 的 旋 转 变 换, 以 便 能 从 不 同 的 角 度 来 观 察 物 体。 算 法 需 要 检 测 旋 转 变 换 的 角 度, 并 随 角 度 的 变 化 而 调 整 物 体 或 表 面 的 远 近 顺 序。
---- 5 . 隔 离 平 面 法
---- 隔 离 平 面 法 主 要 用 于 多 个 物 体 之 间 的 消 隐 处 理, 其 基 础 是 平 面 公 式 法。 其 基 本 原 理 是, 在 需 要 进 行 消 隐 处 理 的 两 个 物 体 之 间 建 立 一 个 虚 拟 平 面, 并 根 据 平 面 公 式 法 判 断 出 两 个 物 体 分 别 位 于 该 平 面 的 哪 一 侧, 以 及 该 平 面 的 哪 一 侧 朝 向 观 察 点, 则 可 以 推 论 得 到 位 于 平 面 朝 向 观 察 点 一 侧 的 物 体 离 观 察 点 较 近, 将 遮 挡 位 于 平 面 背 向 观 察 点 一 侧 的 物 体。 即 位 于 平 面 背 向 观 察 点 一 侧 的 物 体 应 被 首 先 画 出, 且 应 进 行 消 隐。
---- 6 . 深 度 排 序 法
---- 深 度 排 序 法 也 是 主 要 用 于 分 析 多 个 物 体 之 间 是 否 存 在 表 面 遮 挡 的 消 隐 算 法。 其 原 理 是 比 较 不 同 物 体 或 表 面 的 表 示 远 近 的z 坐 标, 在 观 察 点 位 于 原 点 的 观 察 坐 标 系 中,|z| 值 越 大 的 物 体 或 表 面 离 观 察 点 越 远, 被 消 隐 的 可 能 性 越 大, 应 先 画 出;|z| 值 越 小 的 物 体 或 表 面 离 观 察 点 越 近, 将 可 能 遮 挡 较 远 的 物 体 或 表 面, 应 后 画 出。
---- 深 度 排 序 法 需 要 用 到 深 度 信 息 和 绘 图 顺 序, 通 常 用 于 模 型 数 据 中 包 含 深 度 信 息 和 绘 图 顺 序 的 物 体 造 型。
---- 7 . 光 线 跟 踪 法
---- 光 线 跟 踪 法 的 基 本 原 理 是, 人 能 看 见 物 体 是 因 为 物 体 能 反 射 光, 因 此, 跟 踪 从 光 源 发 出 的 光 线, 光 线 投 射 到 物 体 上, 再 从 物 体 反 射 到 观 察 点, 在 光 线 轨 迹 中 离 观 察 点 最 近 的 物 体 表 面 将 遮 挡 其 它 物 体 表 面。
---- 光 线 跟 踪 法 需 要 分 析 物 体 表 面 的 每 一 点 的 光 反 射 状 态, 因 此 需 要 的 内 存 空 间 较 大, 运 算 速 度 也 较 慢。 但 这 种 方 法 可 同 时 生 成 物 体 的 光 照 模 型, 产 生 的 消 隐 效 果 和 真 实 感 都 很 好。
---- 8 . 分 解 法
---- 分 解 法 是 对CSG 模 型 的 一 种 消 隐 算 法, 首 先 将 复 杂 物 体 分 解 为 一 系 列 的 立 方 体, 离 观 察 点 近 的 立 方 体 将 遮 挡 远 的 立 方 体, 从 而 实 现 消 隐。 分 解 法 算 法 复 杂, 需 要 的 内 存 空 间 大, 速 度 也 满, 近 仅 用 于 一 些 特 殊 的 场 合。
---- 二、 图 象 空 间 法
---- 图 象 空 间 法 基 于 物 体 三 维 模 型 的 二 维 显 示 图 形 来 确 定 物 体 或 表 面 上 的 每 一 点 与 观 察 点 的 远 近 关 系, 从 而 判 断 哪 些 表 面 遮 挡 了 其 它 表 面。 为 了 获 得 三 维 物 体 的 二 维 显 示 图 形, 在 对 物 体 进 行 旋 转 和 平 移 变 化 后, 还 需 对 物 体 进 行 透 视 投 影 变 换。

图3 透 视 投 影 变 换 示 意
---- 如 图3 所 示, 三 维 空 间 中 点P(x, y, z) 由 透 视 点E 沿Z 轴 透 视 投 影 变 换 到XOY 二 维 平 面 中 的 点P*(x*, y*, z*)。 设E 点 距 原 点O 的 距 离 为r, 则 透 视 投 影 变 换 公 式 为:
---- (x*, y*, z*, 1)=(x, y, z, 1)MPeMPr
---- 式 中MPe、MPr 分 别 为 透 视 变 换 矩 阵 和 投 影 变 换 矩 阵, 它 们 的 表 达 式 如 下:
---- (公式略)
---- 将 透 视 投 影 变 换 公 式 展 开 后 可 得:
---- (公式略)
---- 1 . Z 缓 冲 区 法
---- Z 缓 冲 区 法 首 先 建 立 一 个 大 的 缓 冲 区, 用 来 存 储 三 维 物 体 沿Z 轴 透 视 投 影 而 得 到 的 二 维 图 形 的 所 有 象 素 的 值, 因 此 叫 做Z 缓 冲 区。Z 缓 冲 区 的 单 元 个 数 与 屏 幕 上 象 素 点 的 个 数 相 同, 也 和 帧 缓 冲 区 的 单 元 个 数 相 同, 而 且 它 们 之 间 是 一 一 对 应 的。Z 缓 冲 区 每 个 单 元 的 大 小 取 决 于 图 形 在 观 察 坐 标 系 中Z 方 向 的 变 化 范 围。Z 缓 冲 区 的 每 个 单 元 的 值 是 对 应 象 素 点 所 对 应 的 物 体 表 面 点 的Z 坐 标 值。
---- 利 用Z 缓 冲 区 法 进 行 消 隐 和 造 型 的 过 程 就 是 对 屏 幕 中 每 一 点 进 行 判 断 并 给 帧 缓 冲 区 和Z 缓 冲 区 中 相 应 单 元 进 行 赋 值 的 过 程。 现 用 形 式 化 语 言 描 述 该 算 法 如 下:
Z缓冲区消隐算法
{
1)将帧缓冲区各单元的值置为背景色值;
2)将Z缓冲区各单元的值置为Z坐标可能出现的最大值;
3)循环:对每一物体
{
循环:对物体每一面的每一点(x, y, z)
{
i)对(x, y, z)做透视投影变换,得到变换后的X、Y坐标(x*, y*);
ii)如果Z缓冲区中(x*, y*)对应单元的值小于z,则
{
a)将Z缓冲区中(x*, y*)对应单元的值置为z;
b)将帧缓冲区中(x*, y*)对应单元的值置为点
(x, y, z)的属性值(通常是亮度、颜色值或颜色查找表的索引值);
}
iii)如果Z缓冲区中(x*, y*)对应单元的值大于z,则
{
a)说明目前帧缓冲区中(x*, y*)对应单元的
所表示的物体上点比点(x, y, z)
更接近观察点,即点(x, y, z)应被消隐;
b)将Z缓冲区和帧缓冲区中(x*, y*)对应单元的值均保持不变;
}
}
}
4)循环:对屏幕上每一点(x*, y*)
根据帧缓冲区中(x*, y*)对应单元的值画出象素点。
}
---- Z 缓 冲 区 消 隐 算 法 简 单、 可 靠, 而 且 消 隐 和 表 现 效 果 很 好。 但 需 要 的 内 存 容 量 大, 运 算 复 杂, 费 时。
---- 2 . 扫 描 线 法
---- 扫 描 线 法 是 对Z 缓 冲 区 法 进 行 改 进 而 派 生 出 来 的 消 隐 算 法。 为 了 克 服Z 缓 冲 区 法 需 要 分 配 与 屏 幕 上 象 素 点 的 个 数 相 同 单 元 的 巨 大 内 存 这 一 缺 点, 可 以 将 整 个 屏 幕 分 成 若 干 区 域, 一 个 区 一 个 区 地 进 行 处 理, 这 样 可 以 将Z 缓 冲 区 的 单 元 个 数 减 少 为 屏 幕 上 一 个 区 域 的 象 素 点 的 个 数。 将 屏 幕 的 一 行 作 为 这 样 的 区 域, 便 得 到 了 扫 描 线 法, 又 称 为 扫 描 线Z 缓 冲 区 法,Z 缓 冲 区 的 单 元 个 数 仅 为 屏 幕 上 一 行 的 象 素 点 的 个 数。
---- 扫 描 线 法 的 形 式 化 语 言 描 述 如 下:
扫描线消隐算法
{
1)循环:从上到下对屏幕中每一条扫描线
 {
i)将帧缓冲区对应行各单元的值置为背景色值;
ii)将Z缓冲区各单元的值置为Z坐标可能出现的最大值;
iii)循环:对每一物体
{
循环:对物体每一表面
{
如果当前扫描线与当前物体表面相交,则
{
循环:扫描线与当前物体表面的交点是成对的,
对每对交点之间的每一点(x, y, z)
{
A)对(x, y, z)做透视投影变换,
得到变换后的X、Y坐标(x*, y*);
B)如果Z缓冲区中(x*, y*)对应单元的值小于z,则
{
a)将Z缓冲区中(x*, y*)对应单元的值置为z;
b)将帧缓冲区中(x*, y*)对应单元的值置为点(x, y, z)
的属性值(通常是亮度、颜色值或颜色查找表的索引值);
}
C)如果Z缓冲区中(x*, y*)对应单元的值大于z,则
{
a)说明目前帧缓冲区中(x*, y*)对应单元的所表示
的物体上点比点(x, y, z)更接近观察点,即点(x, y, z)应被消隐;
b)将Z缓冲区和帧缓冲区中(x*, y*)对应单元的值均保持不变;
}
}
}
}
}
iv)循环:对屏幕上每一点(x*, y*)
根据帧缓冲区中(x*, y*)对应单元的值画出象素点。
}
}
---- 3 . 视 线 投 射 法
---- 视 线 投 射 法 的 基 本 原 理 是 把 物 体 的 二 维 显 示 图 像 看 成 是 从 眼 睛 到 物 体 的 视 线 把 物 体 的 可 见 点 投 射 到 显 示 屏 上 的 投 影。 该 算 法 的 形 式 化 语 言 描 述 如 下:
视线投射消隐算法
{
1)循环:对屏幕上每一象素(x*, y*)
{
确定经过视点和象素(x*, y*)的直线Ray;
判断直线Ray(x, y)与物体是否相交;
如果存在交点,则
{
a)求出直线Ray与物体的第一个交点(x, y, z);
b)交点(x, y, z)是可见点,其余交点都应消隐;
c)将点(x, y, z)的属性值(通常是亮度、颜色值或
颜色查找表的索引值)赋给象素(x*, y*);
}
}
2)循环:对屏幕上每一点(x*, y*)
画出象素(x*, y*)对应的属性值。
}

---- 4 . 极 值 检 测 法
---- 极 值 检 测 法 需 与 与 其 它 消 隐 算 法 结 合 适 用, 主 要 用 来 提 高 消 隐 速 度。 极 值 检 测 法 通 过 计 算 物 体 表 面 的 显 示 坐 标 的 极 大 和 极 小 值 来 判 断 这 两 个 表 面 是 否 存 在 重 叠。 如 果 一 个 表 面 的x 显 示 坐 标 的 极 大 值 小 于 另 一 个 表 面 的x 显 示 坐 标 的 极 小 值, 则 这 两 个 表 面 不 重 叠, 可 以 按 任 意 顺 序 直 接 画 出。 否 则, 这 两 个 表 面 存 在 重 叠, 需 要 用 其 它 消 隐 算 法 进 行 消 隐 处 理。
---- 通 常 先 用 极 值 检 测 法 画 出 不 发 生 重 叠 的 表 面, 然 后 在 用 其 它 算 法 处 理 重 叠 的 表 面。
时间: 2024-10-13 10:07:47

消隐算法二的相关文章

消隐算法的总结与展望

1 引言 消隐(Hidden Surface Removal)是在一定观察方向下消除不可见的线和面.有时也称为可见性测试.虽然各种消隐算法在可见性测试和不可见面消除方法上区别不大.但这些消隐方法有时还可以一起被统称为不可见面的消除.简称消隐.在三维造型技术.真实感图形的显示.虑拟场景的显示.以及在地形.地图的绘制中.消隐都起到至关重要的作用.所以研究和实现消隐算法,并根据场景的复杂度和各个不同应用领域的场景来提高消隐算法的速度是很有必要的,它对整个三维图形显示.真实感图形的显示以及各种地形地貌图

消隐算法

一.消隐 当我们观察空间任何一个不透明的物体时,只能看到该物体朝向我们的那些表面,其余的表面由于被物体所遮挡我们看不到. 若把可见的和不可见的线都画出来,对视觉会造成多义性. 会有后边两种情况 要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,简称为消隐. 消隐不仅与消隐对象有关,还与观察者的位置有关. 二.消隐的分类 1>按消隐对象分类 线消隐:消隐对象是物体的边 面消隐:消隐对象是物体上的面 2>按消隐空间分类 物体空间的消隐算法: 以场景中的物体为处理

数据结构与算法二

1.课程安排表: 1. 线性表 2. 字符串 3. 栈和队列 4.树 5.查找 6.排序 7.暴力枚举法 8.广度优先搜索 9.深度优先搜索 10.分治 11.贪心 12.动态规划 13.图 14.数学方法与常见模型 15.大整数运算 16. 基础功能 2.   编程技巧: 1.把较大的数组放在main 函数(全局变量)外,作为全局变量,这样可以防止栈溢出,因为栈的大小是有限制的.GCC (C编译器) 段错误 2.如果能够预估栈,队列的上限,则不要用stack,queue,使用数组来模拟,这样速

Graham算法—二维点集VC++实现

一.凸包定义 通俗的说就是:一组平面上的点,求一个包含所有点的最小凸多边形,这个最小凸多边形就是凸包. 二.Graham算法思想 概要:Graham算法的主要思想就是,最终形成的凸包,即包围所有点的凸多边形,假定多边形是按逆时针方向生成的,那么多边形内部包围的所有点与多边形每个有向边的关系都是:点在有向边的左边.依照此思想,只要找到一个出发点,然后依此出发点按逆时针方向构建多边形,并保证每加入一条有向边时,都要满足其余点都在该边的左边. ***点与线的关系定义:平面上的三点P1(x1,y1),P

Kruskal算法(二)之 C++详解

本章是克鲁斯卡尔算法的C++实现. 目录 1. 最小生成树 2. 克鲁斯卡尔算法介绍 3. 克鲁斯卡尔算法图解 4. 克鲁斯卡尔算法分析 5. 克鲁斯卡尔算法的代码说明 6. 克鲁斯卡尔算法的源码 转载请注明出处:http://www.cnblogs.com/skywang12345/ 更多内容:数据结构与算法系列 目录 最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的

每周算法(二)

每周算法 二 视屏地址:http://edu.51cto.com/course/course_id-5113.html 1.  递归实现my_strlen <1> 题目描述:实现求字符串长度函数my_strlen <2> 方法一:直接法 <3> 方法二:递归法 2.  递归实现n! <1> 题目描述:输入n值,求解n的阶乘 <2> 方法一:累乘法 <3> 方法二:递归法 3.  递归实现斐波那契数列Fib(n) <1> 题

白话经典算法二叉堆排序之思想简介

常用的排序算法有冒泡排序,插入排序和选择排序.他们的时间复杂度是o(n2),与数据量的平方成正比.他们的效率还是比较低的.现在来说说他们的效率为什么比较低下.以冒泡排序为例,它每一轮都是与相邻的元素进行交换,交换的距离为1,每次每个(没有冒泡出来的)元素都要与前一个比较再交换.每次相邻的比较只能比较出两个元素的大小,不能以整个数组进行参照来确定在整个数组里的大小,也就是说每次的比较不能确定其他元素的相对位置,因而每次比较的贡献不大,所以这样的比较是笨拙的,进而需要完全比较O(n2)次才能得出正确

{区块链教程}以太坊源码分析fast sync算法二

{区块链教程}以太坊源码分析fast sync算法二:上面的表格应该这样解释:如果我们每隔K个区块头验证一次区块头,在N个区块头之后,伪造的概率小于***者产生SHA3冲突的概率.这也意味着,如果确实发现了伪造,那么最后的N个头部应该被丢弃,因为不够安全.可以从上表中选择任何{N,K}对,为了选择一个看起来好看点的数字,我们选择N = 2048,K = 100.后续可能会根据网络带宽/延迟影响以及可能在一些CPU性能比较受限的设备上运行的情况来进行调整. Using this caveat ho

算法—二叉堆

实现栈或是队列与实现优先队列的最大不同在于对性能的要求.对于栈和队列,我们的实现能够在常数时间内完成所有操作:而对于优先队列,插入元素和删除最大元素这两个操作之一在最坏情况下需要线性时间来完成.我们接下来要讨论的基于数据结构堆的实现能够保证这两种操作都能更快地执行. 1.堆的定义 数据结构二叉堆能够很好地实现优先队列的基本操作.在二叉堆的数组中,每个元素都要保证大于等于另两个特定位置的元素.相应地,这些位置的元素又至少要大于等于数组中的另两个元素,以此类推.如果我们将所有元素画成一棵二叉树,将每