三 维 图 形 软 件 的 利 器——OpenGL

许 耀 昌----怀 力


OpenGL — — 面 向 图 形 硬 件

---- 目 前, 计 算 机 图 形 学 技 术 已 经 进 入 到 了 三 维 真 实 动 感 图 形 时 代。 三 维 图 形 的 制 作、 展 示 及 应 用 在 我 们 周 围 无 处 不 在。OpenGL 则 是 利 用 计 算 机 生 成 三 维 真 实 图 形 的 基 本 工 具 之 一。

---- OpenGL 是 面 向 图 形 硬 件 的 强 有 力 软 件 接 口, 它 允 许 图 形 开 发 人 员 产 生 二 维 及 三 维 形 体 高 质 量 的 彩 色 图 像。OpenGL 是 在SGI 公 司 推 出 的IRIS GL 图 形 库 的 基 础 上 发 展 起 来 的, 现 在 成 为 适 用 于 各 种 计 算 机 环 境 下 的 三 维 图 形 应 用 程 序 接 口(3D API), 即 开 放 式 的 三 维 图 形 标 准。

---- OpenGL 现 由 业 界 著 名 的OpenGL 体 系 结 构 评 审 委 员 会(ARB) 控 制。 该 委 员 会 的 主 要 作 用 是 评 审OpenGL 的 功 能 扩 展, 制 定 它 的 技 术 规 范。Compaq、IBM、Intel、Microsoft、SGI 等9 家 大 厂 商 都 是 这 一 委 员 会 的 成 员。OpenGL 不 仅 符 合 业 界 标 准, 而 且 简 单 易 学、 使 用 方 便。

---- OpenGL 可 广 泛 应 用 于PC、 工 作 站 和 超 级 计 算 机 上。 目 前 虽 然 也 有 一 些 符 合ANSI 和ISO 的 三 维 图 形 标 准, 如GKS-3D 和PHIGS, 但 并 没 有 得 到 计 算 机 工 业 界 的 广 泛 支 持。

---- OpenGL 与 硬 件 和 操 作 系 统 相 独 立, 但 也 可 以 集 成 到Unix、Windows 95 等 操 作 系 统 中。OpenGL 的 应 用 程 序 接 口 属 于 低 层 的、 面 向 图 形 硬 件 的 软 件 接 口, 它 由gl 或GL 作 为 前 缀 的 一 系 列 命 令 组 成。 编 程 人 员 利 用OpenGL 命 令 可 以 创 建 活 动 的 三 维 彩 色 图 形 的 交 互 式 程 序。 基 于OpenGL 开 发 的 大 量 三 维 图 形 应 用 软 件 已 广 泛 用 于 可 视 化、CAD/CAM、 仿 真、GIS、VR、 娱 乐、 医 学 等 领 域。

---- OpenGL 包 含 大 量 功 能 强 大 的 图 形 函 数, 开 发 人 员 可 以 利 用 这 些 函 数 对 整 个 三 维 图 形 进 行 光 色 渲 染, 从 而 方 便、 快 速 地 绘 制 出 与 客 观 世 界 十 分 逼 真 的 三 维 景 象。 此 外,OpenGL 还 可 以 进 行 三 维 图 形 交 互、 动 作 模 拟 等 操 作。

OpenGL ++ — — 面 向 对 象

---- OpenGL 作 为 三 维 图 形 应 用 程 序 接 口, 最 初 使 用 在 即 时 图 形 模 式 中, 它 提 取 组 成 图 形 的 基 本 元 素, 然 后 按 照 编 程 人 员 的 指 令 对 其 着 色 渲 染。 由 于OpenGL 是 面 向 硬 件 的, 因 而 能 快 速、 有 效 地 生 成 各 种 图 形 元 素 并 构 成 一 幅 场 景。 但 是,OpenGL API 不 能 把 本 帧 画 面 的 图 形 信 息 传 送 给 下 一 帧 画 面。 为 了 实 现 这 一 功 能,OpenGL 必 须 具 有 保 留 模 式 的 功 能, 即 允 许 开 发 人 员 能 复 制 画 面 之 间 相 关 的 元 素, 并 保 留、 存 储、 连 接 到 下 一 帧 画 面 中 去。

---- OpenGL ++ 是 建 立 在OpenGL 上 的 三 维 图 形 应 用 程 序 接 口。 它 是 一 种 场 景 图 形(Scene Graph) 的API。 所 谓 场 景 图 形 就 是 由 结 点 与 有 向 边 组 成 的 无 环 路 有 向 图(DAG)。 图 中 结 点 可 以 存 储 图 形 数 据 及 构 成 类 的 结 构。DAG 实 质 上 是 一 种 层 次 结 构 图, 但 是 它 的 子 结 点 可 以 有 多 个 父 结 点。 结 点 也 是 一 个 具 有 属 性 和 操 作 的 类(Class)。 类 的 实 例 就 是 对 象(Object)。OpenGL ++ 的 操 作 可 以 分 成 两 种 类 型: 一 种 是 对 场 景 图 的 构 造 和 修 改; 另 一 种 是 对 场 景 图 的 遍 历。 通 过 对 场 景 图 的 遍 历, 可 以 生 成 经 过 优 化 的 图 形。

