一种可动态自定义3D模型尺寸的系统和方法与流程

文档序号:11234961阅读:525来源:国知局
一种可动态自定义3D模型尺寸的系统和方法与流程

本发明涉及一种对3d模型的尺寸可动态变更的3d虚拟现实建模方法,尤其涉及到一种可动态自定义3d模型尺寸的系统和方法,在居室3d模型中对家具3d模型的长宽高的尺寸进行动态修改后,其对应的3d模型会根据修改后的最新尺寸进行重新渲染的方法。



背景技术:

随时人们追求更加逼真的虚拟现实的体验欲望的强烈,3d的虚拟现实技术也随之普及。在3d模型设计过程中,时常需要对3d模型的尺寸进行修改。对于3d模型的尺寸修改在现有3d设计软件中已支持的很好,如:3dmax等,但是这些技术方案存在以下两个问题:

(1)现有技术中,只支持基于3d模型在坐标系中的坐标尺寸修改,但用户想要的是基于现实世界中真实的尺寸进行修改;因此,现有技术都是通过人工将现实中的真实尺寸转换为3d模型坐标尺寸,再根据3d模型坐标尺寸进行修改;这种将现实世界的尺寸与虚拟世界中的坐标尺寸的转换是一个3d坐标映射过程,这就需要使用者有一定的3d数学以及3d设计的知识,这无疑增加了3d模型的尺寸修改的难度,不利于在互联网技术中推广;

(2)现有技术中,当3d模型的坐标尺寸修改都是基于其obb的中心点进行缩放的,尤其涉及尺寸修改后,3d模型就有可能出现陷入支撑模型或悬空的现象,因此,仍需要再次通过人工对其进行平移;这种方式会导致需要人工反复调整位置并且最终的3d模型的位置仍可能存在一定的误差;

在现有的居室3d模型建模技术中,因为上述问题无法得到很好的解决,因此一些非专业的3d设计软件索性就不支持3d模型尺寸修改的功能了,以致3d模型一旦被加载,其尺寸就再也无法变更,导致因3d模型的尺寸固定而无法满足真实世界的模拟需求,因此一旦因为尺寸不一致的3d模型就需要重新创建一个新的3d模型进行重新加载,整个过程效率低下,以致无法满足用户diy的3d建模的需求。



技术实现要素:

1.发明要解决的技术问题

针对现有技术中所提及的在居室3d模型建模中,3d模型的尺寸修改需要通过人工将现实中的真实尺寸转换为3d模型坐标尺寸进行修改以及修改尺寸后经常需要再次通过人工对其反复调整位置的问题,导致其操作十分繁琐的问题,对人工浪费极大,本发明提供一种可动态自定义3d模型尺寸的系统和方法,即在居室3d模型中对家具3d模型的现实世界的长宽高的尺寸进行动态修改后,其对应的3d模型会自动修改其坐标系统尺寸并自动对其平移的方法。

2.技术方案

本发明对可动态自定义3d模型尺寸的系统和方法的技术方案进行了充分公开,其技术方案如下:

对可动态自定义3d模型尺寸的系统,包括4个模块,即3d模型记录器、3d模型实际尺寸设置器、3d模型节点坐标计算器和3d模型渲染器;

3d模型记录器:记录3d模型的对象信息,3d模型的对象信息包括:

(1)3d模型各节点的坐标;

(2)3d模型的obb包围盒长高宽;假设3d模型在刚被加载时对应obb包围盒的长高宽的标尺线分别与x、y、z坐标轴平行,则平行于x轴的标尺线段在x轴上的投影线段长度即为3d模型的长,平行于y轴的标尺线段在y轴上的投影线段长度即为3d模型的高,平行于z轴的标尺线段在z轴上的投影线段长度即为3d模型的宽;

(3)3d模型的obb包围盒分别在x、y、z轴上的旋转角度;假设3d模型刚被加载时对应obb包围盒的长高宽的标尺线分别与x、y、z坐标轴平行,则在x、y、z轴上的旋转角度皆为0,后续可以对其分别按x轴或y轴或z轴进行旋转,其旋转的角度即为在对应坐标轴上的旋转角度;

(4)3d模型的obb包围盒中的平移参考点坐标;平移参考点可以是3d模型的obb包围盒中的任意一点,但在房屋的场景中,一般以与支撑物相接触的3d模型的obb包围盒的那个面的中心点作为平移参考点;

(5)3d模型在现实世界中的实际长高宽;此实际长高宽的值一般通过预先设置,在3d模型加载时,一并与3d模型其他信息一并读入;

3d模型实际尺寸设置器:从3d模型记录器获取对应的3d模型的对象信息,并对其现实世界中的尺寸进行设置;然后将设置前的3d模型的对象信息以及设置后的实际尺寸一并传输给3d模型节点坐标计算器;

