消隐算法二
摘 要 造 型 是 计 算 机 三 维 图 形 处 理 的 基 础, 而 消 隐 则 是 三 维 造 型 的 关 键。 本 文 剖 析 了 当 前 在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 显 示 坐 标 的 极 小 值, 则 这 两 个 表 面 不 重 叠, 可 以 按 任 意 顺 序 直 接 画 出。 否 则, 这 两 个 表 面 存 在 重 叠, 需 要 用 其 它 消 隐 算 法 进 行 消 隐 处 理。 ---- 通 常 先 用 极 值 检 测 法 画 出 不 发 生 重 叠 的 表 面, 然 后 在 用 其 它 算 法 处 理 重 叠 的 表 面。