虚拟实验室设计与实现

2018-05-15 08:31张庆高孙建刚王惠青崔利富彭永鹏
软件导刊 2018年4期
关键词:窗体第一人称漫游

张庆高 孙建刚 王惠青 崔利富 彭永鹏

摘 要:以虚拟教育为切入点,以土木工程专业拟静力试验为例,设计并实现了虚拟实验室系统。该系统采用3Ds Max、Photo Shop对实验室及实验材料、设备等进行建模和贴图,同时利用ADINA数值仿真分析软件对实验进行模拟,提取所需实验数据并保存到SQL数据库中,在Unity 3D平台使用.Net脚本语言实现对模型的控制操作。该系统解决了大型试验准备周期长、资源消耗大、不易操作等问题,最大限度地使学生参与整个实验过程,以掌握更多的知识和科研成果。

关键词:虚拟实验室;Unity 3D;.Net脚本

DOI:10.11907/rjdk.172686

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2018)004-0120-04

Abstract:This paper takes virtual education as the breakthrough point, designs and implements the virtual laboratory system by taking the civil engineering experiment as an example .The system uses 3Ds Max,PS to build model and pastes map about the laboratory, experimental materials, equipment and so on, meanwhile, it gets and saves the experimental data by ADINA in SQL Data Base , controls the models by .Net script language on the Unity 3D platform. The system solves the problems such as long period of preparation, large resource consumption and difficult operation, and it makes students most involved in the whole process of experiment tobetter understand more knowledge and scientific research.

Key Words:Virtual laboratory; Unity 3D; .Net script

0 引言

虚拟实验室是一种基于计算机技术,对实验过程还原并提供交互性的实验模式。虚拟实验室与远程教育特征非常相似,即都可以不受时间、地点约束,根据需要和时间进行自主学习。但相比远程教育,虚拟实验室可以让用户有更好的沉浸感、交互性及实时性[1]。虚拟实验室不仅改变了学习方式,还因其低廉的成本而备受青睐。虚拟实验可使学生系统地参与实验,快速掌握实验过程和步骤,实时交互性和漫游系统可让使用者对实验全方位了解。

虚拟现实与教育结合必须建立在教育理论基础上,促进教育事业发展[2]。本文以土木工程专业拟静力加载试验为例,设计了拟静力加载虚拟实验室。

1 系统总体设计

虚拟实验室系统由虚拟场景搭建、数据处理存储及功能实现等模块组成。如图1所示,系统利用3Ds Max三维建模技术及Photo Shop图片处理技术进行虚拟实验室、试验材料等场景搭建,结合ADINA有限元数值仿真分析软件进行数值仿真分析,将计算所得的数据在SQL数据库中保存,通过Unity 3D技术和.Net脚本实现虚拟实验室功能[3]。

2 虚拟场景搭建

虚拟场景搭建是虚拟实验室系统设计的核心内容,模型制作精细度、贴图真实度、光影调整以及周围环境的影响等都是需要考虑的重要因素。场景搭建分为3部分:①了解实验过程及实验仪器;②制作三维模型,进行贴图和导出工作;③导入Unity进行场景搭建。图2、图3为实验室加载装置实物图。

通过实际测量确定实验室和试验装置尺寸后,进行三维建模。建模使用3Ds Max和Photoshop组合,将建好的模型保存为FBX格式,导入到Unity 3D中,进行场景环境和灯光搭建[4]。建模效果如图4所示。

3 数据处理

虚拟试验系统的建立必须有实验数据支撑,从试验的加载到试验完成必须有数据显示和曲线生成。墙体拟静力试验,通过对有限元数值仿真分析软件(ADINA)和试验得出的数据比对,找到最优数据,一般以ADINA数值仿真分析软件提取的数据为主,建模过程如下:①點击Points,首先建立一个点,以点、线、面的形式建立物理模型;②点击Element Group,为模型分组。此处只有一个模型单元,使用3D实体单元;③点击Mesh Volumes,为模型划分网格。ADINA为有限元计算软件,网格划分越细,计算精度越高;④为模型添加材料,输入泊松比、密度、杨氏模量、应力应变曲线等材料信息;⑤添加计算Time Step和Time Function;⑥分别点击Apply Load和Apply Fixity按钮,为模型添加力和边界限制条件,墙体底面全固定,顶面分别施加一个竖向恒载和一个水平往复荷载[5]。

效果如图5所示,提取的数据加载到Excel中,最后导入SQL数据库,为后续的数据显示和曲线生成提供保证。

4 功能实现

功能实现即Unity 3D的场景整合、.Net脚本控制以及Winform窗体实现。.Net脚本主要实现三维模型在Unity 3D场景中的移动、隐藏及显示等,Winform窗体主要完成数据库的读取、数据显示、曲线生成以及实验报告修改下载等功能。

4.1 Unity 3D场景整合

将在3Ds Max中做好的模型导入到Unity 3D中,根据实验室场景进行摆放安置,同时利用UGUI的Text、Image、Raw Image、Button、Toggle、Slider、Scrollbar、DropDown、Input Field、Canvas、Panel、Scroll View等基础控件完成两个场景的UI界面设计,即进入场景(见图6)和实验场景(见图7)。

4.2 .Net脚本控制

.Net脚本控制,实现在Unity 3D中的动态控制和展示,包括实验室漫游和交互式实验操作等。

4.2.1 漫游功能

