交互式虚拟三维环境的设计简介

发布者:柳絮轻风最新更新时间:2011-12-28 关键字:交互式  虚拟三维环境 手机看文章 扫描二维码
随时随地手机看文章

  引言

  虚拟现实,是指用计算机生成的一种虚拟环境,它能使人们进入一个三维的、多媒体的虚拟世界,通过一些操作界面,与其中的虚拟对象进行交互,再配合各种传感器和机械部件,给人们带来一种身临其境的感受。随着计算机软硬件的发展以及图形处理能力的增强,虚拟现实技术在军事、医疗、教育、工业以及游戏中的应用已经越来越广泛。

  虚拟三维环境是虚拟现实技术中一个极其重要的部分,虽然可以用现成的三维引擎来制作,但是由于绝大多数的三维引擎价格不菲,并且其主要面向三维游戏市场。所以,如果要解决的问题不是特别复杂,完全可以通过 自己编程并使用一些工具软件来完成。

  1 开发环境与软件

  1.1  Microsoft Visual C++ 6.0

  Microsoft Visual C++6.0(以下简称为 vC++6.0)是由微软公司出品的功能强大的可视化开发平台之一,我们可以利用它在 Windows 操作系统上完成应用程序的创建、编码、测试、完善等各个阶段的工作。

  I.2  OpenGL

  OpenGL(开放性图形库 Open Graphics Library)是一个3DAPI,它独立于硬件系统和操作系统,是跨平台的“图形硬件的软件接口”,具有高度的可移植性。它包括了大量的绘图和显示函数,用于快速创建实时 3D图形,主要用于图形专业 领域 ,已经 成 为工 业 标准,目前的最新版本是OpenGL2.0。

  1.3  3dsmax 7

  3ds max 7是由Autcdesk公司出品的用于制作3D模型和动画的软件,使用它可以制作出栩栩如生的人物、动物、植物和建筑物等各种 3D模型和动画。我们使用 3ds max 7来制作一些动植物、建筑物的 3D模型,并将其导出为 3ds文件,然后在虚拟三维环境中调用。

  1.4  Vue 5 Infinite

  Vue5 Infinite(以下简称为 vue5)由e-on软件公司出品,它也可以用来制作 3D模型和动画,其特长在于对 3D 自然环境的模拟。在虚拟三维环境中,天空的真实感是影响视觉效果的重要因素之一,我们使用 Vue5的环境模拟功能制作出在各种大气条件下的天空的图片,然后把这些图片作为虚拟三维环境中的“天空盒”的材质贴图,展现出逼真的大气环境效果。另外,我们还可以使用 Vue5强大的地形编辑功能制作出一些不同特征的地形模型来充实虚拟三维场景。

  2 虚拟场景中的三维模型的制作

  2.1 天空盒模型

  我们使用3ds max 7等工具软件来制作虚拟三维场景中的3D模型等元素。首先从天空开始,打开 3ds max 7,创建一个立方体 ,调整其边长到一个比较大的值(比如 2000米)我们把这个立方体称为天空盒。接着制作天空盒的材质贴图,也就是大气环境的图片。打开 Vue5,选择“载人大气”选项 ,然后从弹出的对话框中选择一种你需要的大气环境(当然你也可以使用其编辑功能创建自己想要的大气效果),然后点击文件菜单下的“导出天空”选项,将大气环境作为位图导出,再使用图片处理工具把整幅位图分解为与立方体六个面相对应的六幅位图;再次进入 3ds max 7,选中刚才的立方体,使用材质编辑器把刚才导出的天空图片赋予立方体,进行一些调整,天空盒的模型就完成了。最后一步就是把天空盒的模型导出为“3dS’’类型的文件,以便在程序中调用。

 2.2 建筑物等各种实体的模型

  根据需要,还应在场景中添加一些建筑物之类的三维模型,当然了,这些模型也是我们使用 3ds max 7制作的,具体的制作方法这里不再赘述。但是要注意,制作的 3D模型要在程序中实时绘制,因此,在制作模型时,不能一味追求精细,应该有意识地控制多边形的数量,以提高程序运行时的渲染速度。同样,把制作好的模型保存为“3ds”类型的文件。

  2.3 树木等植物

  一般采用 2D图片的方法来显示植物,这样 ,即使场景中有一大片树林,也不会影响渲染的速度。制作植物图片时 ,首先应选择合适 的植物图片(最好是正面平视的照片)对图片做一些简单的处理 ,使其满足以下几个要求:1)图片尺寸为 2的 N次方(32、64…);2)图片的底色以及不需要显示的地方为纯黑色。以便在程序中将这些地方处理成透明状态。最后,将图片保存为“bmp”格式,虚拟三维场景 中的植物就做好了。

  2.4 生成地形数据

  地形的创建不再采用预先建模的方式,而采用在程序中实时绘制的方法,便于在场景中漫游时检测并计算出所处位置的地面高度。具体步骤如下:首先,建立一个三维浮点型数组来保存地形的顶点坐标值,三个分量分别为地形顶点的x、Y、z坐标;然后,我们再建两个数组,分别用来保存顶点的索引值(整型)和曲面贴图的平面坐标(浮点型);接着 ,使用一段循环代码来随机生成地面的高度值,同时给三个数组赋值 ;最后,调用 OpenGL中的函数 glEnableClientState()和glVertexPointev()来载入地形顶点坐标数组,凋用 glEnableClientState()和glTexCoordPointer()函数来载人顶点索引数组。这样,地形的初始化工作就完成了,可以把这个过程写成一个函数,名字叫做 lniin(),便于在程序中调用。

  3 创建基于 OpenGL的应用程序框架

  OpenGL中所有的绘图函数都必须在 OpenGL的环境中运行,这个环境称为 OpenGL框架。OpenGL框架还必须运行在 Windows应用程序框架 中。也就是说,首先要建立Windows应用程序框架,用它响应和处理各种消息和命令,然后再 建立 OpenGI 运行环境 框架,并 在其中调用各种OpenOL绘 图函数 。

  3.1 创建 Windows应用程序框架

  首先,在 VC十 +6.0中新建 一个 Win32应用 程序(Win32 Application);然后,添加四个全局变量 htX2、hRC、hWnd和 hlnstance,分别用来保存设备描述表、着色描述表、窗口句柄和程序的实例句柄;接下来在应用程序中包含 g1.h,glu.h、glaux.h三个头文件以及 opengl32.1ib、glu32.1ib、glaux.1ib三个静态链接库文件;最后,在程序中加入 winMain()函数和 WndProc()函数(具体方法请参考 MSDN)。其中,WinMain()函数是主程序的入口,我们在其中添加一些代码创建 Windows窗口,并在 WinMain()函数 中使用PeekMessage()函数完成消息循环(即程序的主循环,被程序反复执行),它用来监听并向 WndProc()函数传递 肖息。WndProc()是一个窗口回调函数,用来处理各种窗口消息并响应外部事件。这样,一个基本的 Windows框架就建成了。

  3.2 创建 OpenGL运行环境框架

  步骤如下:1)对 OpenGL运行环境进行初始化设置;2)调用 OpenGL函数库中的函数完成绘图和显示工作并刷新屏幕,可以把完成这些工作的代码编写成一个函数,命名为DrawScene(),以便在程序中调用;3)在程序退出之前释放各种资源,断开 OpenGL与Windows窗121的连接。

  3.3 框架程序间的关系

  winMain()函数是程序的入口,我们用它创建一个窗口并设置其大小和样式。WndProc()回调函数会对“创建窗口”这个消息作出响应 ,马上调用 OpenGL框架中的 SetPixelFomat()函数检测机器对 OpenGL的支持情况,并安装OpenGL显示接口。当窗 口创建成功后,WndProc()函数对窗口尺寸变化消息作出响应,调用 OpenGL框架中的 gluPerspective()等函数对 OpenGL视 12I进行变换调整。Windows窗口生成后,就进入程序的主循环,在其中调用 DrawScene()函数绘制场景,同时监听和分配各种消息。程序退出时,调用 OpenGL中的 wglDeleteContext()函数来切断 OpenGL与 Windows窗口的连接。[page]

 4 虚拟三维场景的显示和人机交互