3d模型节点坐标计算器:根据从3d模型实际尺寸设置器中获取的设置前的3d模型的对象信息以及设置后的实际尺寸计算变更后的3d模型各节点的坐标;并将变更后的3d模型各节点的坐标传输给3d模型记录器,以更新对应的3d模型的对象信息;

3d模型渲染器:根据从3d模型记录器获取3d模型的对象信息对3d模型进行绘制。

可动态自定义3d模型尺寸的方法,其步骤包括:

步骤1.初始化3d模型的对象信息:3d模型记录器记录了3d模型的对象信息包括:3d模型各节点的坐标,3d模型的obb包围盒长高宽,3d模型的obb包围盒在x、y、z轴上的旋转角度,3d模型的obb包围盒中的平移参考点坐标,以及3d模型在现实世界中的实际长、高、宽;

步聚2.设置3d模型现实世界的尺寸:3d模型实际尺寸设置器从3d模型记录器找到对应的3d模型对象(寻找的方式可以但不限于:通过3d模型唯一标识唯一定位到某一3d模型或者通过obb包围盒的各节点的坐标唯一定位到某一3d模型),假设此3d模型对象为objecta,并对此3d模型objecta的现实世界中的长度或者宽度或者高度的尺寸进行设置;然后将设置前的3d模型的对象信息以及设置后的实际尺寸一并传输给3d模型节点坐标计算器;

步聚3.计算3d模型变更后的各节点坐标:

第一步:计算长宽高的缩放比例值。3d模型节点坐标计算器从3d模型实际尺寸设置器中获取3d模型objecta的设置前的3d模型的对象信息以及设置后的实际尺寸,并根据更新后的3d模型现实世界中的长宽高的尺寸与更新前的3d模型现世界中的长宽高对应的尺寸分别计算缩放比例值,假设长度的缩放比例值为kl,假设宽度的缩放比例值为kw,假设高度的缩放比例值为kh;

长度的缩放比例值kl=更新后的3d模型现实世界中的长度除以更新前的3d模型现实世界中的长度;比例值kl取值为正实数,如果更新后与更新前的长度相同,则kl=1;

宽度的缩放比例值kw=更新后的3d模型现实世界中的宽度除以更新前的3d模型现实世界中的宽度;比例值kw取值为正实数,如果更新后与更新前的宽度相同,则kw=1;

高度的缩放比例值kh=更新后的3d模型现实世界中的高度除以更新前的3d模型现实世界中的高度;比例值kh取值为正实数,如果更新后与更新前的高度相同,则kh=1;

第二步:将3d模型中的参考点平移到坐标原点。假设3d模型objecta对应的参考点坐标为(xc,yc,zc),xc和yc以及zc分别是参考点在x轴、y轴、z轴上的坐标值,全文相同。则参考点平移到坐标原点时在x轴、y轴、z轴上分别需要平移的向量坐标为-xc、-yc以及-zc。假设3d模型objecta的对象信息中的所有节点坐标为node_group_old,从节点坐标node_group_old中挨个取节点坐标,假设获取的节点坐标为(xo,yo,zo),假设此获取的节点跟随参考点平移后的坐标为(xt1,yt1,zt1),即在x轴上的xt1的坐标值=xo-xc,在y轴上的yt1的值=yo-yc,在z轴上的zt1的值=zo-zc;最终得到所有节点平移到坐标原点的坐标,假设此时平移后的3d模型的坐标为node_group_t1;

第三步:将3d模型的obb包围盒将长高宽的标尺线分别旋转至与x、y、z轴平行。假设当前的3d模型objecta的obb包围盒围绕y轴逆时针偏移角度为α、围绕z轴的逆时针偏移角度为β,围绕x轴的逆时针偏移角度为γ;从3d模型平移后的节点坐标node_group_t1中挨个取节点坐标(xt1,yt1,zt1),并对此节点坐标分别按y轴以顺时针偏移角度α旋转和按z轴以顺时针偏移角度β旋转以及按x轴以顺时针偏移角度γ旋转(节点坐标以坐标原点进行旋转的算法在现有技术中已公开,此处不再赘述),假设此节点旋转的坐标为(xr1,yr1,zr1),最终得到所有节点旋转到与坐标轴平行的坐标,假设此时3d模型旋转后的坐标为node_group_r1;

第四步:将3d模型的节点坐标分别在x、y、z轴上进行缩放。从3d模型旋转后的节点坐标node_group_r1中挨个取节点坐标(xr1,yr1,zr1),并对此节点坐标按比例值进行缩放,假设缩放后的节点坐标为(xk1,yk1,zk1),因为旋转后的3d模型的obb包围盒的长高宽的标尺线分别与x、y、z轴平行,因此,在x轴上的xk1的值=xr1乘以长度缩放比例值kl,在y轴上的yk1的值=yr1乘以高度缩放比例值kh,在z轴上的zk1的值=zr1乘以宽度缩放比例值kw;最终得到所有节点缩放后的坐标,假设此时3d模型缩放后坐标为node_group_k1;