虚拟实验常见的漫游有3种:①第一人称漫游,在漫游过程中,借助键盘和鼠标的操作实现前进、后退、转向等操作,借助摄像机视角获取实验室信息。第一人称的沉浸感更强,能很好地把自己融入到实验场景中;②第三人称漫游,可以在实验室中设置一个人物,人机交互过程与第一人称漫游类似,不同的是,第三人称漫游可以看到人物和实验室操作情况,通过控制人物行为,以第三视角观察,更加清晰地看到实验的整体情况;③网格探路,通过点击场景内的路线、视角自动探路,通过一系列计算实现网格自动探路功能[6-7]。虚拟实验室主要以室内实验为主,因此采用第一人称漫游方式,对实验细节可以更好地观察分析。设置第一人称漫游,可根据实际需要,随时对实验过程近距离观察。为了增强虚拟实验室的真实感,可安装固定视角观看实验。鼠标控制方向,键盘W、S、A、D分别控制前后左右,将第一人加入刚体组件。第一人称漫游部分代码如下:

[RequireComponent(typeof (Rigidbody))]

[RequireComponent(typeof (CapsuleCollider))]

public class RigidbodyFirstPersonController : MonoBehaviour{

[Serializable]

public class MovementSettings{

public float ForwardSpeed = 8.0f; // 前移速度

public float BackwardSpeed = 4.0f; // 后移速度

public float StrafeSpeed = 4.0f; // 左右移动速度

public float RunMultiplier = 2.0f; // 加速度

public KeyCode RunKey = KeyCode.LeftShift;

public float JumpForce = 30f;

public AnimationCurve SlopeCurveModifier = new AnimationCurve(new Keyframe(-90.0f, 1.0f), new Keyframe(0.0f, 1.0f), new Keyframe(90.0f, 0.0f));

[HideInInspector] public float CurrentTargetSpeed = 8f;

#if !MOBILE_INPUT

private bool m_Running;

#endif

4.2.2 交互式实验操作功能

虚拟实验室人机交互操作包括材料尺寸的选择、实验准备、墙体吊装、监测设备安装、竖向荷载加持、往复荷载加持等步骤。操作过程如下:

(1)实验材料和尺寸選择。该过程在UI界面完成,本系统设置6种不同材料和尺寸的实验模具,通过不同场景实现相应选择。以 “砌块”选择为例,主要实现代码如下:

public void Click()

{

p0.SetActive(false);

if (Drop0.options[Drop0.value].text == "砌块" && Drop1.options[Drop1.value].text == "1360*890*236")

{

p1.SetActive(true);

(2)实验准备。实验模具的材料和尺寸确认后,开始实验准备阶段,显示要进行的实验墙体、分配量及混凝土垫板等,主要实现代码如下:

public GameObject wall;

public GameObject FenPL1;

public GameObject DianBan;

public void OnClick() {

wall.SetActive(true);

FenPL1.SetActive(true);

DianBan.SetActive(true);}

(3)开始实验。点击实验准备按钮后,场景固定摄像机视角如图8,场景中出现实验的墙体模具、分配梁以及混凝土垫板,准备进行实验。

墙体的吊装、分配量的移动、横向、纵向荷载加持原理相同,都是通过Translate方法实现的。仿真的荷载为横载,加载过程一次性完成。弹出加载窗体即Winform窗体,窗体中显示荷载大小及力-时间曲线等荷载信息。Translate实现代码如下:

using UnityEngine;

using System.Collections;

public class WallTrans1 : MonoBehaviour {

public float speed = 30;

void Update(){

float step = speed * Time.deltaTime;

gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, new Vector3(1861.3f, 60.1f, 1370.2f), step);}}

4.3 Winform窗體实现

Winform窗体主要包括虚拟实验室的加载机制及实验报告编写窗体。窗体在Visual Studio 2010开发环境中完成,界面仿照北京佛力系统公司的加载系统设计,包括加载、暂停、结束、保存数据等按钮以及曲线显示模块等[8],如图9、图10所示。

5 结语

虚拟实验室以Unity 3D为主要开发环境,结合3Ds Max建模技术、Photo Shop图像处理技术、Adina数值仿真分析技术以及.Net开发技术,将实验过程模拟仿真,学生通过电脑中的虚拟实验室就可以完成教学实验,了解大型科研实验过程及相应科研成果。虚拟实验室可反复进行试验,节约了大量花费,为虚拟现实技术以及Unity 3D技术在教育、科研方面应用提供了一定的技术支撑。

参考文献:

[1] 汪明.工程制图虚拟实验室的设计与研究[D].绵阳:西南科技大学,2016.

[2] 史铁军.虚拟现实在教育中的应用[D].沈阳:东北师范大学,2008.

[3] 蒋德志,姚文龙,张均东.Unity 3D虚拟现实技术在机舱资源管理模拟器开发中的应用[J].中国航海,2015,38(3):14-17.

[4] 牛庆丽,薛焕堂,黄海林.基于Unity 3D的黄河风景名胜区虚拟漫游的实现[J].电脑知识与技术,2015,11(20):149-154.

[5] 孙建刚,崔利富,王振,等.藏族民居砌体材料物理力学性能试验研究[J].大连民族学院学报,2015,17(1):61-64.

[6] LU G P, XUE G H, CHEN Z. Design and implementation of virtual interactive scene based on unity 3D[J]. Advanced Materials Research,2011,1380(317):116-119.

[7] LIANG S. Design and implementation of virtual roaming based on unity3D[J]. Advanced Materials Research,2015,37(16):1079-1121.

[8] 王开宇.基于C#的数据与视频监控上位机软件设计[J].现代电子技术,2017,40(10):62-63.

(责任编辑:杜能钢)

猜你喜欢
窗体第一人称漫游
试谈Access 2007数据库在林业档案管理中的应用
汉代铜镜铭文中的第一人称
NASA漫游记
巧设WPS窗体控件让表格填写更规范
“我”最初是古代兵器
边走边看:漫游海底 梦想成真
WinCE.net下图形用户界面的开发