一种在三维球面实现拖动的方法与流程

文档序号:13238106阅读:1193来源:国知局
一种在三维球面实现拖动的方法与流程

本发明涉及三维图形引擎漫游领域,尤其涉及在三维球面中实现拖动的方法,其通过在三维场景中对鼠标点击位置,和鼠标的移动位置计算出相机矩阵,实现在三维球面中精准拖动模型的效果。



背景技术:

传统的三维球面场景对场景的拖动时,需要计算使用鼠标在窗口二维坐标系移动的位置去拖动场景,但由于二三维坐标的不一致,导致三维场景的拖动不精准,鼠标点中物体在拖动过后,鼠标所在位置和点中的点发生了偏移,因此,当需要精准拖动时,这种处理方式则无能为力。



技术实现要素:

本发明的目的是针对现有技术的不足,提出了利用鼠标按下当前点的二维坐标和主相机的矩阵信息与全场景的模型做一次相交运算,从而精准的计算出三维球面场景中当前鼠标锁定的模型点的三维坐标lockpoint(点a)。通过运算使鼠标左键按下后在场景中的任意移动都能锁定三维坐标lockpoint在鼠标位置。

为实现这一目的,本发明提出了一种在三维球面实现拖动的方法,其包括:

步骤1、获取三维场景下的三维球面模型以及相机矩阵;

步骤2、锁定基准点,所述基准点为第三三维坐标g与第一三维坐标a所形成的线段与整个场景相交,取出相交的最近点第四三维坐标d;

步骤3、移动所述鼠标,获取所述鼠标当前移动到的点的第二二维坐标b1,基于第二二维坐标b1和漫游相机矩阵计算出第二三维坐标b和第一向量cb;

步骤4、基于所述第四三维坐标d,第一向量cb和线段oe计算第五三维坐标e,所述第五三维坐标e为转动场景后所述基准点的位置;

步骤5、基于所述第五三维坐标e和第四三维坐标d,计算旋转角度和旋转轴;

步骤6、基于计算的所述旋转角度和旋转轴,转动相机,从而实现三维球面的精准拖动。

其中,所述基准点为鼠标当前按下的点在三维球面上的投影。

其中,所述步骤2包括使用相机矩阵将所述基准点的第一二维坐标转换为三维场景中的第一三维坐标a和第三三维坐标g。

其中,所述步骤1与步骤2之间还包括:计算鼠标当前按下点的在所述三维场景中的三维坐标。

其中,所述二维坐标位于相对漫游相机的远截面上,三维坐标位于相对三维场景坐标。

其中,所述步骤5具体包括:

设定三维球面的球心为原点

假定漫游相机不动,将所述鼠标点击的点的拖动视为第四三维坐标d、第五三维坐标e与所述原点构成的第一平面内,所述第四三维坐标d沿着球面转动角度α;

此时,假定球不动,实际的移动可视为所述漫游相机在所述第一平面内由原始位置反向移动角度α。

其中,,基于用户点击鼠标时按下的点a1与所述相机矩阵计算出相机远截面上的点的第一三维坐标a和相机近截面上的点的第三三维坐标g。

本发明可以实现三维场景下的物体基于球面模型的的精准拖动。

附图说明

图1为与本发明实施例一致的将三维场景中的物体从一个点拖动到另一个点的平面示意图;

图2为与图1的拖动一致的在三维场景中的拖动示意图;

图3为与图2拖动一致的在三维球面模型下的拖动示意图;

图4为与图3拖动一致的三维球面在二维平面中的映射图。

具体实施例

基于以上内容,本发明的主要的核心在于:第一,要计算鼠标按下点的二维坐标和三维坐标的转换,第二,根据鼠标移动到的位置计算出相机变化方位。

一、二维坐标和三维坐标转换

1、精准转换

将鼠标当前按下的点的二维坐标转换为三维场景中的坐标,视这个三维点为精准抓取点lockpoint,后面的计算都是以这个为基准进行计算的。