第五步:将3d模型以参考点为中心再旋转到旋转前的角度。从3d模型缩放后的节点坐标node_group_k1中挨个取节点坐标(xk1,yk1,zk1),并对此节点坐标分别围绕y轴逆时针偏移角度α旋转和围绕z轴逆时针偏移角度β旋转以及围绕x轴以逆时针偏移角度γ旋转(节点坐标以坐标原点进行旋转的算法在现有技术中已公开,此处不再赘述),假设此节点旋转的坐标为(xr2,yr2,zr2),假设此时3d模型旋转后的坐标为node_group_r2;

第六步:将3d模型以参考点为中心再平移到平移前的位置;从节点坐标node_group_r2中挨个取节点坐标(xr2,yr2,zr2),假设此获取的节点平移到平移前的坐标为(xt2,yt2,zt2),在x轴上的xt2的值=xr2+xc,在y轴上的yt2的值=yr2+yc,在z轴上的zt2的值=zr2+zc;最终得到所有节点平移到平移前的坐标,假设此时3d模型平移后的坐标为node_group_t2,最后将所有节点平移到平移前的坐标node_group_t2传输给3d模型记录器,以更新对应的3d模型的对象信息;

另,以上步骤中提涉的“先根据参考点平移至坐标原点的位移对3d模型各节点进行平移,然后以原点为旋转中心分别按x轴、y轴、z轴的偏移角度进行旋转”的技术方向等同于“先以参考点为旋转中心分别按x轴、y轴、z轴的旋转角进行旋转,然后根据参考点平移至坐标原点的位移对3d模型各节点进行平移”;因此,不管是“先平移后旋转”还是“先旋转后平移”的技术方案部落在本发明的技术方案中;

步骤4.绘制3d模型。3d模型渲染器从3d模型记录器中获取3d模型的对象信息,并根据3d模型对象信息中更新后的节点坐标node_group_t2绘制3d模型(3d模型绘制的具体技术方案在现有技术中已有公开,本发明不再赘述);

上述的步骤4与步骤2或者步骤3没有严格的先后次序。

3.有益效果

现有技术中,随时人们追求更加逼真的虚拟现实的体验欲望的强烈,3d的虚拟现实技术也随之普及。尤其在居室3d模型建模技术中,3d模型的尺寸修改需要通过人工将现实世界中的真实尺寸转换为3d模型坐标尺寸进行修改以及修改尺寸后经常需要再次通过人工对其进行平移的问题,整个过程效率低下,以致无法满足普通用户diy的3d建模的设计需求。本发明的一种对3d模型的尺寸可动态变更的方法的创新性具体体现在:

本发明提供了3d模型节点坐标计算器,此模块有两大优点,具体如下:

本模块提供了一种3d模型的对应实物在现实世界中的尺寸与其在3d坐标系中的虚拟尺寸的自动关联的方法,并通过用户对现实世界的真实长宽高尺寸的设置,根据此关联信息自动将被更新后的现实世界的真实尺寸转换为3d模型在3d坐标中虚拟尺寸,并对3d模型各节点坐标自动进行平移各缩放等操作,以达到对3d模型按长宽高进行自动缩放的效果,解决了现有技术中3d模型的尺寸修改需要通过人工将现实世界中的真实尺寸转换为3d模型坐标尺寸进行修改的问题,以达到用户只需关注3d模型对应真实世界中的尺寸不再需要关注3d模型在3d坐标系中的虚拟尺寸。

本发明提供一种对3d模型按参考点进行缩放的方法,即依据对家具3d模型的平移参考点坐标保持不变、对3d模型的长宽高的尺寸进行自动缩放的方法,解决了修改尺寸后经常导致3d模型嵌入或悬浮于支撑物以致需要再次通过人工对其进行平移的问题,以达到只需要在与支撑物接触的3d模型obb包围盒的面上选择参考点,即可实现缩放后的3d模型的原obb包围盒的接触面仍与支撑物保持接触,即实现缩放后的3d模型不再嵌入或悬浮于支撑物的问题;

综上,本发明提供的可动态自定义3d模型尺寸的方法,简化了人工的参与,即降低了用户的操作成本,大大提升了用户对3d模型的操作体验。

附图说明

图1为本发明的尺寸变更后3d模型进行缩放示意图;

图2为本发明所涉及的标尺线示意图;

图3为本发明所涉及的系统模块图;

图4为本发明的算法流程图。

具体实施方式

实施例1:

以对安放在地面上的桌子3d模型的现实尺寸缩放为例

下面结合图1-4对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。

对可动态自定义3d模型尺寸的系统,包括4个模块,即3d模型记录器、3d模型实际尺寸设置器、3d模型节点坐标计算器和3d模型渲染器;涉及各模块的简要技术如下:

3d模型记录器:记录3d模型的对象信息,3d模型的对象信息包括:

1)3d模型各节点的坐标;

2)3d模型的obb包围盒长、高、宽;假设3d模型在刚被加载时对应obb包围盒的长高宽的标尺线分别与xyz坐标轴平行,则平行于x轴的标尺线段在x轴上的投影线段长度即为3d模型的长,平行于y轴的标尺线段在y轴上的投影线段长度即为3d模型的高,平行于z轴的标尺线段在z轴上的投影线段长度即为3d模型的宽;

3)3d模型的obb包围盒在x、y、z轴上的旋转角度;假设3d模型刚被加载时对应obb包围盒的长高宽的标尺线分别与xyz坐标轴平行,则在xyz轴上的旋转角度皆为0,后续可以对其分别按x轴或y轴或z轴进行旋转,其旋转的角度即为在对应坐标轴上的旋转角度;

4)3d模型的obb包围盒中的平移参考点坐标;平移参考点可以是3d模型的obb包围盒中的任意一点,但在房屋的场景中,一般按与支撑物相接触的3d模型的obb包围盒的那个面的中心点作为平移参考点;

5)3d模型在现实世界中的实际长高宽;此实际长高宽的值一般通过预先设置,在3d模型加载时,一并与3d模型其他信息一并读入;

3d模型实际尺寸设置器:从3d模型记录器获取对应的3d模型的对象信息,并对其现实世界中的尺寸进行设置;然后将设置前的3d模型的对象信息以及设置后的实际尺寸一并传输给3d模型节点坐标计算器;

3d模型节点坐标计算器:根据从3d模型实际尺寸设置器中获取的设置前的3d模型的对象信息以及设置后的实际尺寸计算变更后的3d模型各节点的坐标;并将变更后的3d模型各节点的坐标传输给3d模型记录器,以更新对应的3d模型的对象信息;

3d模型渲染器:根据从3d模型记录器获取3d模型的对象信息对3d模型进行绘制。

可动态自定义3d模型尺寸的方法,其步骤包括:

步骤1.初始化3d模型的对象信息。3d模型记录器记录了对象信息包括:3d模型各节点的坐标,3d模型的obb包围盒长高宽,3d模型的obb包围盒在xyz轴上的旋转角度,3d模型的obb包围盒中的平移参考点坐标,以及3d模型在现实世界中的实际长高宽;

步聚2.设置3d模型现实世界的尺寸。3d模型实际尺寸设置器从3d模型记录器找到桌子3d模型对象(寻找的方式可以但不限于:通过3d模型唯一标识唯一定位到某一3d模型或者通过obb包围盒的各节点的坐标唯一定位到某一3d模型),假设此3d模型对象为objecta,并对此桌子3d模型objecta的现实世界中的长度或者宽度或者高度的尺寸进行设置;然后将设置前的桌子3d模型信息以及设置后的实际尺寸一并传输给3d模型节点坐标计算器;

步聚3.计算3d模型变更后的各节点坐标。

第一步:计算长宽高的缩放比例值。3d模型节点坐标计算器从3d模型实际尺寸设置器中获取桌子3d模型objecta的设置前的3d模型的对象信息以及设置后的实际尺寸,并根据更新后的桌子3d模型现实世界中的长宽高的尺寸与更新前的3d模型现世界中的长宽高对应的尺寸分别计算缩放比例值。假设长度的缩放比例值为kl,假设宽度的缩放比例值为kw,假设高度的缩放比例值为kh;

长度的缩放比例值kl=更新后的3d模型现实世界中的长度除以更新前的3d模型现实世界中的长度;比例值kl取值为正实数,如果更新后与更新前的长度相同,则kl=1;假设更新后的3d模型现实世界中的长度1.5米,更新前的3d模型现实世界中的长度3米,则kl=0.5;

宽度的缩放比例值kw=更新后的3d模型现实世界中的宽度除以更新前的3d模型现实世界中的宽度;比例值kw取值为正实数,如果更新后与更新前的宽度相同,则kw=1;假设更新后的3d模型现实世界中的宽度1米,更新前的3d模型现实世界中的宽度1米,则kw=1;

高度的缩放比例值kh=更新后的3d模型现实世界中的高度除以更新前的3d模型现实世界中的高度;比例值kh取值为正实数,如果更新后与更新前的高度相同,则kh=1;假设更新后的3d模型现实世界中的高度1米,更新前的3d模型现实世界中的高度0.5米,则kh=2;

