• 工作总结
  • 工作计划
  • 心得体会
  • 领导讲话
  • 发言稿
  • 演讲稿
  • 述职报告
  • 入党申请
  • 党建材料
  • 党课下载
  • 脱贫攻坚
  • 对照材料
  • 主题教育
  • 事迹材料
  • 谈话记录
  • 扫黑除恶
  • 实施方案
  • 自查整改
  • 调查报告
  • 公文范文
  • 思想汇报
  • 当前位置: 雅意学习网 > 文档大全 > 公文范文 > 正文

    基于Unity3D的虚拟现实家装系统设计与实现

    时间:2022-12-10 15:25:03 来源:雅意学习网 本文已影响 雅意学习网手机站

    陈春晖

    (福建农业职业技术学院,福建 福州 350000)

    虚拟现实技术是现代科学技术发展中的重要产物,因为其独特的技术优势,比如仿真性、互动性等,已经广泛应用于多个行业和领域。通过将虚拟现实技术与家庭装修系统进行融合,能够对家庭装修方案进行仿真模拟,在该系统的应用过程中,用户能够通过选择装修材料、布置方案等直观地看到装修效果。对于装修企业以及设计人员而言,不再需要花费大量资金新建样板房,具有良好的经济效益,可以采用科学的系统设计方案,提高系统应用实效性。

    通常情况下,用户对于家庭装修系统具有如下几项功能要求:(1)用户管理功能。需要为用户提供基础的用户注册、用户登录以及密码管理等功能。(2)家庭管理功能。需要为用户提供家庭房间增加、房间删除、房间查询以及房间修改等功能。(3)房间物品管理功能。需要为用户提供房间内的物品移动、物品旋转、物品张贴、物品悬挂、颜色更换、材质更换等多项功能。(4)保存与加载功能。需要为用户提供随时保存房间的设计方案与效果加载功能,还需要提供不同方案的对比功能。(5)其他功能。为用户提供留言、通信、评论等社交功能,在成本规划完成后将这部分功能移动到其他应用程序中[1]。

    本次基于Unity3D的虚拟现实家装系统采用经典的模块化设计方案,主要包括UI模块、业务逻辑模块以及数据访问模块。在UI模块中,主要包括用户信息、房间信息、物体信息列表以及当前信息,通过动画控制器对物体状态进行模拟与设计;
    旋转物体、张贴物体、悬挂物体、解绑物体、绑定物体、保存场景以及加载场景等通过射线控制模块进行调整;
    系统基础为数据访问模块,数据加载类模块用于获取和保存Json公式数据,针对模型、图片以及图形等资源采用资源加载模块进行交互;
    中间模块为业务逻辑模块,其中核心为GameController,通过该控制器能够实现对当前房间中的物体控制,比如移动、旋转等,MonoBehavior能够对整体房间场景进行加载与保存;
    GameController中每个房间或物品都能够将控制类作为组件;
    控制类组件能够记录房间中物体的位置、材质以及颜色等,通过对物体颜色的操作实现物体状态改变;
    同时提供射线类控制模式,主要功能是选择当前房间中的物体;
    动画控制器用户将当前的物品状态调整与UI动画相结合;
    GameControlle中的OnGUI以及Update等内置程序能够用于人机界面交互[2]。

    2.1 家庭装修中房间物品的选取

    在用户利用计算机或智能手机访问基于Unity3D的虚拟现实家装系统时,采用鼠标、手柄等对物体进行交互,逻辑与在2D平面中的操作存在一定差异,鼠标、手柄在操作过程中得到的数据为屏幕中的二维坐标,场景中物体采用三维坐标,因此,需要对二维坐标进行处理。系统中应用Unity3D所提供的射线类Ray控制,具有模拟人眼视线的功能,Camera能够向场景中发射一条射线,为了能够明确射线遇到房间物品的具体情况,需要对房间中的物品增加Collide组件,保证能够实现物品与射线的碰撞效果,能够为用户提供模拟场景。针对射线碰撞到的物体可以更改其外观,还可以模拟出物品的选择[3]。

    2.2 预制件问题

    在虚拟现实场景中,为了能够展现出房间物品的具体情况,在本次系统设计中采用了多项细节处理方式,主要包括材质、贴图、脚本处理逻辑以及动画等内容。以虚拟现实场景中的人物为例,需要从3DMax中导出fbx格式人物模型,将其增加到虚拟现实场景中,在场景中导出材质与贴图,并设置动画控制器与动画,将对应的控制代码以组件形式增加到人物模型中,从而构成一个虚拟现实人物,但是该过程对于用户而言,只需要对场景中人物进行移动。为了能够提高系统开发便利性,在人物及其元素构成中将其预制成为一个整体,同时Unity3D提供了预制件的整体设计方案[4]。

    2.3 坐标调整问题

    在用户采用鼠标、手柄等输入设备对物体进行操作的过程中,需要完成二维坐标向三维坐标的调整。在Unity3D中具有多种不同的坐标系,比如本地坐标、视图坐标等,世界坐标对应真实的东、西、南、北4个方向,本地坐标以物体自身作为基础,对应真实的物品前、后、左、右,屏幕坐标为二维坐标,在用户操作时能够自动化实现对二维坐标的转换,视图坐标为虚拟现实场景中摄像机输出的Viewport坐标。因为各个坐标系存在差异,在对应场景中物体的位移、旋转等操作能够实现自动化坐标换算。

    2.4 结果保存

    在虚拟家庭装修完成后,需要将模拟方案保存,若存储的为整体场景,因为整体虚拟现实场景中存在大量物品,每个物品还包含不同材质、颜色以及位置信息等,整体存储量较大,根据计算,常规的家庭装修虚拟现实结果模拟方案一般能达到500 M以上,采用以虚拟现实为基础的保存方式不利于存储与还原,为此,本次系统设计中应用Json实现关键数据的保存。Json是一项轻量级的数据格式,相比于XML,其灵活性较好,输出存储时间更长,从而能够减少数据存储与传送;
    Json针对数组和对象采用不同的形式,数组采用“[]”,格式比如[“java”,”javascript”,”vb”],数值存储时采用索引格式进行读取;
    对象存储采用{}格式,格式采用键值对的方式,比如{key:value,key:value,…},Unity3D支持Json功能。

    3.1 物体选取功能实现方式

    在虚拟现实场景中,选择物体需要采用射线与碰撞检测,在Unity3D中能够采用RaycastHit实现,使用Cameta向屏幕射出一条射线后,在遇到碰撞检测物体时,能够从RaycastHit的属性中获取碰撞物体的信息。示例代码为:

    RaycastHithit;

    Vector3 pos = Input.GetTouch(0).position

    Ray ray Camera.Main.ScreenPointToRay (pos);

    if(Physics.Raycast(ray,outhit)){

    return hit.transform;

    }

    Else return null;

    在上述代码中,若射线为左手触碰屏幕区域发出的射线,碰撞到物体后会返回物体中,反之返回null,从而实现对虚拟现实物体的选取。

    3.2 预制组件实现方式

    预制组件功能呈现出本次系统设计精益求精的思想,能够为用户提供更高质量的设计方案,通过采用更多的预制组件能够有效提高系统质量以及开发效率。家庭装修系统中包括家具、壁纸、地板以及电器等多项元素,难以将所有元素事先制作,因此,在系统应用过程中需要不断丰富,可以采用预制件的方式实现。在选择对应物品后,需要对物体进行移动处理,为了实现坐标中的效果,需要完成以下几项动作:(1)从3DMax中导出fbx格式图形。(2)在虚拟现实场景中增加Cylinder组件,并对其属性进行更改,使其成为符合要求的图形。(3)组合两个图形使其构成单个坐标轴。(4)将fbx格式图形添加搅拌Cone.cs,该脚本能够使得用户操作在图形中更改图形的颜色或材质。(5)对坐标轴进行复制与旋转,使其构成x,y,z3个方向,并对其他坐标轴材质进行调整,使得不同的坐标轴能够表现为不同的颜色状态。(6)提供ConeMan-ager,在选择某个物品时,创建坐标轴副本,该副本与选种目标结合,同时在移动坐标轴时还能够移动选定的物品。

    在上述流程结束后,能够直接在Unity3D开发场景中将坐标轴拖动到Assert中,Assert中能够显示出制作完成的预制物品,预制物品还能够在其他场景中使用;
    除三维坐标系之外,场景中的其他元素比如电器、家具等,都能够采用预制件制作的方式,按照用户的具体需求将其添加到场景中加载[5]。

    3.3 坐标系调整实现方式

    用户在虚拟现实场景中对家庭装修方案进行模拟时,需要对各种物品进行摆放,所以需要对物品的坐标系进行转化与调整。其转换流程为:(1)按照屏幕坐标机计算各点在世界坐标系中的位置。(2)将物品的本地坐标系前进方向量转化为世界坐标系中的单体向量。(3)将物品的世界坐标系位置与向量融合。以上流程实现代码为:

    Vector3 screenSpace = mCamera.WorhlToSereenPoint(transforni.position);

    floatx = Input.mousePosition.X;

    floatY =Input.mousePosition.Y;

    Veeror3 vector = new Vector3 (X,Y,screenSpace.z);

    Vector3 startPos = inCanlel,a.ScreenToW orldPoint (veetoF);

    while(Input.GetMouseBulton(0))

    {

    Vector3curScreenSpace=new Vector3(Input.mousePositio.X,Input.mousePosition.Y,screenSpace.z);

    //求出偏移量

    var offset = mCamera.ScreenToWorldPoint (curScreenSpace)- startPos;

    //将两点之间向量投影到物体的上方

    offset= Vector3.Project(ofset,GetMoveDirection());

    //对目标位置增加一个偏移量得到新位置

    Transform.position+=offset;

    //重置开始点,为下一帧做准备

    startPos = transform.Position;

    //等待下一帧

    Yield return new WaitForFixedUpdate();

    }

    3.4 结果存储实现方式

    在对家庭装修的虚拟现实结果进行存储的过程中,采用Json数据格式,因为家庭装修系统需要与远程服务连接与交互,实现对多种模型的下载,所以,需要在系统中记录模型ID,不用将所有数据存储,同时不需要保存模型细节。在模型之间对坐标系进行转化,需要记录物品的三维坐标;
    物品需要旋转处理,所以需要记录物品在各个轴的旋转角度。最重要的是,物品需要和其他物品保持一定关系,比如图片贴在墙面上、书籍放在书桌上等,这种位置关系也需要存储[6]。以书籍放在书桌上的Json数据格式片段为例,即:{“ID”:”SO132”,”Name”:”Book1,”X”:” 200”,”Y”:”300”,”Z”:”165”,”RotateX”:”0”.” RotateY”:”0”,”RotateZ”:”0”,”Action”:” Put”,”Target:”Desk1”}

    在上述片段的最后一部分中,Action和Target表示与对象之间具体关系,在虚拟场景中存储可以通过以下代码流程实现:

    for(objectobjin场景 中的所有物体)

    {

    if(obj已经生成过 json)continue;

    if(obj有关联对象)

    生成关联对象的json

    生成当前对象的json;

    }

    若需要按照生成的Json对场景进行还原,按照物品的ID从网络缓存中进行记载,如果网络缓存不存在,则可以从服务器中进行加载,从而减少数据加载量,有效提升系统运行速度。

    本文所设计的基于Unity3D的虚拟现实家装系统,在实践应用中具有良好的效果,用户能够通过系统功能对家庭装修方案进行实时调整,更加直观地明确家庭装修效果,且能够灵活地对各项家具、电器等物品进行调整,还能够对装修材料进行材质、颜色等内容的挑选,家庭装修模拟方案存储结果数据较小,能够提高各项资源加载速度,对于用户以及装修公司具有重要作用。因此,可以将本文所设计的系统应用在家庭装修工作中,并结合实际情况对系统功能进一步完善,确保虚拟现实系统能够发挥出更好的效果。

    综上所述,本文设计开发了一套基于Unity3D的虚拟现实家装系统,对其系统设计以及实现方式进行了全面阐述,希望能够对我国家庭装修行业起到一定的借鉴和帮助作用,利用虚拟现实技术进一步促进家庭装修行业发展,为用户以及装修企业提供更加便利的工作条件。

    猜你喜欢 坐标系虚拟现实物品 称物品小学生学习指导(低年级)(2022年5期)2022-05-31独立坐标系椭球变换与坐标换算导航定位学报(2022年2期)2022-04-11极坐标系中的奇妙曲线语数外学习·高中版中旬(2021年11期)2021-02-14三角函数的坐标系模型考试周刊(2018年15期)2018-01-21求坐标系内三角形的面积中学生数理化·七年级数学人教版(2017年4期)2017-07-08图画捉迷藏小天使·二年级语数英综合(2017年3期)2017-04-01虚拟现实,让学习更“沉浸”中小学信息技术教育(2017年3期)2017-03-28找物品小天使·一年级语数英综合(2015年8期)2015-07-06创意,源自生活的可爱小物品读者·校园版(2015年13期)2015-07-01虚拟现实技术不能根本改变新闻声屏世界(2015年7期)2015-02-28

    推荐访问:虚拟现实 家装 设计

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章