在搭建好了应用程序框架之后,我们就可以在其中加入绘制场景的代码了。我们要在场景中绘制出天空、地面、植物和建筑物,从而逐步创造一个虚拟的三维环境,然后增加在其中漫游的功能,实现简单的交互。

  4.1 绘制并显示地形

  在 OpenOL框架初始化之后需要调用 InitTerrain()函数来生成地形数据数组,进行地形的初始化。编写一个函数来绘制地形,命名为 DrawTerrain(),在其中调用 glDrawgle.ments()函数,通过绘制三角形带的方式来绘制地形。如果地形有纹理,可以调用glBindTexture()函数给地面贴图。把DrawTerrain()增加到 DrawScene()函数中,这样在每次屏幕刷新时就能自动重新绘制地形了。

  4.2 载入并显示 3ds格式的模型文件

  天空、建筑物等虚拟对象都是采用预先建模的方式创建的,我们已经将其统一保存为“3ds”格式的文件。我们还需要在程序中包含一个名字为“3ds.h”的头文件,其对应的源文件叫做“3ds.cpp”,二者均可互联网上找到。对每一个3ds文件,可以先用 3ds.h文件中的载入函数将其调入程序,并为其分配各 自的编号,再调用显示模型函数在 OpenGL环境中显示相应的 3D模型。显示模型函数的参数同时定义了模型显示的位置、方向和比例。载入模型的工作可以在程序初始化时完成,而显示模型的函数应添加到 DrawScene()函数中。

  4.3 载入并显示植物

  按照前面提到的方法,在虚拟三维场景中显示一株植物实际上是显示一幅植物的图片(而不是 3D模型)。我们先在程序中载入图片,然后在屏幕上绘制四边形,把植物的图片作为贴图显示出来。在虚拟三维场景中漫游时,我们知道自己的视线方向,也可以计算出自己所处的位置坐标,那么,就可以编写一段代码,让具有植物纹理的四边形每次重绘时都始终与我们的视线方向垂直,从而形成一种三维模型的效果。

  4.4 添加漫游功能

  完成了虚拟三维场景的创建和绘制以后,还需要给程序添加漫游功能。有了漫游功能,我们不但能够看到虚拟三维场景,更能以第一人称参与其中,更加“真实”地体验这个虚拟世界。

  在现实中人们看到的画面效果,主要取决于两个方面:观察点的位置和视线的方向。在 OpenGL中,也有类似于我们眼睛的东西,我们可以使用 函数 gluLookAt()来改变在OpenGL场景中的观察点的位置和视线方向,我们把这个函数添加到 DrawScene()函数中。在程序运行期间,通过使用键盘和鼠标等来改变观察点坐标和视线方向。屏幕每次刷新时,改变函数 gluLookAt()中的参数值 ,OpenGL就会用新的视角重新绘制屏幕上的画面,从而产生在场景中漫游的效果。

  到目前为止,一个简单的交互式虚拟三维环境就建成了,它可以作为任何一个实用的虚拟三维环境的基础模块,我们可以在这个基础上继续丰富场景内容,添加其它功能,逐步完善程序。

  5 程序的优化和其它功能的介绍

  在虚拟三维环境的设计中,还有很多值得借鉴的方法。比如,用地形灰度图来生成高度数据,使用区域分块显示技术来提高渲染速度,采用 M0D(分级显示)技术加快贴图显示速度并产生较好的效果,用位图字体、轮廓字体等显示汉字,使用显示列表显示多个重复模型从而提高效率,使用粒子动画来模拟爆炸、烟雾等场面,在程序中添加碰撞检测的功能以符合物理原理,等等。

  6 小结

  计算机技术发展到今天,再也不能忽视虚拟世界与现实世界之间的密切联系,虚拟世界正在越来越真实地再现着现实世界中的一草一木。虚拟三维环境作为虚拟世界的主体,直接决定着虚拟世界的真实感。OpenGL等技术的应用使得三维图形技术在虚拟现实、三维仿真、模拟训练、电子娱乐等领域得到了越来越广泛的应用,一些平常无法实现或很难实现的自然环境和工作环境的模拟在虚拟世界中成了家常便饭。它在带给体验者更加逼真的感受的同时,也大大降低了各种成本,提高了工作效率,有着广阔的发展空间。

 

