基于OpenGL的虚拟现实系统研究

2021-12-16 22:27顾灏
科技信息·学术版 2021年34期
关键词:三维建模虚拟现实

顾灏

摘要:本文首先概括介绍了虚拟现实技术和OpenGL技术,然后给出了在Visual C++ 2019平台下运用OpenGL实现三维虚拟现实系统的基本过程和方法,探讨了构建过程中的一些技术问题。

关键词:虚拟现实;OpenGL;三维建模

1 引言

随着计算机技术的迅速发展,虚拟现实与我们的生活日益密切。它已成为当今计算机界广泛关注的一个热点,意指“计算机产生的三维交互环境,在使用中用户是投入到这个环境中去并能体验到‘身临其境’的感觉,人与计算机之间的交互极为自然”,虚拟现实的出现改变了人们传统的思维方式,使人、计算机和现实环境紧密的结合起来,现已延伸到娱乐、医疗、军事、建筑、机械等各个领域。

目前,对虚拟现实技术的研究越来越广泛,越来越深入。本文使用OpenGL和VC++工具,开发出一个虚拟现实系统。该系统实现的基本过程为:首先进行素材收集和处理,用数码相机进行实景拍照、再利用Photoshop图像处理软件对其进行加工处理,然后在3dsMax中建模并进行优化处理,最后利用OpenGL和VC++进行三维编程实现虚拟现实。

2OpenGL技术

OpenGL是近几年发展起来的一个性能卓越的三维图形库标准,是一个高性能的图形开发软件包。它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GI三位图形库为基础的制定的一个通用共享的开方式三维图形标准。

OpenGL灵活方便地实现了二维和三维的高级图形技术,在性能上表现的异常优越。它具有建模、变换、光线处理、色彩处理、动画以及更先进的能力,如纹理映射、物体运动模糊效果和雾化效果等。OpenGL为实现逼真的三维绘制效果,建立交互的三维场景提供了优秀的软件工具。

OpenGL为应用程序员提供了程序和图形输入输出设备之间的功能接口,定义了一个独立于语言的图形核心系统。因此OpenGL可以与Visual C++紧密接口,该接口由几百个函数组成,利用这些函数,把OpenGL嵌入Visual C++之中,用户可创建出高质量的三维图形。

3模型构建与优化

在实际的三维图形程序中,需要构建的三维模型一般比较复杂,但OpenGL的建模功能并不是很强大,所以需与其它功能强大的三维建模软件结合。3dsMax正是制作复杂三维建筑模型的理想工具。

下面介绍一下建筑物实例的实现过程:

(1)资料收集与准备

建筑物数据一般是利用现有的地图等空间数据,主要包括地形图和最新的规划图。建筑物纹理是建筑物三维模型的重要组成部分,纹理数据主要通过拍摄的数码相片获取,它直接影响着三维场景的显示效果。

(2)在AutoCAD里进行二维平面建模

把收集到的规划图导入到AutoCAD软件中,描出建筑物和道路等的平面位置,进行二维平面建模。

(3)在PhotoShop里制作材质贴图

为了增强场景的真实感,要采用大量的纹理贴图。模型的纹理来自建筑效果图和使用数码相机获得的纹理照片,对纹理数据的采集,一般是数码相机拍摄出各个面的正摄影像。当然,获得的纹理照片需要经过PhotoShop软件的进一步地修整和校正。

(4)在3DSMAX里进行几何建模和场景材质贴图

在3DSMAX里导入CAD平面图,对其进行几何建模,在此过程中用到的命令有描边、挤出、拉伸、位移等。在建好简单的三维立体模型之后,对其进行材质贴图,以使模型具有较强的真实感。对于某些细节可以不必建模,直接用图来模仿,比如花坛里植被的建模就是直接在一個矩形上贴上对应的图片来近似生成的。在赋材质时候,可利用UV编辑器和透明贴图通道的调节,来使模型达到更为真实的感觉。

(5) 把模型导出为3ds格式文件

整个场景模型完成后,在3DSMAX 中将模型用 Export命令导出为 3DS 文件格式。这样,因为系统提供了可以导入3ds文件的接口,所以可以很方便地打开建好的模型。

下面为在3D Studio Max建立的模型效果图:

4系统组成与功能模块

本系统是在Windows XP 操作系统下,基于Visual C++6.0平台,调用OpenGL 函数库的函数设计实现的,在建立模型时采用了3dmax软件。

系统可以导入3ds格式的三维模型,在系统中重绘,显示不错的三维效果。用户可以对模型进行一定的处理和控制,这些处理和控制包括对象的材质编辑、场景中的灯光进行控制、利用鼠标来对视点进行控制和实现漫游功能等等。依照系统设计的功能可以将整个系统分为三个模块,即:3DS文件的导入模块、材质、光照处理模块、多视点观察模块。

本系统的功能模块框架如下图所示。

5系统实现

5.1构建OpenGL图形开发环境

(1)创建MFC界面,向工程中添加OpenGL编译链接库opengl32.lib、glu32.lib、glaux.lib、glut32.lib,并确保在系统的system32目录下有下列动态链接库文件的存在:glu.dll、glu32.dll、glut.dll、glut32.dll、opengl32.dll。

