1、工业控制计算机2023年第36卷第1期*通化师范学院非师范专业学生创新训练项目(CS2021092)虚拟现实技术包含仿真学、计算机图形学、传感学、信息学、网络学等多种学科技术融为一体1-3。本文依托虚拟现实技术创建了满族文化信息展馆系统,以此来宣传满族文化的传统风俗以及详细立体地还原长白山地区部族演变文化传承,从而让人们更加直观地了解长白山下的人文风俗,然后利用代码构造出人物交互。本系统将满族文化集合成一个多功能的虚拟展厅,包括登录信息、展厅展示、虚拟场景等功能。本系统开发采用的代码使用的是C#编程语言,三维建模采用3D MAX建模软件,引擎采用Unity 3D开发平台。1系统需求分析1.1基
2、础功能相关功能需求本系统基础功能模块包括账号登录、注册信息、忘记密码、记住密码等基础功能,其中注册信息采用JSON表存储相关信息,利用C#进行序列化与反序列化操作,用以存储和读取相关信息,注册信息包含用户名、密码和确认密码4。1.2信息交互相关功能需求信息交互功能需要有展馆介绍的功能,其中包括文字图片信息,尤其需要点击按钮可以出现音频视频的功能需求包括音频交互和视频图片交互,其中为了便于视频观看,另外增加二级界面放大缩小,同时考虑给用户更好的游览体验,在3D交互的基础上增加VR展馆交互,而且为了给予周边人展示5-6。1.3虚拟场景模拟相关功能需求虚拟场景模拟的功能需求有地形仿真,同时在浏览体验
3、模式分为PC端的键盘鼠标操作与VR版本的立体仿真体验7-8。2Unity技术本系统采用Unity引擎进行开发,Unity是一款实时交互3D开发引擎,用于创作2D与3D项目,其支持PC、安卓、VR、游戏主机以及多种虚拟现实设备。主要兼顾两种开发语言,便于前端UI布局的JavaScript与面向对象的C#语言。同时又是利用反射以及序列化进行页面布局与效果,实现交互式开发引擎,独特的脚本挂载模型,使得开发项目拥有极高的解耦性能,而跨平台发布功能,更是使得开发的项目可以满足市场多种平台的需求,减少了无效工作。3系统设计3.1系统登录系统登录功能包含账号文本框、密码文本框和记住密码复选框。数据存储在后台
4、的JSON文件中进行匹配。3.2虚拟场景虚拟场景进行环境体验,由于该民族长期居住在长白山脚,虚拟界面仿真居住环境,让体验者进行长白山环境探索与游历,尤其触碰到植物会弹出相关信息。如图1所示:图1虚拟场景主界面3.3音视频播放选择音频图标将所需要的音频放入系统内,其次功能是3D视频播放场景,选择播放即可进行场景播放视频如图2所示。3.4展馆设计该设计同时采用Auto CAD绘制二维的图形,利用Photo-shop图像处理软件对拍摄的图片进行贴图处理,使用3D MAX软件进行虚拟三维模型的建立,最后由Unity 3D软件实现用户与空间交互。基于 VR 技术的满族展馆虚拟系统设计与开发*杨虎良甄志龙
5、(通化师范学院计算机学院,吉林 通化134002)Manchu Exhibition Hall Virtual System Based on VR Technology摘要:结合VR技术设计并开发了满族展馆的虚拟信息系统。该系统同时使用了3D MAX建模软件、C#编程语言以及Unity开发平台。系统提供了系统登录、虚拟场景、音视频导入和文化展馆等功能。以三维可视化形式展现了满族中的剪纸文化、舞蹈文化、历史人物等信息,让体验者能从系统平台中充分感受到满族文化的丰富资源,实现满族文化数字化存储、保护和展览。关键词:虚拟现实;三维建模;满族展馆Abstract:In this paper,the
6、virtual exhibition information system of Manchu culture is designed and realized based onVR technology.This system uses 3D MAX modeling software,C#programming language and Unity development platform.The system provides the functions of system login,virtual scene,audio and video importing and cultura
7、l exhibition hall andso on.It shows the paper-cutting culture,dance culture,historical figures and other information in Manchu culture in theform of three-dimensional visualization.Experiencers can fully feel the rich resources of Manchu culture from the systemplatform,and realize the digital storag
8、e,protection and exhibition of Manchu culture.Keywords:virtual reality,3D modeling,Manchu exhibition hall109基于VR技术的满族展馆虚拟系统设计与开发平面图是三维建模的基础,做好三维建模,首先使用AutoCAD软件把基础图形绘制好。如果在3D MAX的材质库中无法找到所需要的贴图,那么需要使用Photoshop软件对拍摄照片进行贴图处理,将处理好的图片和3D MAX相结合。贴图处理的越精细,模型表现也越好,效果也越真实。绝大多数的三维模型都是通过3D MAX软件制作完成的,3D MAX软件
9、可以与Unity 3D软件很好地兼容,实现联动功能。在3D MAX软件中制作好的模型导入到Unity 3D中,光源是必不可少的,Unity 3D的光源可以模拟自然中的绝大多数光线。利用这些光线组成的场景可以模拟构成非常靓丽的场景。Unity 3D是网络游戏的专业引擎,可以实现体感漫游和细节的展示。从Unity 3D系统导出的exe可执行文件,不需要安装额外的程序,使用者就可以在任何一台机器上漫游浏览。4程序开发与实现4.1 VRTK工具包VRTK全称是Virtual Reality Toolkit,即为虚拟现实工具包,利用该工具包能够减少项目配置时间,HTC VIVE硬件设备与Unity3D开
10、发引擎快速结合,其相关核心代码也无需调用6。其本身具有强大的兼容性,经过多次版本更新后支持其他VR平台的SDK,如Oculus、Daydream、Gear-VR等。从工作效率而言,VRTK充分的落实了“二八原则”,即以20%的时间完成80%的功能。由于其代码是面向大众开源的代码,更加成为VR开发中必不可少的利器。所以利用虚拟现实技术在满族文化的项目开发方面更是必备的开发工具包。在项目开发中虚拟现实工具包VRTK的主要功能则是在开发模型上挂载相对应的功能代码,其主要的实现功能具有适配Oculus、Daydream、Gear VR的SDK开发8,拥有自带的VR模拟器,无需硬件即可调试,实现手柄控制
11、与激光指针。同时拥有多种抓取、移动、交互功能,并且可以双手联动操作。其运行原理即为事件驱动进行相对应的激发已编写成功的功能模块,对于各个功能模块中不同事件触发阶段,都留有对应接口,方便实现事件进行处理。4.2关键代码程序实现的重点代码如下:using UnityEngine;using UnityEngine.SceneManagement;using UnityEngine.UI;using UnityEngine.XR;public class Hall:MonoBehaviourpublic Button loginBtn;public InputField nameIn;public
12、InputField mimaIn;public Toggle to;void Start()XRSettings.enabled=false;nameIn.text=PlayerPrefs.GetString(nameIn);mimaIn.text=PlayerPrefs.GetString(mimaIn);to.isOn=PlayerPrefs.GetInt(IsNM)=0?true:false;loginBtn.onClick.AddListener()=UpdateUI();if(nameIn.text=zhen&mimaIn.text=000000)UIToast.Instance.
13、SetText(登录成功);SceneManager.LoadScene(Login);elseUIToast.Instance.SetText(登录失败,账户或密码错误);public void UpdateUI()PlayerPrefs.SetString(nameIn,nameIn.text);if(to.isOn)PlayerPrefs.SetString(mimaIn,mimaIn.text);PlayerPrefs.SetInt(IsNM,0);elsePlayerPrefs.SetString(mimaIn,);PlayerPrefs.SetInt(IsNM,1);PlayerP
14、refs.Save();using System.Threading;using System.IO;public abstract class DecoderImporter:AudioImporterprivate AudioInfo info;private int bufferSize;private float buffer;private AutoResetEvent waitForMainThread;private Thread import;private int index;private bool abort;private Queue executionQueue=ne
15、w Queue();private object _lock=new object();public override void Abort()if(abort)return;if(import=null|!import.IsAlive)return;abort=true;if(!isInitialized)Destroy(audioClip);lock(_lock)executionQueue.Clear();waitForMainThread.Set();import.Join();private void Decode()while(index=info.lengthSamples)Ar
16、ray.Resize(ref buffer,info.lengthSamples-index);Dispatch(SetData);index+=read;progress=(float)index/info.lengthSamples;using System;using System.Collections;using System.Collections.Generic;using System.Diagnostics;using Debug=UnityEngine.Debug;public class LoadSceneName:MonoBehaviourpublic Slider loadingSlider;public Text loadingText;private float SliderLoadSpeed=1;private AsyncOperation operation;private float targetValue;public static string _sceneName=;public Image _image;public Sprite sprit