[发明专利]一种散货船配载仪中图示的显示方法有效
申请号: | 201510437985.9 | 申请日: | 2015-07-23 |
公开(公告)号: | CN104992470B | 公开(公告)日: | 2017-07-14 |
发明(设计)人: | 张东洋;王麟;孙霄峰;施建华;尹勇;华玮;东昉;王军;刘春雷;杨博;金一丞;唐稳;张秀凤;倪银钢;刘秀文;神和龙;任鸿翔;吴海波 | 申请(专利权)人: | 大连海事大学;上海船舶研究设计院 |
主分类号: | G06T19/00 | 分类号: | G06T19/00 |
代理公司: | 大连东方专利代理有限责任公司21212 | 代理人: | 李洪福 |
地址: | 116026 辽*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 散货 配载 图示 显示 方法 | ||
1.一种散货船配载仪中船舶三维图形的显示方法,所述的散货船配载仪包括数据库、三维显示模块、计算模块和界面显示模块;所述的数据库为计算模块和三维显示模块提供所需的船舶数据,所述的计算模块负责计算装载瞬时船舶的稳性、强度和浮态,所述的三维显示模块配合用户操作显示配载过程中各舱室货物装载量以及包括船舶吃水、横倾和纵倾的浮态信息的船舶整体三维模型,所述的界面显示模块为用户提供操作界面;其特征在于:所述的船舶三维图形显示方法,包括以下步骤:
A、转换三维模型格式
使用3ds Max建模软件打开从船舶设计单位得到的船舶和各个舱室精确的IGS格式的三维模型文件,直接转换成Unity3D引擎能够识别的FBX格式;
B、制作三维模型资源文件
使用Unity3D提供的BuildAssetBundle()函数,将由步骤A转换完成的船舶和各个舱室的FBX格式的三维模型文件制作成Unity3D能动态加载的船舶和各个舱室的三维模型资源文件;
C、Unity3D引擎发布的网页文件嵌入配载仪软件界面
使用ActiveX技术把Unity web player插件嵌入配载仪软件界面;
D、动态加载船舶和各个舱室的三维模型资源
使用Unity3D引擎提供的AssetBundle.LoadAll()函数动态加载船舶和各个舱室的三维模型资源文件;
E、切割舱室的三维模型
按每个舱室货物的装载高度将该舱室的三维模型切割为两个部分,Unity3D中三维模型是由三角网格构成的,三角网格为一个共享顶点和边的三角形列表,切割舱室的三维模型就是切割舱室的三维模型的三角网格,然后重新组织为两个三角网格,实现对舱室三维模型的切割;切割舱室的三维模型的方法如下:
E1、用三角形数组表示三角网格,设要进行切割的舱室的三角网格为三角形数组T[n],每一个三角形对应包含三个顶点Dn1、Dn2和Dn3;
E2、设切割平面为平面p,遍历三角形数组T[n],利用向量叉乘的值分别判断三角形的三个顶点在切割平面的哪一侧;根据结果把三角形分为三类:一类为三角形三个顶点都在平面p的上方,记为三角形数组Up[n];第二类为三角形三个顶点都在平面p的下方,记为三角形数组Dn[n];第三类为三角形三个顶点分布在平面p的两侧,记为三角形数组C[n];
E3、遍历三角形数组C[n]中的三角形,计算三角形的边与平面p相交的点,然后由原三角形的三个点与相交的点重新组成三角形:
X01=X0+(X1-X0)·Scale
Y01=Y0+(Y1-Y0)·Scale
Z01=Z0+(Z1-Z0)·Scale
X02=X0+(X2-X0)·SScale
Y02=Y0+(Y2-Y0)·SScale
Z02=Z0+(Z2-Z0)·SScale
把三个点组成的三角形添加到点所在的那一侧三角形数组,三个点组成的三角形和三个点组成的三角形都添加到异于点所在那一侧的三角形数组;三角形数组Up[n]和Dn[n]就是原舱室模型三角网格切割之后生成的两个部分的三角网格,实现对舱室三维模型的切割;
式中:和分别表示三角形数组C[n]中的三角形的三个顶点,X0、Y0、Z0分别表示点的X坐标、Y坐标、Z坐标,X1、Y1、Z1分别表示点的X坐标、Y坐标、Z坐标,X2、Y2、Z2分别表示点的X坐标、Y坐标、Z坐标,Xp、Yp、Zp分别表示点的X坐标、Y坐标、Z坐标,Xn、Yn、Zn分别表示点的X坐标、Y坐标、Z坐标,X01、Y01、Z01分别表示点的X坐标、Y坐标、Z坐标,X02、Y02、Z02分别表示点的X坐标、Y坐标、Z坐标;其中与其余两个顶点分布在切割平面p的两侧;是在切割平面p上的一点,是切割平面p的法线的终点,Scale表示切割平面p与连线的交点分割线段所成的比例,SScale表示切割平面p与连线的交点分割线段所成的比例,表示切割平面p与连线的交点,表示切割平面p与连线的交点;
F、设定舱室装货部分和未装货部分的显示颜色
步骤E根据舱室的货物装载高度切割该舱室的三维模型,把舱室的三维模型切割为两个部分,分别用蓝色和红色表示舱室装货部分和未装货部分;
G、显示船舶的吃水、横倾和纵倾变化后的船舶三维模型
三维显示模块中初始设定的船舶和舱室三维模型中心的位置为V0=(0,0,0)、船舶三维模型的旋转角度为R0=(0,0,0)、水线面的位置Vs=(0,0,0);根据计算模块计算出来的船舶吃水d的值,通过Unity3D引擎提供的Transform.Translate()函数改变船舶三维模型的位置,改变之后船舶三维模型的位置为V1=Transform.Translate(0,d,0);根据计算模块计算出来的船舶横倾h和纵倾t的值,通过Unity3D引擎提供的Quaternion.Euler()函数改变船舶三维模型的旋转角度,改变之后船舶三维模型的旋转角度为Rg=Quaternion.Euler(h,t,0);此时,三维显示模块中显示出船舶吃水d、纵倾t、横倾h平移和旋转后的船舶三维模型;
H、旋转显示船舶和舱室的三维模型
三维显示模块中初始设定的船舶三维模型的旋转角度R0=(0,0,0),船舶和舱室三维模型中心的位置V0=(0,0,0);以V0为原点,检测鼠标的移动获得旋转角度的改变量;设绕X轴旋转角度的改变量为rx,绕Y轴旋转角度的改变量为ry,以rx和ry作为参数,使用Unity3D引擎提供的Quaternion.Euler()函数,计算获得旋转之后船舶三维模型的旋转角度Ri=Quaternion.Euler(ry,rx,0),三维显示模块以旋转角度Ri显示船舶三维模型;
I、显示初始位置的船舶和舱室的三维模型
当检测到键盘上的H键被按下时,三维显示模块中记录按下键盘上H键这一时刻船舶和舱室的三维模型的位置Vh=(xh,yh,zh),通过Unity3D引擎提供的Transform.Translate()函数改变船舶和舱室的三维模型的位置,即将船舶和舱室的三维模型的位置改变到Vh1=Transform.Translate(-xh,-yh,-zh),此时船舶和舱室的三维模型回归于初始位置V0=(0,0,0);
J、消隐或者显示船舶和舱室的三维模型
当检测到用户要求隐藏船舶或舱室时,将Unity3D引擎提供的GetComponent<MeshRenderer>()函数的参数设为真;否则,将该函数的参数设为假。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大连海事大学;上海船舶研究设计院,未经大连海事大学;上海船舶研究设计院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510437985.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:压力机移动工作台导轨清理器
- 下一篇:汽车车灯壳的带有工装的环形涂胶台