2、方向转换

将鼠标按下移动后的点的二维坐标使用相机矩阵转化为此时三维场景的向量movevector(向量cb),此时场景是静止的,相机的矩阵依然使用鼠标按下时候的相机矩阵。

通过鼠标按下点的初始三维坐标lockpoint和鼠标移动的向量movevector计算实现精准拖动

此拖动算法主要有两个重点。一是拖动后模型还是在原来鼠标远来的位置,就是鼠标点下后,不管鼠标怎么移动,lockpoint一直在鼠标的位置,即简单说就是鼠标按下抓取点随着鼠标移动而移动;二是基于三维球面的拖动。

如图1所示,为与本发明实施例一致的将三维场景中的物体从一个点拖动到另一个点的平面示意图。

图中显示,用户将该物体从二维屏幕的点a1拖动到二维屏幕的点b1。

如图2所示,为将使用相机矩阵,将二维屏幕的点a1到点b1的从远截面投射到近截面的对应点d和e处。其中d点为物体在三维场景中的真实位置,e点是在三维场景中的物体移动后的真实位置。

如图3所示,为将所述拖动过程投射到三维场景的三维球面的立体图。

如图4所示,为图3所示立体图映射到二维平面的映射图。

各图中点的含义及其关系如下:

a点鼠标按下时候的锁定点

b点鼠标按下但未抬起时候的移动点

c点相机位置已知

d点鼠标按下时候,实际点选到的模型点(通过和整个场景相交计算)

e点鼠标移动时候,实际模型所移动到的点,实现精准抓取

f点过球心做辅助线of垂直向量cb

o点球心位置已知

od=oe。

向量cb=通过鼠标移动后的二位坐标和相机的矩阵可以计算得到。

如图,要实现精准拖动,就是要以ode面的法向量为轴,转动α角度,

求ode面的法向量和α角度都需要先求e点的坐标

以下计算e点坐标:

β=向量co和向量cb夹角;

of=sinβ*oc;

cf=cosβ*oc;

ef*ef=oe*oe+of*of;

ce=cf-ef;

e点=向量cb的单位向量*ce。

以上操作包括以下步骤:

步骤1、获取三维场景下的三维球面模型以及相机矩阵;

步骤2、锁定基准点,所述基准点为第三三维坐标g与第一三维坐标a所形成的线段与整个场景相交,取出相交的最近点第四三维坐标d;

步骤3、移动所述鼠标,获取所述鼠标当前移动到的点的第二二维坐标b1,基于第二二维坐标b1和漫游相机矩阵计算出第二三维坐标b和第一向量cb;

步骤4、基于所述第四三维坐标d,第一向量cb和线段oe计算第五三维坐标e,所述第五三维坐标e为转动场景后所述基准点的位置;

步骤5、基于所述第五三维坐标e和第四三维坐标d,计算旋转角度和旋转轴;

步骤6、基于计算的所述旋转角度和旋转轴,转动相机,从而实现三维球面的精准拖动。

其中,所述基准点为鼠标当前按下的点在三维球面上的投影。

其中,所述步骤2包括使用相机矩阵将所述基准点的第一二维坐标转换为三维场景中的第一三维坐标a和第三三维坐标g。

其中,所述步骤1与步骤2之间还包括:计算鼠标当前按下点的在所述三维场景中的三维坐标。

其中,所述二维坐标位于相对漫游相机的远截面上,三维坐标位于相对三维场景坐标。

其中,所述步骤5具体包括:

设定三维球面的球心为原点

假定漫游相机不动,将所述鼠标点击的点的拖动视为第四三维坐标d、第五三维坐标e与所述原点构成的第一平面内,所述第四三维坐标d沿着球面转动角度α;

此时,假定球不动,实际的移动可视为所述漫游相机在所述第一平面内由原始位置反向移动角度α。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

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