智能家居虚拟场景设计与实现
扫描二维码
随时随地手机看文章
引言
随着“物联网”技术的飞速发展和信息时代的到来,智能家居作为物联网技术的一个实际运用,将成为未来二十年内一个新的经济增长[%虚拟现实技术近几年越来越受到各行各业的关注,已开始从实验室走向研究项目走向实际的应用,在军事、航天、建筑设计、旅游、医疗和文化娱乐及教育方面已有不少应用[气虚拟现实技术让用户可以对虚拟世界进行体验和交互作用,体验到二维动画所不具备的现场沉浸感叫
Unity3D作为一款新兴的多平台游戏开发软件,能够实时地处理场景中的各种模型叫本文主要是通过Unity3D技术创建一种全新的智能家居虚拟场景,实现了虚拟与现实的融合。虚拟场景改变了以前智能家居系统二维的人机交互界面,通过三维场景,非常容易便捷地控制虚拟设备和真实设备,增加了用户的交互性。虚拟场景的设计有助于智能家居的培训和展示,让用户通过远程操作也可以体验到真实的智能家居系统。
2系统整体结构
虚拟场景中的模型通过3DMax2012完成建模和贴图。用户可以在场景中通过鼠标和键盘自由移动和操作虚拟人,实现在场景中自由漫游,然后通过点击平板电脑,出现的交互式界面可以控制虚拟场景中灯光、风扇、空调和电视等家电设备。也能够看到虚拟场景中各种传感器的值,达到场景监控的目的。通过网络编程可以实现虚拟和现实的交互,Socket套接字发送智能家居实验室自主研发的协议到服务器,能够实现真实设备控制,并接收到真实传感器发回给虚拟场景中各种传感器的值,真正实现虚拟和现实的融合。智能家居虚拟场景的总体设计思路如图1所示。
从图1中可以看出,第一步就是对智能家居系统中各种模型数据采集,通过3D建模软件建立需要的模型,将贴图附着到建立好的模型上面,使模型更加具有真实感。人机交互设计是本系统的核心与难点,通过脚本的编写,完成控制界面的设计。用户通过发送消息指令,通过编程实现消息的捕捉,Unity3D中通过对主摄像机的控制,实现虚拟场景中的漫游。
3三维模型的构建
智能家居室内设计是虚拟场景中的主体部分,室内的建模主要运用的是形体构造表示的原理,使用建模工具3DMax
2012版从形状和结构上对家居室内部进行模拟设计。
室内设计的实现方案是根据室内设计规划方案,逐步分解和拆分为容易构造的简单模型,之后进行相交集合运算形成复杂的各种模型,同时采用材质纹理映射等辅助技术手段,以增加模型的真实感[5]。其具体步骤如下[6]:
获得建模数据;
确定模型的层次结构;
进行可视建模过程;
去除冗余多边形;
使用纹理映射。
通过上述的建模步骤能够得到如图2所示的智能家居室内的各种模型,包括家具、家电、传感器等模型。通过把建好的模型导出为.FBX文件格式,然后在Unity3D中导入建好的模型。
4虚拟场景控制与交互
4.1风扇和空调的控制
要控制风扇和空调,首先我们得了解transform这个类,然后再通过旋转函数Rotate控制旋转的速度。调整虚拟场景中的风扇模型和空调模型,首先调整好风扇扇叶和空调扇叶的X),,的坐标,方便调整扇叶旋转的方向:
transform.Rotate(Vector3.down*30,Space.Self)://通过旋转扇叶来控制电扇
i.Rotate(Vector3.right*40*Time.deltaTime)://通过控制空调扇叶来控制空调
4.2灯光的控制
灯光的控制首先要在灯光模型上面添加一个点光源pointlight,然后对这个点光源的属性进行修改,一般都是修改光照的范围、光照强度和颜色这几个属性,最后所编的C#脚本语言如下:
publicvoidSetLightState(boolstate)
{
if(state)
{
light.enabled=true://使灯开
}
else
{
4.3电视控制
要实现电视的实时播放,首先要将视频源拷贝到Assets文件夹里面,然后确保拷进来的视频源能够被U3D播放出来。一般将视频源附着到一个新建的平面上,然后通过增加这个物体的Material材质,并且将Movie视频文件给贴图,开始时画面是黑色,视频启动之后画面变成白色,就能正常播放视频文件了[7]。最后的代码如下:
voidStart(){
//将视频附给添加的材质
renderer.material.mainTexture=mMovie
//让视频可以循环播放
mMovie.loop=true
}
voidUpdate(){
}
publicvoidOPenTV()
{
//视频播放时材质为白色
renderer.material.color=Color.white
mMovie.Play。;//播放视频
}
publicvoidCloseTV()
{
//视频关闭时材质为白色
renderer.material.color=Color.black
mMovie.Stop();//关闭视频
}
4.4人机交互
Unity3D展示模型时,用户通过人机交互界面,即可以控制场景中的各种家电设备,也可以实时监测家里面各种传感器的值。通过交互式展示智能家居中的各种设备,让用户对我们的系统有更加深入的了解,方便推广整个智能家居系统。创建完成之后的交互界面如图3所示,下面就是创建交互界面代码(里面通过Socket套接字实现虚拟与现实的实时控制):
voidControlFace()
{
//定义变量
intoff=100,height=30,wide=150
//初始化边框
Rectr=newRect(off,0,wide,height)
//制作IP地址的文本框
mIP=GUI.TextArea(r,mIP);
r.x+=wide;
//制作端口号的文本框mPort=GUI.TextArea(r,mPort);
//接收新的IP地址
mSocket.mIPSend=mIP;
//接收新的端口号
mSocket.mPort二mPort;
r.x=off;
r.y+=height;
if(GUI.Button(r,"开灯"))〃button
{
//获得灯的组件,控制虚拟场景中的灯光lightcontrol
1二mLight.GetComponent<
lightcontrol>();
//控制虚拟场景中的灯光
l.SetLightState(true);
//套接字控制真实场景中的灯光mSocket
ChangeLightState(true);
}
//其他的按键同开灯一样
}
5虚拟场景漫游
本文漫游的具体实现过程是将主摄像机附着在虚拟人上,可以通过第一视角来达到漫游的目的,通过鼠标左键来改变视角,鼠标的滚轮来控制视角的远近。虚拟人主要是通过插件导入到场景中去,我们对虚拟人进行动作的设计,主要有走、跑、跳和空闲等几个基本的动作,要达到漫游的目的这几个动作完全能够实现。具体漫游如图4和图5所示。虚拟漫游代码如下:
voidUpdate(){
//定义物体的坐标
transform.position=mFollowTrans.position;
//按下左键
if(Input.GetMouseButton(1)){
//x轴上旋转
transform.Rotate(Vector3.up*Input.GetAxis("MouseX")*mRotSpeed,Space.World);
transform.Rotate(Vector3.left*Input.GetAxis("MouseY")*mRotSpeed);//y轴上面旋转}
floatf=Input.GetAxis("MouseScrollWheel");
mCamera.localPosition二newVector3(0,mHight,-mDistance);
mCamera.localRotation二Quaternion.identity;//前后距离的调整
mDistance-=f;
这样就能够在虚拟场景中自由切换视角的左右和前后,虚拟人在虚拟场景中能够自由控制观察物体的角度,更加具有真实感和沉浸感。
本文简要描述了Unity3D在室内漫游和人机交互设计中的强大功能,讨论了如何将建立完成的模型导入到Unity3D建好的场景中来。Unity3D能够完成更多的场景设计,例如主摄像机、灯光、天空盒等场景中必备的物体。实现了通过人机交互界面来控制虚拟场景中和现实生活中智能家居系统的各种设备,也能实时监控传感器的值,真正实现了虚拟与现实的结合。随着客户要求的不断提升,使得我们整个智能家居系统必须做得更加完善。因此我们的智能家居虚拟场景也应该做得更加有真实感和实时相结合,各方面的功能更加完善,交互界面更加友好。相信虚拟场景将会成为展示智能家居系统的主要手段之一。
20211120_6197d8248aa83__智能家居虚拟场景设计与实现