网站首页  词典首页

请输入您要查询的论文:

 

标题 基于移动终端的家具互动展示系统的应用研究
范文

    谢新慧 司占军 尚博

    摘要:该研究实现了基于移动终端的家居互动展示系统。通过Auto CAD创建房屋的户型图,利用3d max创建建筑物以及所有家具的三维模型,并在Photo shop中对家具及建筑物贴图进行修饰,最后导入到unity中实现房屋漫游以及其他交互功能。在最终的展示系统中,用户可以任意进入家具城、品牌家具的网上展厅,并以第一人称的角度对家具城里的家具进行参观。同时,用户可以根据自己的意愿选择某个家具,对其进行移动,旋转等操作,实现近距离观看家具的功能。

    关键词:虚拟现实;家具互动;房屋漫游

    中图分类号:TP319 文献标识码:A 文章编号:1009-3044(2018)15-0209-03

    随着科技飞速发展,人们的生活质量不断提高[1]。人们早已不能满足二维的平面世界,虚拟现实技术(VR技术)应运而生[2]。虚拟现实技术是把现实世界构建成一个新的3D虚拟立体模型,用户可以借用第三方设施或设备体验身临其境的处于所构建的3D模型中[1]。VR技术打破了很久以来的平面展示系统的限制,它利用自己所创建的立体仿真环境的优点在很多领域占有一席之地。比如现在的房地产业,客户看到的不仅仅是简单的户型图,或者是房屋的室内照片,而是以第一人称的视角,真正进入到自己喜欢的房屋内进行游览、观看。对房屋的各个部位和角落都可以清楚地了解。另外,对家具的摆放和布局也可以有一个清楚地了解。

    基于移动终端的家具互动展示系统,顾名思义,就是把某一个户型和家具在移动终端上展示出来的系统[2],这里的移动终端可以是平板电脑,手机等。在向用户展示的过程中,用户可以完成与家具的简单交互,比如对家具进行简单的移动,旋转等。在该系统中,人们可以全方位地了解自己喜欢的户型,并且对户型里面的家具也可以有比较明确的了解。

    1 开发环境与软件

    制图环境: Windows 8系统,Intel(R) Core(TM)i7 CPU ,4G内存,64位操作系统

    建模环境:Windows 8系统,Intel(R) Core(TM)i7 CPU ,4G内存,64位操作系统

    开发环境:Windows 7系统,Intel(R) Core(TM)i7 CPU ,4G内存,64位操作系统

    制作软件: Auto CAD 2014、3ds Max 2014、Unity 5.6.1f1 (64-bit)、Photo shop cc

    2 设计思路

    首先进行市场调研,了解虚拟家装的应用市场,确定所要建立的户型结构以及搜集相关的贴图素材。然后在3ds Max中进行建模并实现相应的渲染效果。在Unity3D中实现后期交互功能,并进行发布及性能的測试。

    3 设计与实现

    3.1 前期准备工作

    对整个虚拟家装市场进行调研,根据市场需求制定出相应的策划方案。同时通过书籍的查阅和互联网查询来收集相关贴图和模型素材,并下载相关软件,储备相关知识,为后期制作做好充分准备[3]。

    3.2 房屋模型的构建

    房屋模型构建过程分为三部分,房子的户型建立、门窗的建立、家具及电器模型的建立。

    房子的户型建立。首先在3D MAX设置毫米为基本单位。然后,将CAD户型图拖入3D MAX的透视图中,先描轮廓,并选择校准工具将描好的轮廓进行校准,使用捕捉工具将所有点的横坐标和纵坐标对齐到一个点上。将户型图描好并且校准之后,选中户型图,右键选择“转换为可编辑多边形”,然后选择“边”工具,随后选择“挤出”工具,将户型挤出为立体状,高度设置为2550mm,房屋的墙体则建立完毕。如图2所示。

    门窗的建立。在建立门模型时,为了整个门呈现动态,需要制作为打开的状态,首先要选中这个门,利用“捕捉”工具,将门旋转,并且移动到门框的边上,即可实现。如图3所示。在建立窗户时,关键在于玻璃材质的参数设置,为了渲染出逼真的玻璃效果,在这里要指定Vray渲染器并选用Vray材质。具体参数如下:漫反射设置为116,141,196;反射参数为22,22,22;反射高光为0.95;折射参数为200,200,200;折射光泽度为0.9。

    部分家具及电器模型的建立。为了在展示系统中呈现逼真的效果,家具的建模需要精细一些,对每个家具进行建模之前要了解其构造,进行有步骤有层次地建模过程。如图4所示是制作完成的椅子。

    3.3 模型的贴图重建

    在家具互动展示系统中,主要对以下四部分进行贴图:房屋内部墙体的贴图、门和窗户的贴图、所有的家具以及部分电器的贴图以及地面的贴图。贴图需要“材质编辑器”命令来实现。在3D MAX中可以执行“渲染”—“材质编辑器”命令,或者在主工具栏中单击“材质编辑器”命令按钮。目前材质编辑器有“材质编辑器”和“Slate材质编辑器”两种。在这里使用“精简材质编辑器”,然后将提前搜集好的贴图素材赋予不同的模型,实现最终的贴图效果。

    3.4 场景设计与相关脚本的编写

    将模型导入到unity中后,可能会存在贴图大量丢失等问题,这时就需要进行重新贴图。首先在assets文件夹的models文件夹下建立新的文件夹,命名为materials,然后把所有贴图素材放在文件夹里面,用英文名称命名。完成之后,将materials贴图文件夹复制到unity的根目录下,然后再导入由3D MAX生成的 fbx格式的文件,模型就自动恢复成先前的贴图。

    建模过程和贴图渲染过程结束后,需要在Unity3D中实现房屋漫游和交互效果。房屋漫游是第一人称摄像机的自由移动过程,在该过程的设置中要注意的是房屋和家具要设置“碰撞”效果,这样可以防止人物的“穿墙”效果和“掉落”现象。交互过程是用户和家具的交互,用户可以通过点击家具实现家具的简单移动和旋转[4]。而漫游和交互功能需要通过编写脚本代码来实现,脚本如下:

    1)漫游腳本:

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;

    public class MoveObject : MonoBehaviour {

    public Vector3 pos;

    public Quaternion rot;

    // Use this for initialization

    void Start () {

    pos = this.transform.position;

    rot = this.transform.rotation;

    }

    }

    2)交互效果脚本:

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;

    public class PlayerMovement : MonoBehaviour {

    public GameObject OBJECTS, PROPS, target, btn_quit;

    public Transform this_cam;

    public Rigidbody this_rigid;

    public EasyJoystick stick_move, stick_rotate;

    public bool isMobileControl = false, canMove = true;

    private Vector3 pos;

    private Quaternion rot;

    private float speed = 3.0f, sideSpeed = 1.5f;

    // Use this for initialization

    void Start () {

    pos = this.transform.localPosition;

    rot = this.transform.localRotation;

    }

    // Update is called once per frame

    void Update () {

    if (!isMobileControl)

    MovePlayer ();

    Shoot ();

    }

    private void MovePlayer(){

    if (canMove) {

    Screen.lockCursor = true;

    if (Input.GetKey (KeyCode.W)) {

    this.transform.Translate (Vector3.forward * speed * Time.deltaTime);

    } else if (Input.GetKey (KeyCode.S)) {

    this.transform.Translate (Vector3.back * speed * Time.deltaTime);

    }

    if (Input.GetKey (KeyCode.A)) {

    this.transform.Translate (Vector3.left * sideSpeed * Time.deltaTime);

    } else if (Input.GetKey (KeyCode.D)) {

    this.transform.Translate (Vector3.right * sideSpeed * Time.deltaTime);

    }

    } else {

    Screen.lockCursor = false;

    }

    }

    private void Shoot(){

    if (Input.GetMouseButtonDown (0)) {

    Ray ray = new Ray();

    RaycastHit hit;

    if (!isMobileControl) {

    ray = new Ray (this_cam.position, this_cam.forward);

    } else {

    ray = this_cam.transform.GetComponent ().ScreenPointToRay (Input.mousePosition);

    }

    if (Physics.Raycast (ray, out hit, 100.0f, ~(1 << 5))) {

    if (hit.collider.transform.GetComponent () != null) {

    target = hit.collider.gameObject;

    OBJECTS.SetActive (false);

    for (int i = 0; i < PROPS.transform.childCount; i++) {

    

    

    PROPS.transform.GetChild (i).gameObject.SetActive (false);

    }

    target.SetActive (true);

    btn_quit.SetActive (true);

    canMove = false;

    this_rigid.useGravity = false;

    this_rigid.isKinematic = true;

    stick_move.XAxisTransform = target.transform;

    stick_move.YAxisTransform = target.transform;

    stick_rotate.XAxisTransform = target.transform;

    stick_rotate.YAxisTransform = target.transform;

    } else if (hit.collider.tag == "UI") {

    return;

    }

    }

    }

    }

    public void QuitEditMode(){

    target.transform.position = target.transform.GetComponent ().pos;

    target.transform.rotation = target.transform.GetComponent ().rot;

    target = null;

    //this.transform.localPosition = pos;

    //this.transform.localRotation = rot;

    OBJECTS.SetActive (true);

    for (int i = 0; i < PROPS.transform.childCount; i++) {

    PROPS.transform.GetChild (i).gameObject.SetActive (true);

    }

    btn_quit.SetActive (false);

    canMove = true;

    this_rigid.useGravity = true;

    this_rigid.isKinematic = false;

    stick_move.XAxisTransform = this.transform;

    stick_move.YAxisTransform = this.transform;

    stick_rotate.XAxisTransform = this.transform;

    stick_rotate.YAxisTransform = this_cam;

    }

    }

    3.5 测试及发布

    功能实现后在工具欄中点击“播放”按钮进行场景的初步测试,观察模型与贴图是否符合实际情况[5]。保存之后,使用快捷键“CTRL+ALT+B”, 导出“EXE”文件。然后运行“EXE”文件,测试软件是否能够正常运行,同时注意内容是否完整以及所有的功能是否都能实现。在检查无误后,选择文件左上角的file工具栏,点击Build Settings,然后点击Android,把作品发布到Android手机上。

    4 总结

    本设计利用Auto CAD 、3ds MAX、Unity3D软件对家具展示系统App进行设计及开发,实现了家具的虚拟交互展示[6]。在后续开发中,可以使用VR眼镜,达到更好的沉浸式的漫游体验。基于Android平台的App应用程序,让使用者可以更生动和直观的展示家具工艺、造型、装饰等艺术风格。

    参考文献:

    [1] 石宁. 浅谈建筑施工管理创新策略[J]. 房地产导刊, 2015(34).

    [2] 赵鹏程. 虚拟现实中三维动画建模方法的研究[J]. 信息与电脑, 2016(19): 59-60.

    [3] 张姣姣, 董明治, 司占军. 儿童三维互动读物的设计与制作[J]. 电脑知识与技术, 2017.

    [4] 唐蕾, 林作新, 张亚池. 家具产品互动设计中的行为本质研究[J]. 家具与室内装饰, 2016(10): 20-23.

    [5] 董春侠, 司占军. 基于Unity3D的虚拟校园App设计与开发[J]. 软件导刊, 2017(2): 94-96.

    [6] 郭海新. 基于Unity3D的在线家具展示系统的实现[J]. 商情, 2017(47).

    

    

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/15 6:12:38