---- OpenGL++ 是 用 面 向 对 象 的 编 程 语 言 表 示 的, 因 此 它 具 有 面 向 对 象 程 序 设 计 的 优 点, 如 封 装 性、 继 承 性、 动 态 束 定 的 多 态 性、 灵 活 性 好、 编 程 效 率 高 和 使 用 方 便 等。

---- 对 于 编 程 人 员 而 言,OpenGL ++ 提 供 场 景 中 各 个 部 件 的 描 述 以 及 部 件 之 间 相 互 关 系 的 描 述, 这 些 关 系 可 以 是 静 态 的, 也 可 以 是 动 态 的。

---- OpenGL ++ 能 有 效 地 支 持 各 种 可 视 化 应 用 及 数 据 格 式。 由 于OpenGL 的 编 程 界 面 与 文 件 格 式 无 关, 因 此 可 用 任 何 格 式 来 描 述、 观 察 并 与 场 景 交 互。

---- 利 用OpenGL ++, 编 程 人 员 可 以 建 立 持 久 的 对 象(Persistent Object), 因 此 它 具 有 保 留 模 式 的 功 能。

---- 由OpenGL ++ 定 义 的 图 形 对 象, 通 常 可 以 装 配 到 场 景 中, 然 后 再 进 行 剪 取、 着 色 渲 染 及 求 交 测 试。 在 场 景 中 的 结 点 可 以 相 互 连 接 并 与 低 层OpenGL 中 的 形 体 相 连, 以 便 为 可 视 化 提 供 结 构 化 的 框 架。 场 景 元 件 的 这 种 特 征 使 它 可 以 直 接 使 用 低 层OpenGL 的 工 具。

---- 从 实 现 者 的 角 度 看,OpenGL ++ 是 类 的 集 合。 组 成 场 景 的 结 点 可 以 组 成 类, 各 种 对 象 也 可 以 组 成 类。 确 立 这 样 规 范 的 目 的 是 更 方 便 地 描 述 各 种 各 样 的 类, 以 及 有 关 它 们 的 状 态 和 操 作。

---- OpenGL ++ 用 不 着 对 低 层 图 形 库 做 选 择, 但 是 它 的 低 层 图 形 元 件 就 是OpenGL。 用OpenGL ++ 来 建 模 比OpenGL 更 容 易, 而 且 在OpenGL ++ 上 可 以 再 建 立 其 他 的API。OpenGL ++ 的API 可 以 提 供 对 速 度 与 品 质 的 折 衷 选 择。 这 样 在 做 着 色 渲 染 时 具 有 更 大 的 灵 活 性。 为 了 体 现 性 能 第 一 的 观 点, 利 用OpenGL ++ 建 模, 可 以 极 快 地 观 察 到 什 么 情 况 下 性 能 会 更 好, 什 么 情 况 下 性 能 会 更 差。

---- 从 扩 展 者 的 角 度 来 看,OpenGL ++ 的 体 系 结 构 更 具 扩 展 性。 扩 展 可 以 采 用 两 种 方 式: 第 一 种 形 式 允 许 实 现 人 员 在 场 景 中 增 加 新 的 对 象 和 操 作; 第 二 种 形 式 允 许 编 程 人 员 在 库 中 增 加 新 的 对 象, 并 对 场 景 做 各 种 操 作。 虽 然 在 编 译 时 也 能 对 场 景 中 的 类 进 行 扩 展, 但 不 能 扩 展 很 多。OpenGL ++ 可 以 提 供 运 行 时 的 可 扩 充 性, 这 一 点 和Windows 中 的 动 态 链 接 库 功 能 相 似, 因 此 不 但 可 以 提 高 系 统 的 资 源 利 用 率 和 编 程 效 率, 而 且 使 应 用 程 序 对 场 景 图 形 的 扩 展 变 得 相 当 简 单。

OpenGL Optimizer — — 面 向 高 层

---- 建 立 在OpenGL ++ 顶 上 的OpenGL Optimizer 是 一 个 适 用 机 械CAD 领 域 的 高 层 三 维 图 形 应 用 程 序 接 口。 注 意 大 模 型 细 节, 同 时 保 持 跨 平 台 环 境 是OpenGL Optimizer 的 基 本 优 点。 由 于 它 遵 循 大 模 型 可 视 化API 协 议, 因 此 它 是 一 个 开 放 的 符 合 业 界 标 准 的 三 维 图 形 应 用 程 序 接 口。

