三维虚拟漫步Word文档格式.docx
- 文档编号:19986710
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:23
- 大小:3.01MB
三维虚拟漫步Word文档格式.docx
《三维虚拟漫步Word文档格式.docx》由会员分享,可在线阅读,更多相关《三维虚拟漫步Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
years.
used
computer
simulations
generate
3D
virtual
world,
which
provided
users
with
visual,
auditory,
haptic
simulation
on
sensory.
Users
will
feel
like
be
personally
the
scene,
enable
them
observe
food
three
degrees
space
without
time
limit.
3DMAXisasoftwarebasedonPCsystemforrenderingandmodelingbyDiscreetcompany.Unity
is
game
engine
produced
by
Unity
Technologies
Denmark,
owning
powerful
cross-platform
development
and
other
characteristics,
component-based
ensures
us
say
goodbye
boring
plain
code
development.
ThedesignisbasedontheprincipleofVisualReality,3Dcollegescenebyusing3DMAXsoftware,andthenuseUnitytomanageeachscene,istorealizetheVirtualmodelingtechnologyandwanderingtechnology.Modelingisatechniqueof3Dentitymodelclosetotherealthrough3DMAXandmaps,renderingthemodel,allthemodelsinFBXfilesastheexternalsresouresintotheUnityenginethescene,inordertorealizetheroamingtheentireschoolofmathematicsandcomputer,usingC#mobilescriptprogrammingcontrolthecamerainUnity,andtherealizationofsometriggeringevent,suchas:
elevatorlift,theprompt,theeventsoftheskychangesandcompleteUIdesign.
【KeyWords】VirtualReality;
Unity;
3DMAX;
Virtual
目录
前言1
1数计学院三维虚拟漫步介绍2
1.1设计思路2
1.2设计步骤2
1.2.1数据采集阶段2
1.2.23DMAX建模阶段2
1.2.3用Unity完成UI设计3
1.2.4C#行为编程3
1.2.5整理阶段3
2数计学院三维虚拟漫步概要设计4
2.1工作原理4
2.2工作流程图4
3数计学院三维虚拟漫步详细设计5
3.1设计目的5
3.2详细功能模块设计6
3.2.1列表项被点击事件6
3.2.2生成列表8
3.2.3保存动态修改的模型10
3.2.4电梯触发事件13
3.2.5天空变换贴图16
3.2.6提示语18
4模型制作详细设计19
5开发环境和结论21
5.1硬件环境21
5.2软件环境21
5.3运行环境21
5.4运行结果21
总结25
致谢26
参考文献27
前言
随着计算机技术,特别是计算机图形学、三维仿真技术以及虚拟现实技术的飞速发展,信息管理的数字化和实物模型的虚拟化已成为当今世界非常重要的技术应用领域。
人们意识到虚拟现实技术几乎是所有发达国家目前都在大力研究的前沿领域,其发展也达到了异常迅速的程度。
在国外,美国、德国、英国、日本、韩国等国家在虚拟现实技术方面的研究做的比较好。
我国虚拟现实技术研究起步较晚,与发达国家还有一定的差距。
我国正逐渐开始尝试和研究建设数字城市、数字社区的实践。
在高校,对现实大学校园的数字化和虚拟化,即对虚拟校园的研究与构建也越来越多。
虚拟校园能够全方位展示学校的各种硬件环境,成为展示学校风采的重要途径。
在综合考虑了目前成熟的各类技术实现方式后,本文从3DMAX的建模和渲染烘焙技术着手,采用Unity引擎进行二次开发来构建的学院三维虚拟漫游系统。
基于3DMAX和Unity技术的三维仿真漫游系统的开发方法,以数学与计算机学院所在的6A教学楼、周边环境及建筑物建立虚拟场景,通过控制摄像机以第一人称步行穿越的方式实现对虚拟校园的交互式漫游,并且增加了可扩展性的实现(即在现有场景的基础上能够实现动态的增加、删除和修改模型)及一些模拟真实环境的触发事件(即电梯升降、开关门、灯光、音效等),并且给予参观用户相应的指引性提示。
使用户能够如身临其境般参观整个学院的基础设施和环境,大致了解本学院的地理风貌和文化实力,特别适合想报读数学与计算机学院的学生更加直观的了解本学院的情况,吸引更多外界人士对于西华大学、对于数计学院的关注,是为数学与计算机学院营造优良口碑、得到更多关注度的一种非常好的宣传手段。
1数计学院三维虚拟漫步介绍
1.1设计思路
数计学院三维虚拟漫步,即是要实现数计学院的虚拟校园建模技术和漫游技术。
1.2设计步骤
1.2.1数据采集阶段
数据采集阶段是整个设计开发的基础,这个阶段主要是通过现场观察、测量、采集数学与计算机学院的照片及周围环境的照片,以得到整个6A四楼和五楼的大致分布图,以及四楼、五楼具体尺寸以及各楼层内各种硬件设备的种类、每种硬件设备的具体尺寸及贴图纹理,并依据这些采集到的数据进行初步的可行性分析,为后期场景的建立及模型的制作打好基础。
由于数据采集是整个设计的基础阶段,关系到后期模型制作和效果展示的真实度,又由于整个数计学院场景中的模型数量相对庞大,因此整个数据采集阶段显得尤为重要。
1.2.23DMAX建模阶段
在3DMAX建模阶段,首先统计出要创建的模型种类,根据数据采集的结果,建模的种类包括:
整个六教的初略模型、6A四楼及五楼的精细框架模型(能展现数计学院各科室分布情况)、办公桌、电脑桌、电脑、椅子、栏杆、楼梯、数计学院的宣传展板、吊灯、柜子、门、窗、名人挂画及周围环境中的树和花坛等。
1.2.3用Unity完成UI设计
利用Unity中的插件NGUI完成进入设计的初始界面,程序初始时由一段西华大学宣传视频引入然后跳转进入初始界面,初始界面以漫游模式和修改模式两个模式选择呈现给用户,用户可分别点击进入漫游模式和修改模式。
在漫游模式下通过鼠标及键盘控制摄像机的移动和视口方向来漫游整个数学与计算机学院;
在修改模式下,通过建立列表,通过列表来体现可用的外部资源,从而进行动态的增加、删除、修改模型,即可扩展性的实现。
1.2.4C#行为编程
利用C#脚本编程控制在漫游模式下模拟真实环境的各个触发事件:
天气变幻、电梯响应事件、摄像机插值移动、相关提示语的变换、对于周围环境中树的贴图的控制等。
在修改模式下则是主要实现可扩展性,即用一个列表展示所能向场景中添加的可用模型,用户能将这些可用模型添加到场景中,并利用旋转和移动功能将模型摆放在场景中合适的位置,在用户想删除已添加的可用模型时可以选中该模型按delete键进行删除操作。
1.2.5整理阶段
这个阶段是整个设计的收尾阶段,此阶段的主要工作是将所有的模型整合到一起导入场景中,并对模型的尺寸大小进行相对应的调整以适应实际场景的尺寸,将教学楼的外部墙面和地板的贴图换成真实度更高的贴图,使整个场景的实际演示效果更逼近真实场景。
并将之前的脚本中的数据部分进行准确性的调整,使之与调整后的场景相适应,对有待改变和加强的部分加以优化。
2数计学院三维虚拟漫步概要设计
2.1工作原理
用户在进入设计时,在初始界面会看到“开始”和“修改”两个按钮,点击两个按钮分别进入漫游模式和修改模式。
(1)用户在进入漫游模式时,通过对鼠标操作的响应,实现对摄像机的操作,实现对整个场景的漫游。
在摄像机的移动过程中加上了插值过程,以使移动过程柔和的进行,显得更加平缓。
(2)用户进入漫游模式时,通过点击列表中显示的可用模型,可以动态的向场景中添加模型,并且可以通过拖拉模型改变模型的位置及旋转角度。
并且可以删除该模型。
(3)在退出修改模式时,程序将浏览整个场景中新增的物体,并将物体的名字、坐标、旋转角度保存在结构链表中,序列化为二进制文件,当程序初始化时,再反序列化,读成链表,并按照里面的数据生成模型。
2.2工作流程图
图21数计学院三维虚拟漫步系统工作流程图
3数计学院三维虚拟漫步详细设计
3.1设计目的
教育部在一系列相关的文件中,多次涉及到了三维虚拟校园,阐明了三维虚拟校园的地位和作用。
三维虚拟校园也是虚拟现实技术在教育培训中最早的具体应用,它由浅至深有三个层面应用,分别适应学校不同程度需求:
简单的虚拟我们的校园环境致游客浏览,基于教学、教务、校园生活,功能相对完整的三维可视化三维虚拟校园以学员为中心,加入一系列人性化的功能,以虚拟现实技术作为远程教育基础平台,虚拟远程教育虚拟现实可作为高校扩大招生后设置的分校和远程教育教学点提供可移动的电子教学场所,通过交互式远程教学的课程目录和网站,由局域网工具校园网站的链接,可对各个终端提供开放性的、远距离的持续教育,还可为社会提供新技术和高等职业培训机会,创造更大的经济效益与社会效益。
随着虚拟现实技术的不断发展与完善,以及硬件设备价格的不断降低,我们相信,虚拟现实技术以其自身强大的教学优势和潜力,将会逐渐受到教育工作者的重视和青睐,最终在教育培训领域广泛应用并发挥其重要作用。
许多高校都在积极研究虚拟现实技术及其应用,并相继建起了虚拟现实与系统仿真的研究室,将科研成果迅速转化实用技术,如北京航天航空大学在分布式飞行模拟方面的应用,浙江大学在建筑方面进行虚拟规划、虚拟设计的应用;
哈尔滨工业大学在人机交互方面的应用;
清华大学对临场感的研究等都颇具特色。
有的研究甚至已经具备独立承接大型虚拟现实项目的实力。
虚拟学习环境虚拟现实技术能够为学生提供生动。
逼真的学习环境,如建造人体模型、电脑太空旅行、化合物分子结构显示等。
利用虚拟现实技术建立起来的虚拟实训基地,其“设备”与“部件”多是虚拟的,可以随时生成新的设备。
教学内容可以不断更新,使实践训练及时跟上技术发展。
同时,虚拟现实的沉浸性与交互性,使学生能够在虚拟的学习环境中扮演一个角色,全身心投入到学习环境中去,这非常有利于学生的技能训练。
例如:
在虚拟的飞机驾驶训练系统中,学员可以反复操作控制设备,学习在各种天气情况下驾驶飞机起飞、降落,通过反复训练,达到熟练掌握驾驶技术的目的。
而数计学院三维虚拟漫游则是基于虚拟现实技术,建立三维的学院环境,并漫游整个场景。
整个设计特别适合想报读本学院的学生实时的参观本学院,了解学院的环境、硬件设施等。
3.2详细功能模块设计
3.2.1列表项被点击事件
3.2.1.1设计思路
为了实现可扩展性,即使可以向场景中动态的添加模型。
众所周知,屏幕是一个二维的面,而我们要添加模型的位置是一个三维的坐标,所以仅仅通过鼠标点击不能确定一个世界坐标,所以厄待解决的一个问题就是二维空间转三维空间的问题。
3.2.1.2实现方法
通过查资料发现摄像机有一个屏幕坐标转世界坐标的的方法,但是第三个参数是自己定的,代表点与摄像机的距离,由此我们便获得了一个三维坐标,也可以通过此来完成二维转三维的
在设计中,当用户处于修改界面,且鼠标单击某个列表项时,便获取摄像机的世界坐标、列表项文件名、及模型旋转角度,将该模型加载到场景中。
3.2.1.3核心代码
获取摄像机上的脚本:
voidAwake(){
c=(cameraControl)GameObject.Find("
Camera3"
).GetComponent("
cameraControl"
);
}
鼠标点击列表时触发事件:
voidUpdate(){
intstate=PlayerPrefs.GetInt("
GameState"
string_item=PlayerPrefs.GetString("
ifChoiceItem"
if(UICamera.hoveredObject==null&
&
state==2){//处于修改界面且鼠标没停在界面上//
if(Input.GetMouseButtonUp(0)&
_item!
="
"
){
Vector3v=newVector3(0,0,0);
v=c.getWorldPoint();
StartCoroutine(loaditem(_item,v,Quaternion.identity));
//协同程序//
PlayerPrefs.SetString("
"
}
elseif(Input.GetMouseButtonUp
(1)||Input.GetMouseButtonUp
(2)){
}
将点击的模型保存并加载到场景中:
publicIEnumeratorloaditem(strings,Vector3position,Quaternionrotation){
stringp=Application.dataPath;
p=p.Replace("
\\"
"
/"
intindex=p.LastIndexOf("
p=p.Substring(0,index);
stringpath="
file:
//"
+p+"
/Model/"
+s;
Debug.Log(path);
WWWmyWWW=newWWW(path);
yieldreturnmyWWW;
AssetBundlebundle=myWWW.assetBundle;
Objectgo=bundle.mainAsset;
GameObjectg=Instantiate(go)asGameObject;
g.name=s;
g.tag="
newM"
;
if(g.collider==null)g.AddComponent("
MeshCollider"
g.transform.position=position;
g.transform.rotation=rotation;
bundle.Unload(false);
3.2.2生成列表
3.2.2.1设计思路
这一部分则是生成修改界面上可用模型的列表,当向列表项添加新模型时先获取新模型的结点添加到当前模型链表中,然后刷新链表。
3.2.2.2实现方法
利用getNewModel()函数将新添加的可用模型作为结点添加到当前可用模型链表中,再利用refreshlistview()函数刷新列表,及时更新可用模型。
3.2.2.3核心代码
获取新模型名的链表:
publicvoidgetNewModel(){//此函数用于获取新模型名的链表//
list.Clear();
inti=0;
DirectoryInfodir=newDirectoryInfo(@"
Model\"
foreach(FileInfodChildindir.GetFiles("
*.unity3d"
)){
list.Add(dChild.Name);
//Debug.Log(list[i]);
i++;
刷新列表函数:
publicvoidrefreshlistview(){//此函数用于刷新列表//
myTools.DestroyChildren(GameObject.Find("
UIGrid"
));
intlen=list.Count;
GameObjecto;
grid=GameObject.Find("
).GetComponent<
UIGrid>
();
for(inti=0;
i<
len;
i++){
o=(GameObject)Resources.Load("
item"
//o.transform.position=newVector3(0,0,-10);
GameObjectt=NGUITools.AddChild(GameObject.Find("
).gameObject,o);
t.SendMessage("
setText"
list[i]);
//o.transform.parent=GameObject.Find("
listview"
).transform;
//o.transform.localPosition=newVector3(0,0,0);
//o.transform.localScale=newVector3(1,1,1);
//NGUITools.AddChild(o);
grid.repositionNow=true;
//grid.
3.2.3保存动态修改的模型
3.2.3.1设计思路
当我们退出修改模式时,将浏览整个场景中新增加的模型,将模型的名字、坐标、旋转角度保存在结构链表中,序列化为二进制文件。
当程序初始化时,反序列化,读成链表,并按照里面的数据生成模型加载到场景中。
3.2.3.2实现方法
首先声明一个可以被序列化的结构体modelinfo,用来标记模型的名字、坐标和旋转角度。
在程序初始化Start()函数中反序列化和加载模型。
用searchAndSerialization()遍历新增的模型并进行序列化,以保存动态加载到场景中的物体。
3.2.3.3代码实现
声明可序列化:
[Serializable]
publicstructmodelinfo
{
publicstringfilename;
publicfloatX,Y,Z;
publicfloatRX,RY,RZ,RW;
}
遍历模型并进行序列化:
voidsearchAndSerialization(){
ArrayListoutset;
GameObject[]temp;
temp=GameObject.FindGameObjectsWithTag("
intsize=temp.Length;
outset=newArrayList(size);
size;
modelinfos=newmodelinfo();
s.filename=temp[i].name;
s.X=temp[i].transform.position.x;
s.Y=temp[i].transform.position.y;
s.Z=temp[i].transform.position.z;
s.RX=temp[i].transform.rotation[0];
//Quaternion//
s.RY=temp[i].transform.rotation[1];
s.RZ=temp[i].transform.rotation[2];
s.RW=temp[i].transform.rotation[3];
outset.Add(s);
FileStreamf=newFileStream("
Model/config.dat"
FileMode.Create);
BinaryFormatterformatter=newBinaryFormatter();
formatter.Serialize(f,outset);
f.Close();
反序列化并加载模型:
voidDeserializationAndLoad(){//Deserialization//
ArrayListputin;
FileMode.Open);
putin=(ArrayList)formatter.Des
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三维 虚拟 漫步