关键字:交互式  虚拟三维环境 引用地址:交互式虚拟三维环境的设计简介

上一篇:三维可视化中的地形建模与实现技术研究
下一篇:基于霍尔电路设计的可逆计量传感器

推荐阅读最新更新时间:2024-05-02 21:49

您的私人摄影师——交互式机器人“观星者”来了!
你能想象在不久的将来,你在网上冲浪时候看到的视频博主制作的视频,或者是大学老师录制好的网课,是由 机器人 帮忙拍出来的吗? 现如今,视频网站的流量已经十分庞大,很多年轻人或者是权威专家们都会开设一些视频网站的账号,成为一个视频博主,但并不是所有的博主都有一个专业的摄影团队,而将手机固定在支架上拍摄又往往无法将内容很好地呈现在视频里,如果可以有个“人”随时可以充当摄影师,对创作者而言是个天大的好消息,如今,一款机器人正肩负着这样的使命。 这是一款被称为“观星者”的交互式机器人,它可以识别使用者给他下达的指令,通过机器人的手臂完成相应的拍摄动作,它的出现让一些没有办法请摄影团队的视频创作者们能在机器人的帮助下拍摄更多动态视频。 研究人
[机器人]
全新博世交互式激光投影微型扫描仪BML050
将任何适合投影的表面转化为一个虚拟的用户界面  基于MEMS的光学扫描仪  打造灵活直观的虚拟用户界面  卓越的图像质量和免聚焦投影  移动通信世界大会博世展位:6号馆,6E20展位 西班牙巴塞罗那——“物联网正在以惊人的速度蓬勃发展,Bosch Sensortec同样在不断推动创新。”Bosch Sensortec首席执行官Stefan Finkbeiner说道, “其中的重点不仅包括设备沟通或感知周围环境的方式,而且越来越多地涉及技术与人类的互动方式。作为一项令人惊叹的全新解决方案,激光投影虚拟界面为我们开启了一片前所未有的广博天地。” 此解决方案的核心——用于交互式激光投影应用的MEMS扫描仪BML050—
[物联网]
基于RFID的新型交互式生命搜救仪器
    引言     目前国内外投入使用的生命探测仪主要有四种:光学型、音频型、红外型和雷达型。它们各具特色,下面给出简要的介绍。     光学生命探测仪类似于医用光学纤维内窥镜,它利用可以任意弯曲的金属蛇皮管使前端的镜头通过建筑废墟的缝隙,照明并观察废墟下的情况,并通过蛇皮管中的光学纤维束将图像传回,借以发现被掩埋在废墟下面的人。这种生命探测仪体积小、使用方便,但探测距离短,而且在废墟无缝隙的情形下无法使用。     音频生命探测仪的主要原理是采用几个高灵敏度拾音器加上高倍信号放大、特殊滤波等技术侦听废墟瓦砾下是否有幸存者的呼吸声、呻吟声或敲击刻划声等音频和振动信息,以发现被掩埋在废墟下面的人。但这种仪器要求在比较安