---- OpenGL Optimizer 简 化 了 大 模 型 和 场 景, 节 省 了 着 色 渲 染 的 时 间, 它 采 用 了 反 图 形(Antigraphics) 功 能 — — 剪 去 模 型 后 面 的 物 体, 因 为 没 有 必 要 浪 费 资 源 对 一 个 处 在 模 型 后 面 看 不 到 的 物 体 进 行 渲 染。OpenGL Optimizer 的 遮 盖 提 取 技 术 是 图 形 技 术 发 展 的 一 大 进 步, 它 能 推 动 软 件 人 员 产 生 他 们 想 要 的 细 节 层 次, 然 后 删 去 远 处 或 不 重 要 的 物 体, 从 而 达 到 提 高 渲 染 速 度 的 目 的。

---- OpenGL Optimizer 提 供 了 先 进 的 镶 嵌 技 术, 它 可 以 用 较 少 的 多 边 形 获 得 较 清 晰 的 图 形。

---- 性 能 是 评 价 技 术 的 关 键。 一 个OpenGL Optimizer 命 令 所 做 的 工 作 是OpenGL 几 十 个 命 令 才 能 完 成 的 工 作, 因 此 使 用Optimizer 可 以 更 快 地 创 建 更 多、 更 复 杂 的 模 型。

---- OpenGL Optimizer 拥 有 模 块 化 组 件, 它 们 在 给 定 的 软 硬 件 配 置 上 很 容 易 使 应 用 程 序 在 渲 染 优 化 和 复 杂 形 体 分 解 优 化 上 达 到 均 衡, 以 获 得 最 好 的 整 体 性 能。

---- OpenGL Optimizer 通 过 集 成 的 工 具 进 行 性 能 优 化, 为 用 户 和 开 发 者 提 供 了 无 可 匹 敌 的 大 模 型 可 视 化 和 交 互 功 能。

三 种OpenGL 的 关 系 及 未 来

---- OpenGL Optimizer 和OpenGL ++ 及OpenGL 之 间 关 系 如 附 图 所 示。

---- 最 近,SGI 和Microsoft 结 成 战 略 联 盟, 双 方 合 作 制 定 了 一 个 名 为“Fahrenheit” 的 计 划。 该 计 划 允 许 两 公 司 联 合 定 义、 开 发 及 提 交 一 套 新 的 图 形 应 用 程 序 接 口。

---- 开 发 人 员 利 用 图 形API 可 以 充 分 发 挥 计 算 机 的 加 速 功 能。Fahrenheit 将 把Microsoft 面 向 软 件 的 图 形API Direct 3D 与SGI 面 向 硬 件 的 图 形API 诸 如OpenGL 、OpenGL ++ 及OpenGL Optimizer 两 家 之 长 融 合 在 一 起。

---- Fahrenheit 计 划 包 括3 个 部 分:

---- 1 .Fahrenheit 低 层API 将 成 为 客 户 及 专 业 应 用 程 序 开 发 人 员 在Windows 环 境 下 主 要 的 图 形API。 该 低 层API 将 从Direct 3D 及OpenGL 演 变 而 来, 同 时 为Microsoft 的Direct 3D 及SGI 的OpenGL 提 供 向 下 的 兼 容 性。

---- 2 .Fahrenheit Scene Graph 为 开 发 人 员 在Windows 及SGI 的IRIX 环 境 下 创 建 消 费 类 及 专 业 应 用 程 序 提 供 面 向 对 象 的 编 程 接 口。 该 编 程 接 口 将 从SGI 的OpenGL ++ 演 变 而 来。 它 可 以 帮 助 开 发 人 员 开 发 复 杂 图 形 的 应 用 程 序。

---- 3 .Fahrenheit 大 模 型 可 视 化 扩 展 建 立 在SGI OpenGL Optimizer API 及Microsoft 的Direct Model 的 基 础 上, 它 可 以 与 场 景 图 形API 一 起 使 用。 这 个 高 层 三 维 图 形 应 用 程 序 接 口 可 以 对 大 型 三 维 模 型 进 行 交 互 操 作。 大 模 型 可 视 化 扩 展API 还 可 以 简 化 与 多 种 分 辨 率 的 场 景 图 形API 的 连 接, 因 而 使 开 发 人 员 更 易 编 写 各 种 具 有 大 模 型 扩 展 功 能 的 应 用 程 序, 并 且 更 方 便 地 与 大 模 型 可 视 化 数 据 库 进 行 交 互。 上 述 计 划 还 将 与 计 算 机 界 领 先 厂 商 如Intel 公 司 进 行 合 作。

---- 图 形API 对 于 现 实 世 界 的 各 种 集 成 问 题, 如: 共 享 文 件、 数 据、 系 统 的 互 操 作 性、 共 享 网 络 协 议 及 协 同 工 作, 具 有 积 极 推 动 作 用。Fahrenheit 计 划 中 的API 的 驱 动 程 序 工 具 包 及 软 件 开 发 工 具 包 将 在2000 年 前 分 阶 段 实 现。


附 图


中国计算机世界出版服务公司版权所有