第二步:将3d模型中的参考点平移到坐标原点。假设桌子3d模型objecta对应的参考点坐标为(xc,yc,zc),xc和yc以及zc分别是参考点在x轴、y轴、z轴上的坐标值,假设y轴坐标为0表示地面的坐标,则在地面上的参考点坐标假设为xc=0.5,yc=0,zc=0.5。则参考点平移到坐标原点时在x轴、y轴、z轴上分别需要平移的向量坐标为-xc、-yc以及-zc。假设桌子3d模型objecta的对象信息中的所有节点坐标为node_group_old,从节点坐标node_group_old中挨个取节点坐标,假设从支撑面上获取的节点坐标为xt2,yt2,zt2,xo=1,yo=0,zo=2,,假设此获取的节点跟随参考点平移后的坐标为(xt1,yt1,zt1),即在x轴上的xt1的坐标值=xo-xc=0.5,在y轴上的yt1的值=yo-yc=0,在z轴上的zt1的值=zo-zc=1.5;最终得到所有节点平移到坐标原点的坐标,假设此时平移后的桌子3d模型的坐标为node_group_t1;

第三步:将3d模型的obb包围盒按长高宽的标尺线分别旋转至与xyz轴平行。假设当前的桌子3d模型objecta的obb包围盒围绕y轴逆时针偏移角度为α、围绕z轴的逆时针偏移角度为β,围绕x轴的逆时针偏移角度为γ,假设α=90,β=0,γ=0;从桌子3d模型平移后的节点坐标node_group_t1中挨个取节点坐标(xt1,yt1,zt1),并对此节点坐标分别按y轴以顺时针偏移角度α旋转和按z轴以顺时针偏移角度β旋转以及按x轴以顺时针偏移角度γ旋转(节点坐标以坐标原点进行旋转的算法在现有技术中已公开,此处不再赘述),假设此节点旋转的坐标为(xr1,yr1,zr1),则xr1=-1.5,yr1=0,zr1=0.5,最终得到所有节点旋转到与坐标轴平行的坐标,假设此时桌子3d模型旋转后的坐标为node_group_r1:

第四步:将3d模型的节点坐标分别在x、y、z轴上进行缩放。从桌子3d模型旋转后的节点坐标node_group_r1中挨个取节点坐标(xr1,yr1,zr1),并对此节点坐标按比例值进行缩放,假设缩放后的节点坐标为(xk1,yk1,zk1),因为旋转后的桌子3d模型的obb包围盒的长高宽的标尺线分别与x、y、z轴平行,因此,在x轴上的xk1的值=xr1乘以长度缩放比例值kl=-1.5*0.5=-0.75,在y轴上的yk1的值=yr1乘以高度缩放比例值kh=0*2=0,在z轴上的zk1的值=zr1乘以宽度缩放比例值kw=0.5*1=0.5;最终得到所有节点缩放后的坐标,假设此时桌子3d模型缩放后坐标为node_group_k1;

第五步:将3d模型以参考点为中心再旋转到旋转前的角度。从桌子3d模型缩放后的节点坐标node_group_k1中挨个取节点坐标(xk1,yk1,zk1),并对此节点坐标分别围绕y轴逆时针偏移角度α旋转和围绕z轴逆时针偏移角度β旋转以及围绕x轴以逆时针偏移角度γ旋转(节点坐标以坐标原点进行旋转的算法在现有技术中已公开,此处不再赘述),假设此节点旋转的坐标为(xr2,yr2,zr2),xr2=0.5,yr2=5,zr2=0.75,,假设此时桌子3d模型旋转后的坐标为node_group_r2;

第六步:将3d模型以参考点为中心再平移到平移前的位置;从节点坐标node_group_r2中挨个取节点坐标(xr2,yr2,zr2),假设此获取的节点平移到平移前的坐标为(xt2,yt2,zt2),在x轴上的xt2的值=xr2+xc=0.5+0.5=1,在y轴上的yt2的值=yr2+yc=0+0=0,在z轴上的zt2的值=zr2+zc=0.75+0.5=1.25;最终得到所有节点平移到平移前的坐标,假设此时桌子3d模型平移后的坐标为node_group_t2,最后将所有节点平移到平移前的坐标node_group_t2传输给3d模型记录器,以更新对应的桌子3d模型的对象信息;

桌子3d模型在支撑面上的节点坐标(xo,yo,zo)被缩放后的坐标为(xt2,yt2,zt2),即(1,0,1.25),可以看出缩放的节点坐标仍在支撑面上,即没有产生嵌入或悬浮的问题;

步骤4.绘制3d模型。3d模型渲染器从3d模型记录器中获取桌子3d模型对象信息,并根据桌子3d模型的对象信息中更新后的节点坐标node_group_t2绘制3d模型(3d模型绘制的具体技术方案在现有技术中已有公开,本发明不再赘述)。

实施例2:

对可动态自定义3d模型尺寸的系统,同实施例1。

对安放在墙面上的空调3d模型的现实尺寸缩放,其步骤包括:

步骤1.初始化3d模型的对象信息。3d模型记录器记录了对象信息包括:空调3d模型各节点的坐标,3d模型的obb包围盒长高宽,3d模型的obb包围盒在xyz轴上的旋转角度,3d模型的obb包围盒中的平移参考点坐标,以及3d模型在现实世界中的实际长高宽;

