【vb精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了vb精品源码-[精品]基于Unity3D平台的Web3D展示 - 期刊论文的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
图形图像处理GRAPHICS AND IMAGE PROCESSING 基于 Unity3D 平台的 Web3D 展示 陈育滨 曾玉珠 摘 要: 以 Unity3D 作为 Web3D 的开发平台, 研究产品的展示方式和实现 技 巧 , 并 用 Unity3D 实现了一个笔记本的展示应用。
关键词: Unity3D ; 笔记本模型; Web3D 展示 3D 图 形 技 术 并 不 是 一 个 新 话 题 , 早 已 应 用 到 各 个 领 域 。
网 络 类 , Unity3D 的 脚 本 采 用 Javascript 、 C 、 Boo 等 , 支 持 重Web3D 技 术 是 随 着 互 联 网 与 虚 拟 现 实 Virtual Reality 技 术 的 载 和 命 名 空 间 , 底 层 都 是 Mono 的 C 底 层 。
脚 本 是 动 态 编 译发展而产生的, 其目的是在互联网上建立三维的虚拟世界。
的, 运行速度和汇编接近, 不会因为脚本的问题而影响游戏的本 论 文 主 要 阐 述 Unity3D 的 应 用 , 并 利 用 Unity3D 做 一 个 产 品 执行效率, 而且不同语言在游戏开发项目中可以混合使用 (以的展示, 可使产品做到全方位的展示、 色彩实时装配等, 具 文 件 为 单 位 ) , 并 且 支 持 Windows 平 台 的 C 、
VB.net 、
VB6 、有直观立体、 真实互动的效果, 用户可以动手操作, 了解产品 Delphi 等 编 程 语 言 的 外 联 接 。
Unity3D 引 擎 在 产 品 发 布 方 面 也的每一个细节, 更容易找到心仪的产品。
因此, 针对网络虚拟 很方便, 经过 官 方 开 发 团 队 的 努 力 , 目 前 该 引 擎 支 持 了 在 Wii商品展示技术的研究是具有十分重要的理论意义和实际的应用 游 戏 机 、 PC 、 Web 浏 览 器 、 iphone 和 Android 等 平 台 的 发 布 ,价值的。
同一个项目, 在不需要修改的前提下, 通过菜单可以发布到各 种平台, 市场空间很大。
1 Web3D 展示设计过程 2.1 开发步骤1.1 3D 建模设计 Unity3D 主 编 辑 窗 口 由 多 个 选 项 卡 式 窗 口 组 成 , 这 些 窗 口 就 目 前 而 言 , 绝 大 多 数 的 Web3D 技 术 主 要 用 于 三 维 显 示 包 过 场 景 窗 口 ( Scene )、 工 程 窗 口 Project 、 层 次 结 构 窗 口技 术 的 网 络 应 用 开 发 , 这 也 决 定 了 Web3D 技 术 主 要 特 点 就 是 (Hierarchy ) 和检视窗口 (Inspector ) 等。
对 3D 模型的网上三维交互演示, 因此, Web3D 展示设计首先进 行 3D 建 模 设 计 。
虽 然 绝 大 多 数 的 Web3D 技 术 提 供 对3DMAX 、 Maya 等 三 维 软 件 的 输 出 插 件 支 持 , 但 不 是 所 有 的 都需 要 使 用 者 进 行 软 件 的 辅 助 建 模 , 像 VRML 、 3DML 等 都 支 持用源代码直接进行模型的空间设计。
1.2 纹理贴图设计 贴 图 制 作 在 Web3D 展 示 中 是 最 能 体 现 设 计 能 力 , 当 然 也是最耗时的。
没 有 贴 图 的 3D 模 型 只 能 对 材 质 着 色 , 良 好 的 贴图不但能得到好的视觉效果, 还可以简化模型, 减少多边形的数目, 提高场景的 Web3D 硬软件渲染速度。
1.3 交互设计 交互设计 Web3D 的重头戏, 也是它之所以吸引人的地方。
用 Unity3D 开发的具体步骤:如 果 说 建 模 给 Web3D 创 造 了 一 个 个 形 象 , 那 么 交 互 设 计 就 是 ( 1 ) 创 建 工 程 : 打 开 菜 单 File-gtNew Project 来 创 建 一 个给 世 界 增 加 了 生 气 与 灵 魂 。
通 常 情 况 下 , Web3D 创 作 包 括 空 工程。
间定位、 环境设计和三维交互等。
( 2 ) 导 入 模 型 和 其 他 资 源 文 件 : 打 开 菜 单 Assets-gtImport New Asset 就可以导入模型、 纹理贴图、 声音等资源。
2 Unity3D 平台的开发流程 ( 3 ) 创 建 场 景 : 打 开 菜 单 File -gtNewScene 就 可 以 创 建 Unity3D 是 一 个 多 平 台 的 游 戏 等 三 维 产 品 开 发 工 具 。
在 网 一个场景, 场景包含环境、 模型和装饰、 主要设计和游戏络 方 面 , Unity3D 提 供 了 很 强 大 的 可 视 化 编 辑 器 和 语 言 层 面 的 部件。
2012. 01 67 实用第一 智慧密集 (4 ) 添加资源到场景: 直接从项目视图拖资源到层次面板 ② 常用方法或场景视图, 就可以把资源加入场景。
资源在场景中就成为一 InverseTransformPoint 变换位置从世界坐标转换到自身坐标。
个 GameObject 游戏对象 。
( 3 ) GUI 图 形 用 户 界 面 : GUI 类 是 Unity GUI 手 工 定 位 的 (5 ) 放置 GameObject 游戏对象 : 使用变换功能工具调整 接口。
GameObject 游戏对象 , 进行旋转、 缩放或平移操作调整好对 ① 常用属性象角度、 大小和位置。
skin : 当前使用的皮肤。
( 6 ) 添 加 摄 像 机 : 打 开 菜 单 Components -gtRendering -gt ② 常用方法Camera 为 一 个 GameObject 附 加 摄 像 机 部 件 , 调 整 对 象 位 置 和 Label : 在屏幕上创建一个文本或者纹理标签。
角度使摄像机能看到我们所需的位置。
Button : 创 建 一 个 单 次 按 下 按 钮 , 用 户 点 击 按 钮 事 件 立 即 7 ) 添 加 组 件 和 脚 本 : 当 要 GameObject 游 戏 对 象 想 要 触发。
当用户点击按钮的时候返回 true 。
实现一些其他功能是, 就要为对象附上一些已有的组件或我们 VerticalSlider : 创 建 垂 直 滑 动 条 , 用 户 可 以 拖 动 滑 块 在 最编写的脚本代码。
小值、 最大值之间改变值。
( 8 ) 编 译 发 布 : 通 过 File-gtBuild Settings... 是 菜 单 项 设 置 HorizontalSlider : 创 建 水 平 滑 动 条 , 用 户 可 以 拖 动 滑 块 在要发布的场景及平台, 然后点 build 就可以编译生成场景文件。
最小值、 最大值之间改变值。
2.2 API 简介 Box : 创建一个图形盒子。
( 1 ) Input 输 入 系 统 接 口 : 使 用 这 个 类 能 够 读 取 输 入 管 2.3 脚本编写理器设置的按键, 以及访问移动设备的多点触控或加速感应 本论文使用 JavaScript 语言来编写脚本。
Unity 场景里面 所数据。
有 实 体 的 基 类 为 GameObject (游 戏 物 体 ), 通 过 对 GameObject ① 常用属性 实 例 附 加 各 种 部 件 来 实 现 各 种 特 效 和 功 能 。
Unity 的 脚 本 也 是 mousePosition : 鼠标当前所在的像素坐标 (只读)。
一种部件, 必需附加到一个实体才能被执行。
在脚步中可以简 anyKey : 是否有某一按键或鼠标按钮此时被按住 (只读)。
单 的 访 问 到 所 附 加 到 的 对 象 的 属 性 和 部 件 如 : transform 变 anyKeyDown : 在一帧中用户按下某一按键或鼠标按钮, 返 换 、 renderer 渲染器 等。
回 true (只读)。
在 Unity3D 中 每 个 脚 本 的 基 类 是 MonoBehaviour , 每 个 ② 常用方法 : javascript 脚本自动继承 MonoBehaviour , 使用 C 或 Boo 时, 需 GetAxis : 根据坐标轴名称返 回 虚 拟 坐 标 系 中 的 值 。
quot Hori- 要 显 式 继 承 MonoBehaviour 。
脚 本 中 有 各 种 函 数 被 不 同 的 事 件zontalquot 和 quot Verticalquot 映射于控制杆、 A 、 W 、 S 、 D 和 箭 头 键 所调用, 在这些函数里编写的代码就可以实现各种功能。
下面(方向键)。
quot Mouse Xquot 和 quot Mouse Yquot 映 射 于 鼠 标 quot 几个最常用的函数:Fire1quot 、quot Fire2quot 、quot Fire3quot 映射于键盘的 Ctrl 、 Alt 、 Cmd 键和鼠 ①Start : 仅在 Update 函数第一次被调用前调用, 可用来做标中键或控制器的按钮。
初始化操作。
GetButton : 根据 按 钮 名 称 返 回 true , 当 对 应 的 虚 拟 按 钮 被 ②Update : 这个函数在运行一帧之 前 被 调 用 。
这 是 很 多 程按住时。
序运行行为代码的地方, 除了物理行为代码。
GetMouseButton : 当 指 定 的 鼠 标 按 钮 被 按 下 时 返 回 true ③FixedUpdate : 这个函数会在每个固定的物理时间片被调button 值设定为 0 对应左键, 1 对应右键, 2 对应中键。
用一次。
这是放置程序基本物理行为代码的地方。
(2 ) Transform 变换: 场景中的每一个物体都有一个 Trans- ④OnGUI : 渲染和处理 GUI 事件时调用。
form 。
用 于 储 存 并 操 控 物 体 的 位 置 、 旋 转 和 缩 放 。
每 一 个 3 基于 Unity3D 平台的笔记本展示Transform 可 以 有 一 个 父 级 , 允 许 你 分 层 次 应 用 位 置 、 旋 转 和缩放。
3.1 笔记本 Web3D 展示设计 ① 常用属性: 笔 记 本 Web3D 展 示 在 交 互 方 面 实 现 以 下 功 能 : 用 户 可 以 position : 在世界空间坐标 transform 的位置。
对笔记本模型进行 360 度旋转以便全方位观察模型; 用户可缩 localPosition : 相对于父级的变换的位置。
放笔记模型以观察整体和细节部分; 用户可对笔记本的顶盖进 rotation : 在 世 界 空 间 坐 标 物 体 变 换 的 旋 转 角 度 作 为 行 170 度内任意角度的展开合并, 让用户能全面观察产品不同Quaternion 储存。
形态下的外观; 用户可以为笔记本模型选择不同外观。
笔记本 localRotation 物体变换的旋转角度相对 于 父 级 的 物 体 变 换 3D 展 示 应 用 为 方 便 用 户 进 行 交 互 提 供 了 鼠 标 直 接 操 作 和 使 用的旋转角度。
图形用户界面操作两种方式, 效果如图 2 、 图 3 所示。
2012. 0168 图形图像处理GRAPHICS AND IMAGE PROCESSING y-3f y ClampAngley yMinLimit yMaxLimit rotationQuaternion.Eulery x 0 distanceinitDis ifGUI.ButtonRecthw-11222020quotquotquotBtn_resetquot // 复位按钮 x0 y0 roabletrue // 缩放垂直滑动条3.2 笔记本 3D 展示实现 distance GUI.VerticalSlider Rect hw -8001070dis- (1 ) 模型设计导入 tancemaxDisminDis 使 用 3DS MAX 中 设 计 好 笔 记 本 模 型 , 导 出 为 fbx 格 式 。
GUI.LabelRecthw-88703020quot 缩放 quot在 Unity3D 中新建一个工程, 把导入的模型 拖 到 场 景 中 , 调 整 ifjoin scrollAnglejoin.angle笔记本模型缩放使其大小适中。
(2 ) 图形用户界面 // 展开垂直滑动条 图形用户界面的操作面板的中间共设置了 5 按钮, 分别为 scrollAngle GUI.VerticalSlider Rect hw 6501070上下左右 4 个方向的旋转和中间的复位按钮, 这些按钮使用的 scrollAngle-1700是自定义样式做出的按钮。
要使用自定义样式按钮, 要准备正 GUI.LabelRecthw57703020quot 展开 quot ifjoinampampjoin.angle scrollAngle常、 鼠标悬停和激活 3 个状态的图片, 并在自定义样式中的对 join.spring.spring100应状态设置它们, 使用时只有把样式名称作为一个参数调用即 join.spring.targetPositionscrollAngle可。
缩放和展开是采用垂直滑动条, 只要滑动滑动块就可进行 缩 放 和 展 开 操 作 。
Unity3D 的 图 形 用 户 界 面 是 使 用 脚 本 实 现 , if GUI.Toggle Rect hw -150205020currStyle 1quot 黑实现的图形用户界面的脚本必须写在脚本的 OnGUI 方法里。
色 quot // “黑色”外观选择框 currStyle1var guiSkin:GUISkin changeStylecurrStyletransformprivate var currStyle:int1 function OnGUI if GUI.Toggle Rect hw -150405020currStyle 2quot 银 GUI.skinguiSkin 色 quot // “银色”外观选择框 var hw:intScreen.width/2 currStyle2 GUI.BoxRect0Screen.height -95Screen.width95quotquot changeStylecurrStyletransform GUI.BeginGroup Rect 0Screen.height -90Screen. width90 GUI.EndGroup ifGUI.RepeatButtonRecthw-33222020quotquotquotBtn_leftquot // 左旋转按钮 (3 ) 笔记本旋转缩放 x3f rotationQuaternion.Eulery x 0 Unity3D 中 选 择 中 笔 记 本 模 型 对 象 , 编 辑 脚 本 并 附 加 到 笔 记本模型就可以实现鼠标操作模型的旋转缩放。
if GUI.RepeatButton Rect hw 11222020quotquotquot 旋 转 物 体 采 用 操 作 物 体 的 transform 变 换 部 件 来 实 现 ,Btn_rightquot// 右旋转按钮 改 变 transform 的 rotation (世 界 空 间 坐 标 物 体 变 换 的 旋 转 角 x-3f 度) 或 localRotation (自身旋转角度) 就会产出旋转效果。
rotationQuaternion.Eulery x 0 在 Update 函 数 里 , 检 测 到 鼠 标 按 下 拖 动 时 就 通 过 Input. ifGUI.RepeatButtonRecthw-1102020quotquotquotBtn_topquot GetAxis 方 法 获 取 鼠 标 在 x 轴 和 y 轴 方 向 的 改 变 量 , 然 后 使 用// 上旋转按钮 Quaternion.Euler 构 建 一 个 表 示 旋 转 Quaternion 四 元 数 然 后 y3f 赋给模型对象的 transform 变换 的 rotation 属性就可以产生相 y ClampAngley yMinLimit yMaxLimit 应的旋转。
rotationQuaternion.Eulery x 0 对于模型的缩放, 采用的是改变摄像机与模型的距离来产 if GUI.RepeatButton Rect hw -11442020quotquotquotBtn_bot- 生 缩 放 效 果 。
通 过 Input 接 口 获 取 鼠 标 滚 轮 的 滚 动 值 , 相 应 地t.