(2)编写创建函数。因为OpenGL仅能在客户窗口中绘图而无法在该窗口的子窗口和兄弟窗口中绘图,所以必须在客户区域中加以去除。本程序在VIEW类的PreCreateWindow()函数中添加下面语句来实现:

cs.style |=WS_CLIPCHILDREN | WS_CLIPSIBLINGS;

(3)設置像素格式,创建绘制描述表。这一过程在视图类里的OnCreate函数中通过调用独立出来的CreateOpenGL()来实现。OpenGL依赖绘制描述表操作显示硬件,因此调用OpenGL命令前,必须创建绘制描述表并使其成为当前的绘制描述表,即m_hRC = wglCreateContext( hDC );wglMakeCurrent( hDC,m_hRC );

(4)定义当前视区及投影模式等。这些操作在对WM_SIZE消息的处理函数OnSize()中体现,在其中调用glViewport()函数对创建的窗口变换进行更改以适应窗口大小的改变。还可以通过gluPerspective()函数重新设置投影变换,使得当窗口的大小发生改变时,显示在窗口中的场景不会发生扭曲。

(5)填充背景色,进行一些OpenGL绘制前的初始化工作。当需要重新设置窗口背景时,产生WM_ERASEBKGND消息。处理该消息的缺省操作是用当前背景色填充整个窗口。OpenGL用glClear()函数来执行类似操作,所以要对WM ERASEBKGND的消息处理函数做适当改变:注释掉OnEraseBKgnd()函数中所有的语句,添加return TRUE语句,使该函数不执行操作,仅返回TRUE值。

(6)绘制场景,最后删除绘制描述表。所有的OpenGL的绘制操作都必须放在OnDraw()函数中。在窗口销毁时会触发WM_DESTROY消息的处理函数,因此我们在该函数中删除绘制描述表。

5.2功能模块实现

(1) 3DS文件的导入模块:主要用于从外部导入3DS格式的模型,还可以有选择性的导入模型中的某些对象。系统对3DS文件中的有用数据进行了筛选,并依靠系统提供的函数将其导入系统自有的数据模型。另外,在将三维模型输入的同时考虑到了模型本身的纹理,并开辟了纹理存储空间来存储对应的纹理。3DS的文件格式是分块的层次结构,我们不需要读出所有的这些块信息,而是根据需要读出其中某些块。一般来说,3ds文件中的对象块、颜色块和材质块信息是最重要的,所以要在程序中读入。在本程序中定义一个类Import3ds用于3ds 文件的读入。在这个类中,用到了read_chunk()、load_object()、load_material()、object3d等函数。这些函数将3DS中需要的块数据读出并存储在自己组织的数据格式中。其中函数read_chunk()的主要功能是读3ds文件中的块,为了遍历文件中的所有块,使用了jump_chunk()函数来进行的块读取的跳转,直至将所有块的数据全部读出来。

(2)材质和光照等处理模块:包括修改光照和材质、背景修改、摄像机重置等功能,主要用于设置环境光、漫射光和镜面光,使对象具有不同的材质特征,在编辑过程中,可以将编辑结果实时地反映到场景中的对象中。这个模块用到的对话框均为无模对话框,首先构造一个对话框对象,然后调用成员函数Create来创建对话框窗口。此时对话框将出现在屏幕上,但Create函数已返回,在销毁该对话框窗口时,调用DesrtoyWindow函数。

(3)多视点观察模块:借助这个模块的功能,可以更好地观察场景中的各个对象。这一模块功能是通过设置一个可以变换位置的“摄像机”来完成的,这个摄像机在类Camera中定义,其中一些函数改变“摄像机”的状态。摄像机视点控制要求系统可以利用系统输入设备鼠标实现对视点控制。系统要求实时的监测鼠标的输入信号,根据信号控制摄像机的状态。主要控制方法有旋转摄像机、绕一点旋转摄像机、平移摄像机等。其中还实现了通过鼠标改变“摄像机”的状态,从而可以多视点观察整个场景。

5.3系统运行界面

本虚拟现实系统的运行效果如下图所示。

6结束语

本文给出了一种构建桌面虚拟现实系统的基本过程和实现方法,OpenGL和3dsMax结合实现三维仿真既利用了3dsMax建立模型方便快捷的特点,又利用了OpenGL容易实现交互性的特点,可以方便地在不同平台和系统间移植。同时,系统提供3ds导入接口,还能够利用已有的3ds模型。这种方法系统实现起来简单方便,通用性好,对于快速开发可视化系统具有现实意义。

参考文献

[1]Grigore C.Burdea[美]Philippe Coiffet[法]:《虚拟现实技术(第二版)》.电子工业出版社,2005.7

[2]黄心渊等. 3DS MAX 5 标准教程[M].人民邮电出版社,2003年1月

[3]李长春等. 基于VC++与OpenGL的三维图形环境的构建[J].电脑开发与应用,2004,17(6):10-13

[4]和平鸽工作室. OpenGL高级编程与可视化系统开发[M].中国水利水电出版社,2002

猜你喜欢
三维建模虚拟现实
虚拟现实,让学习更“沉浸”
农用风力发电机叶片设计
数控仿真系统三维建模技术研究
基于GIS的网络三维系统的构建及应用
三维建模技术在家畜器官建模中的应用
基于CATIA的多功能运动轮椅三维数字化建模及其优化设计
虚拟现实LG 360 VR眼镜
View Master虚拟现实显示器