步聚2.设置3d模型现实世界的尺寸。3d模型实际尺寸设置器从3d模型记录器找到空调3d模型对象(寻找的方式可以但不限于:通过3d模型唯一标识唯一定位到某一3d模型或者通过obb包围盒的各节点的坐标唯一定位到某一3d模型),假设此空调3d模型对象为objecta,并对空调3d模型objecta的现实世界中的长度或者宽度或者高度的尺寸进行设置;然后将设置前的空调3d模型信息以及设置后的实际尺寸一并传输给3d模型节点坐标计算器;

步聚3.计算3d模型变更后的各节点坐标。

第一步:计算长宽高对缩放比例值。3d模型节点坐标计算器从3d模型实际尺寸设置器中获取空调3d模型objecta的设置前的3d模型信息以及设置后的实际尺寸,并根据更新后的3d模型现实世界中的长宽高的尺寸与更新前的3d模型现世界中的长宽高对应的尺寸分别计算缩放比例值。假设长度的缩放比例值为kl,假设宽度的缩放比例值为kw,假设高度的缩放比例值为kh;

长度的缩放比例值kl=更新后的3d模型现实世界中的长度除以更新前的3d模型现实世界中的长度;比例值kl取值为正实数,如果更新后与更新前的长度相同,则kl=1;假设更新后的3d模型现实世界中的长度0.75米,更新前的3d模型现实世界中的长度1.5米,则kl=0.5;

宽度的缩放比例值kw=更新后的3d模型现实世界中的宽度除以更新前的3d模型现实世界中的宽度;比例值kw取值为正实数,如果更新后与更新前的宽度相同,则kw=1;假设更新后的3d模型现实世界中的宽度1米,更新前的3d模型现实世界中的宽度0.5米,则kw=2;

高度的缩放比例值kh=更新后的3d模型现实世界中的高度除以更新前的3d模型现实世界中的高度;比例值kh取值为正实数,如果更新后与更新前的高度相同,则kh=1;假设更新后的3d模型现实世界中的高度1米,更新前的3d模型现实世界中的高度0.5米,则kh=2;

第二步:将3d模型中的参考点平移到坐标原点。假设空调3d模型objecta对应的参考点坐标为(xc,yc,zc),xc和yc以及zc分别是参考点在x轴y轴z轴上的坐标值,假设x轴坐标为2表示墙面的坐标,则在地面上的参考点坐标假设为xc=2,yc=10,zc=1。。则参考点平移到坐标原点时在x轴y轴z轴上分别需要平移的向量坐标为-xc、-yc以及-zc。假设3d模型objecta的对象信息中的所有节点坐标为node_group_old,从节点坐标node_group_old中挨个取节点坐标,假设获取的节点坐标为(xo,yo,zo),xo=2,yo=12,zo=1.5,,假设此获取的节点跟随参考点平移后的坐标为(xt1,yt1,zt1),即在x轴上的xt1的坐标值=xo-xc=2-2=0,在y轴上的yt1的值=yo-yc=12-10=2,在z轴上的zt1的值=zo-zc=1.5-1=0.5;最终得到所有节点平移到坐标原点的坐标,假设此时平移后的空调3d模型的坐标为node_group_t1;

第三步:将3d模型的obb包围盒将长高宽的标尺线分别旋转至与xyz轴平行。假设当前的空调3d模型objecta的obb包围盒围绕y轴逆时针偏移角度为α、围绕z轴的逆时针偏移角度为β,围绕x轴的逆时针偏移角度为γ,假设α=90,β=0,γ=0;从空调3d模型平移后的节点坐标node_group_t1中挨个取节点坐标(xt1,yt1,zt1),并对此节点坐标分别按y轴以顺时针偏移角度α旋转和按z轴以顺时针偏移角度β旋转以及按x轴以以顺时针偏移角度γ旋转(节点坐标以坐标原点进行旋转的算法在现有技术中已公开,此处不再赘述),假设此节点旋转的坐标为(xr1,yr1,zr1),则xr1=-0.5,yr1=2,zr1=0,最终得到所有节点旋转到与坐标轴平行的坐标,假设此时空调3d模型旋转后的坐标为node_group_r1;

第四步:将3d模型的节点坐标分别在xyz轴上进行缩放。从空调3d模型旋转后的节点坐标node_group_r1中挨个取节点坐标(xr1,yr1,zr1),并对此节点坐标按比例值进行缩放,假设缩放后的节点坐标为(xk1,yk1,zk1),因为旋转后的空调3d模型的obb包围盒的长高宽的标尺线分别与xyz轴平行,因此,在x轴上的xk1的值=xr1乘以长度缩放比例值kl=-0.5*0.5=-0.25,在y轴上的yk1的值=yr1乘以高度缩放比例值kh=2*2=4,在z轴上的zk1的值=zr1乘以宽度缩放比例值kw=0*2=0;最终得到所有节点缩放后的坐标,假设此时空调3d模型缩放后坐标为node_group_k1;

第五步:将3d模型以参考点为中心再旋转到旋转前的角度。从空调3d模型缩放后的节点坐标node_group_k1中挨个取节点坐标(xk1,yk1,zk1),并对此节点坐标分别围绕y轴逆时针偏移角度α旋转和围绕z轴逆时针偏移角度β旋转以及围绕x轴以逆时针偏移角度γ旋转(节点坐标以坐标原点进行旋转的算法在现有技术中已公开,此处不再赘述),假设此节点旋转的坐标为(xr2,yr2,zr2),xr2=0,yr2=4,zr2=0.25,假设此时空调3d模型旋转后的坐标为node_group_r2;

第六步:将空调3d模型以参考点为中心再平移到平移前的位置;从节点坐标node_group_r2中挨个取节点坐标(xr2,yr2,zr2),假设此获取的节点平移到平移前的坐标为(xt2,yt2,zt2),在x轴上的xt2的值=xr2+xc=0+2=2,在y轴上的yt2的值=yr2+yc=4+10=14,在z轴上的zt2的值=zr2+zc=0.25+1=1.25;最终得到所有节点平移到平移前的坐标,假设此时空调3d模型平移后的坐标为node_group_t2,最后将所有节点平移到平移前的坐标node_group_t2传输给3d模型记录器,以更新对应的空调3d模型的对象信息;

空调3d模型在支撑面上的节点坐标(xo,yo,zo)被缩放后的坐标为(xt2,yt2,zt2),即(2,14,1.25),可以看出缩放的节点坐标仍在支撑面上,即没有产生嵌入或悬浮的问题;

步骤4.绘制3d模型。3d模型渲染器从3d模型记录器中获取空调3d模型对象信息,并根据空调3d模型对象信息中更新后的节点坐标node_group_t2绘制3d模型(3d模型绘制的具体技术方案在现有技术中已有公开,本发明不再赘述)。

实施例3:

对可动态自定义3d模型尺寸的系统,同实施例1,对安放在房顶上的吸顶灯3d模型的现实尺寸缩放,其步骤包括:

步骤1.初始化3d模型的对象信息。3d模型记录器记录了对象信息包括:3d模型各节点的坐标,3d模型的obb包围盒长高宽,3d模型的obb包围盒在xyz轴上的旋转角度,3d模型的obb包围盒中的平移参考点坐标,以及3d模型在现实世界中的实际长高宽;

步聚2.设置3d模型现实世界的尺寸。3d模型实际尺寸设置器从3d模型记录器找到吸顶灯3d模型对象(寻找的方式可以但不限于:通过3d模型唯一标识唯一定位到某一3d模型或者通过obb包围盒的各节点的坐标唯一定位到某一3d模型),假设此吸顶灯3d模型对象为objecta,并对此吸顶灯3d模型objecta的现实世界中的长度或者宽度或者高度的尺寸进行设置;然后将设置前的吸顶灯3d模型信息以及设置后的实际尺寸一并传输给3d模型节点坐标计算器;

步聚3.计算3d模型变更后的各节点坐标。

第一步:计算长宽高对缩放比例值。3d模型节点坐标计算器从3d模型实际尺寸设置器中获取桌子3d模型objecta的设置前的3d模型信息以及设置后的实际尺寸,并根据更新后的桌子3d模型现实世界中的长宽高的尺寸与更新前的3d模型现世界中的长宽高对应的尺寸分别计算缩放比例值。假设长度的缩放比例值为kl,假设宽度的缩放比例值为kw,假设高度的缩放比例值为kh;

长度的缩放比例值kl=更新后的3d模型现实世界中的长度除以更新前的3d模型现实世界中的长度;比例值kl取值为正实数,如果更新后与更新前的长度相同,则kl=1;假设更新后的3d模型现实世界中的长度1.5米,更新前的3d模型现实世界中的长度3米,则kl=0.5;

宽度的缩放比例值kw=更新后的3d模型现实世界中的宽度除以更新前的3d模型现实世界中的宽度;比例值kw取值为正实数,如果更新后与更新前的宽度相同,则kw=1;假设更新后的3d模型现实世界中的宽度1米,更新前的3d模型现实世界中的宽度1米,则kw=1;

高度的缩放比例值kh=更新后的3d模型现实世界中的高度除以更新前的3d模型现实世界中的高度;比例值kh取值为正实数,如果更新后与更新前的高度相同,则kh=1;假设更新后的3d模型现实世界中的高度1米,更新前的3d模型现实世界中的高度0.5米,则kh=2;