[网络通信]
如何设计一种基于PSOC6的人体交互式智能家居系统呢?
本项目是基于PSOC6 进行开发,它具有以下特性 Psoc6-evaluationkit-062S2 是 RT-Thread 联合英飞凌推出的一款集成 32 位双核 CPU 子系统( ARM Cortex-M4 和 ARM Cortex-M0)的开发板,其具有单周期乘法的150-MHz Arm Cortex-M4F CPU (浮点和存储器保护单元),100-MHz Cortex M0+ CPU,带单周期乘法和 MPU,可以充分发挥 PSoC6 双核芯片性能。 基本概况: 具体功能实现有 当前时间的设置与查看,温湿度数据的实时显示,屋内关照强度的实时显示,当前屋内的亮明状态的提醒,打开室内灯,关闭室内灯。小程序上可实时查看室内温
[嵌入式]
如何设计一种基于PSOC6的人体<font color='red'>交互式</font>智能家居系统呢?
英特尔:电视应强调交互式选择性的多媒体应用
在Google TV的带动之下,英特尔也顺利地打进联网电视(Connected TV)领域。不过在这之前,英特尔早已喊出智慧电视(Smart TV)这样的概念,对于英特尔来说,智慧电视并不只是强调上网功能的电视产品而已,更代表英特尔在数位家庭领域缜密的发展策略与计划。 附图 : 英特尔数位家庭事业群产品应用工程经理朱立宏指出,把网际网络融合于电视的数位家庭环境,以及强调交互式的多媒体应用软件内容,正是目前英特尔调整方向后的努力目标。 英特尔数位家庭事业群产品应用工程经理朱立宏指出,以往直接把PC带进数位家庭领域,并不是一个好的商业模式,而单向被动式接收频道的传统电视内容和机上盒的应用环境,也不
[嵌入式]
英特尔:电视应强调<font color='red'>交互式</font>选择性的多媒体应用
交互式数字机顶盒的设计
机顶盒的功能要求 机顶盒是一个十分笼统的名称。各种机顶盒的功能和结构相差甚多。早期并且得到较广应用的机顶盒可能要数WebTV了。WebTV的最初目的是利用电视机来访问Internet的网站。典型的WebTV内部包含一个33.6K或56K bps的Modem,通过电话线路上网,电视机被用作显示设备。这类WebTV配备有与PC机上类似的浏览器软件,用户可操纵遥控鼠标、红外键盘等装置浏览网页,或收发e-mail。这类WebTV虽然也可收看Web上的影视内容,但电视和Internet的通路是分开的。这类WebTV在访问Internet方面是数字的,但是数据传输速率低,而在电视方面,则仍是模拟、单向的(广播方式)。 随着宽
[手机便携]
移动支付交互式变革将进入3.0时代
也许2019年的双11,我们身上哪怕没有手机,凭借身上的纹身、声音都能直接抢货了?   11月12日零点,2135亿数字诞生,这背后指纹和刷脸首次成为天猫双11主流支付方式,占比超过6成,这标志着中国的支付交互式变革已经进入3.0时代。每年双11,不断刷新记录的千亿数字背后,都是一场技术升级的检阅场和风向标。   观察支付宝过去10年双11公布的数据维度,就隐约是一条中国支付技术的演进路线图:五年前,超过75%用户还在守在电脑前抢货,这五年里,脱离电脑、用手机支付已经成为几乎100%的用户首选,今年双11,我们已经看到指纹人脸等生物支付技术的大规模应用, 未来五年,将成为生物识别支付时代,也
[物联网]
移动支付<font color='red'>交互式</font>变革将进入3.0时代
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved