基于开源 web3引擎的三维系统的开发
目录
结合图像特征的平滑恢复技术
1.开发步骤
2 应用案例开发
结束语
应用 Web3D 引擎开发的计算机仿真系统或虚拟现实系统均需在 Web 浏览 器 上 运 行 , 需要其能快速下载和运行 , 并且尽量不需下载特定插件 。 采用基于 JAVA 技术的开源 Web3D 引擎开发的三维系统可以满足上述要求 , 开发的展示系统可以实现三维图形的旋转 、 缩放 等 交 互 功 能 。 此 外 , 在系统开发过程中对引擎中不完善的部分进行了必要的修正 。
结合图像特征的平滑恢复技术
图像恢复是数字图像处理领域中的一大类技术 。 图
像恢复技术是要将引起图像降质的过程模型化 , 然后根据
相应的退化模型和知识重建来恢复原始的图像 。 由 于 造
成图像降质的原因众多 , 目前没有统一的恢复方法 , 在 对
信号源或衰减特性作了某些隐含假设后 , 目前常用的典型
恢复方法有迭代直接逆滤波 、 维纳滤波 、 最大熵恢复 、 约束
的最小二乘方滤波等 。 对于退化的图像 , 噪声是一种常见
的图像退化因素 , 并且图像恢复又对噪声十分敏感 。 而上
述这些方法仅从整体上考虑了噪声的幅值因素 ( 即信噪比
等因素 ), 没有考虑到噪声对图像的不同内容或特征的影
响 。
一般意义上 , 一幅图像的结构可分为光滑区域 、 阶 跃
边缘 、 屋顶边缘和噪声颗粒 4 类 , 表现为光滑区域 、 边缘线
和孤立点等 特 征 , 恢复后的图像噪声不可避免地会被放
大 , 而这个放大的噪声对图像中不同区域的影响是不一样
1.开发步骤
根据 Web3D 引擎 idx3D 中经修改后的各类的属性和
方法 , 总结了以下的开发步骤 :
( 1 ) 为所开发的 系 统 建 模 。 系统需要先建立模型 , 才
建模的功能 , 需要借助其他建模工具实现建模 。
对象都要置于场景中予以管理和操作 , 因此首先要构造场
景 。
( 3 ) 加入材质和灯光 。 在场景中需要加入相应的材质
和灯光 。
( 4 ) 将模型文件导入程序中 。 导入的物体模型添加到
场景中 。
( 5 ) 重构场景 , 以及场景规格化 。 由于场景中添加了
材质 、 灯光以及物体模 型 等 内 容 , 需要将这些对象重构成
新的场景 , 并对场景进行规格化操作 。
( 6 ) 初始化渲染 状 态 。 对重构后的场景进行渲染 , 此
时是静止状态 , 并没有交互式的操作 。
2 应用案例开发
2.1 开发系统的简介
应用基于 JAVA 技 术 的 Web3D 开 源 引 擎 idx3D , 开
发了一款陶瓷 产 品 ——— 茶壶的三维展示系统 。 所 开 发 系
统的功能如下 : ① 可以根据用户的需求建立茶壶的模型 ;
② 可以自由设置茶壶的花纹和材质 ; ③ 通过鼠标的移动 ,
可以实现对茶壶对象的旋转操作 ; ④ 通过键盘的操作 , 可
以实现对茶壶对象的缩放操作 。 具 体 来 说 , 按 动 键 盘 上
‘ w ’ 字符 , 茶壶 对 象 会 放 大 , 按 动 键 盘 上 ‘ s ’ 字 符 , 茶 壶 对
象会缩小 。
2.2 具体实现
2.2.1 3D 建模
用 Autodesk 的 3D ’ sMax 工具 , 为茶壶进行建模 , 再
进行贴图建模和贴图完成时的截图如图 1 所 示 。 建 模 完
成后 , 生 成 .max 文 件 。 由 于 Web3D 引 擎 idx3D 的 要 求 ,
需要导出一个 .3ds 文 件 , 和一个用于贴图 的 .png 图 像 文
件 。
2.2.2 代码的实现
本节中主要介绍开发流程的实现 , 以及主要部分的方
法调用等内容 , 代码的流程如图 2 所示 。 主要介绍了 4 个
函数 : init ()、 update ()、 mouseDrag () 和 keyDown ()。 从
功能上看 init () 函数主要实现了对整个系统的构建 , up
-
date () 函数实现对场景的渲染以及描画到显示器的相应
窗口即 applet 中 mouseDrag () 函数主要实现了鼠标操作
的功能即对物体旋转的操作 , keyDown () 函数主要实现了
键盘操作的功能即缩放功能 。
在 publicvoidinit () 中 , 主要进行了该系统的初始化
处理 , 即 3 中介绍的开发步骤的具体实现 , 包括 :
( 1 ) 构建场景 : 用 newidx3d _ Scene () 语句创建场景对
象 , 参数为场景的大小尺寸 。
( 2 ) 为场景添加材质和灯光 : ① 调用 addMaterial () 方
法 , 为场景添加材质 。 根据材质的不同指定不同的参数 ;
② 调用 setAmbient () 和 setBackgroundColor () 这两 个 方
法 , 为场景添加灯光和背景颜色 。
( 3 ) 导入建好模型的 .3ds 文件 : 用 newidx3d _ 3ds _ Im -
porter () .importFromURL () 语句创建导入文件对象 , 参
数为所建模型 .3ds 文件的路径和场景的对象 。
( 4 ) 重构场景和场景的规格化 : ① 重构场景时 , 场景对
象 scene 调 用 rebuild () 方 法 , 将 材 质 ( Material ) 和 对 象
( Object ) 生 成 对 象 数 组 ; ② 对场景规格化时 , 场 景 对 象
scene 调用 normalize () 方法来实现规格化 。
( 5 ) 重置场景矩阵 : 由于场景和对象都在本地空间下
建模 , 在规格化之后需要将场景和对象在本地空间下的坐
标转化为世界空间下的坐标 , 进行重置场景矩阵的计算 ,
具体实现通过语句 scene.matrix.reset ()。
( 6 ) 设置摄像机的位置 , 建立视图空间 : 将摄像机的位
置设为点 ( 0 , 0 , -100 ), 设置摄像机位置的语句为场景对
象 scene 调用相应方法 , scene.defaultCamera.setPos ( 0 , 0 ,
-100 )。
修饰 类 型 为 public 、 无返回值的同步方法 update , 其
参 数为 Graphics 类型的对象 g , 即 publicsynchronizedvoid
update ( Graphicsg ) 中 , 进行两个操作 :
( 1 ) 将连同对象在内的整个场景渲染到一张图片中 ,
场景对象 scene 调 用 render () 方 法 。 render () 中 是 调 用
了 renderPipeline 中 的 render ( this.defaultCamera ) 方 法 ,
参数为默认摄像机 。
这一部分是将连同三维图形在内的三维场景 , 转化为
具有三维效 果 的 二 维 图 像 , 下一步是将这个图像描画在
applet 上 。
( 2 ) 将渲染好的图片画到屏幕上 , 此 处 实 例 化 Graph
-
ics 对象 g , 调用 drawImage () 方法在 applet 上进行描画 。
在 publicbooleanmouseDrag ( Event
evt , intx , inty )
中 , 场景 对 象 scene 调 用 rotate () 方 法 , 进 行 旋 转 处 理
rotate () 方 法 在 Scene.java 继 承 自 的 CoreObject.java 中
定义 , rotate () 方法实现旋转的具体思路为 : 分别计算绕 x
轴 , y 轴和 z 轴旋转时的变换矩阵 , 再相乘而得到一个变
换矩阵 , 再进行渲染 。
在 publicbooleankeyDown ( Event
evt , intkey ) 中 , 场
景对象 scene 调用 scale () 方 法 , 进 行 缩 放 处 理 。 scale ()
的参数分别是 zoomIn () 方法和 zoomOut (), 放大时 参 数
为 zoomIn () 方 法 , 缩 小 时 参 数 为 zoomOut () 方 法 。
zoomIn () 与 zoomOut () 的 作 用 类 似 , 都是用来计算缩放
比例的方法 , zoomIn () 用来计算大于 1 的比例 , zoomOut (
) 则用来计算 小 于 1 的 比 例 。 scale () 方法实现缩放的具
体思路是 : 通过 zoomIn () 方法或 zoomOut () 方法计 算 出
来的缩放比例计算相应的变换矩阵 , 再进行渲染
结束语
本文在对 比 了 几 种 3D 技 术 的 基 础 上 , 介 绍 了 开 源
Web3D 引擎 idx3D 的 具 体 实 现 , 以及对原引擎的优化 。
在此基础上 , 明确了 基 于 开 源 Web3D 引擎开发系统的流
程 , 以及具体开发方 法 。 最 后 , 提供了一个茶壶展示系统
的开发实例 , 该实例的运行无需下载特定插件 。