第二步:将3d模型中的参考点平移到坐标原点。假设桌子3d模型objecta对应的参考点坐标为(xc,yc,zc),xc和yc以及zc分别是参考点在x轴y轴z轴上的坐标值,假设y轴坐标为10表示房顶的坐标,则在地面上的参考点坐标假设为xc=0.5,yc=10,zc=0.5。则参考点平移到坐标原点时在x轴y轴z轴上分别需要平移的向量坐标为-xc、-yc以及-zc。假设桌子3d模型objecta的对象信息中的所有节点坐标为node_group_old,从节点坐标node_group_old中挨个取节点坐标,假设从支撑面上获取的节点坐标为xt2,yt2,zt2,xo=1,yo=10,zo=2,,假设此获取的节点跟随参考点平移后的坐标为(xt1,yt1,zt1),即在x轴上的xt1的坐标值=xo-xc=1-0.5=0.5,在y轴上的yt1的值=yo-yc=10-10=0,在z轴上的zt1的值=zo-zc=2-0.5=1.5;最终得到所有节点平移到坐标原点的坐标,假设此时平移后的吸顶灯3d模型的坐标为node_group_t1;

第三步:将3d模型的obb包围盒将长高宽的标尺线分别旋转至与xyz轴平行。假设当前的吸顶灯3d模型objecta的obb包围盒围绕y轴逆时针偏移角度为α、围绕z轴的逆时针偏移角度为β,围绕x轴的逆时针偏移角度为γ,假设α=90,β=0,γ=0;从桌子3d模型平移后的节点坐标node_group_t1中挨个取节点坐标(xt1,yt1,zt1),并对此节点坐标分别按y轴以顺时针偏移角度α旋转和按z轴以顺时针偏移角度β旋转以及按x轴以顺时针偏移角度γ旋转(节点坐标以坐标原点进行旋转的算法在现有技术中已公开,此处不再赘述),假设此节点旋转的坐标为(xr1,yr1,zr1),则xr1=-1.5,yr1=0,zr1=0.5,最终得到所有节点旋转到与坐标轴平行的坐标,假设此时吸顶灯3d模型旋转后的坐标为node_group_r1:

第四步:将3d模型的节点坐标分别在xyz轴上进行缩放。从吸顶灯3d模型旋转后的节点坐标node_group_r1中挨个取节点坐标(xr1,yr1,zr1),并对此节点坐标按比例值进行缩放,假设缩放后的节点坐标为(xk1,yk1,zk1),因为旋转后的桌子3d模型的obb包围盒的长高宽的标尺线分别与xyz轴平行,因此,在x轴上的xk1的值=xr1乘以长度缩放比例值kl=-1.5*0.5=-0.75,在y轴上的yk1的值=yr1乘以高度缩放比例值kh=0*2=0,在z轴上的zk1的值=zr1乘以宽度缩放比例值kw=0.5*1=0.5;最终得到所有节点缩放后的坐标,假设此时吸顶灯3d模型缩放后坐标为node_group_k1;

第五步:将3d模型以参考点为中心再旋转到旋转前的角度。从吸顶灯3d模型缩放后的节点坐标node_group_k1中挨个取节点坐标(xk1,yk1,zk1),并对此节点坐标分别围绕y轴逆时针旋转角度α旋转和围绕z轴逆时针旋转角度β旋转以及围绕x轴以逆时针旋转角度γ旋转(节点坐标以坐标原点进行旋转的算法在现有技术中已公开,此处不再赘述),假设此节点旋转的坐标为(xr2,yr2,zr2),xr2=0.5,yr2=5,zr2=0.75,,假设此时吸顶灯3d模型旋转后的坐标为node_group_r2;

第六步:将3d模型以参考点为中心再平移到平移前的位置;从节点坐标node_group_r2中挨个取节点坐标(xr2,yr2,zr2),假设此获取的节点平移到平移前的坐标为(xt2,yt2,zt2),在x轴上的xt2的值=xr2+xc=0.5+0.5=1,在y轴上的yt2的值=yr2+yc=0+10=10,在z轴上的zt2的值=zr2+zc=0.75+0.5=1.25;最终得到所有节点平移到平移前的坐标,假设此时吸顶灯3d模型平移后的坐标为node_group_t2,最后将所有节点平移到平移前的坐标node_group_t2传输给3d模型记录器,以更新对应的吸顶灯3d模型的对象信息;

吸顶灯3d模型在支撑面上的节点坐标(xo,yo,zo)被缩放后的坐标为(xt2,yt2,zt2),即(1,10,1.25),可以看出缩放的节点坐标仍在支撑面上,即没有产生嵌入或悬浮的问题;

步骤4.绘制3d模型。3d模型渲染器从3d模型记录器中获取吸顶灯3d模型对象信息,并根据吸顶灯3d模型对象信息中更新后的节点坐标node_group_t2绘制3d模型(3d模型绘制的具体技术方案在现有技术中已有公开,本发明不再赘述)。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1