1.一种操作三维场景中物体旋转的方法,其特征在于,包括以下步骤:步骤1:获取三维场景中物体的轴向向量 和手柄的速度向量 ,所述轴向向量 也即物体旋转所在平面的法线向量 ;所述手柄的速度向量 通过VR手柄的软件开发工具包SDK实时获取;
步骤2:根据步骤1得到的物体旋转所在平面的法线向量 和手柄在三维场景中运动的速度向量 ,计算手柄沿物体旋转平面的运动速度 :;
其中, 为当前手柄在三维场景中运动的速度向量,为物体旋转所在平面的法线向量;
步骤3:获取旋转方向缓存队列signBuffer;具体包括:步骤3‑1:获取手柄旋转方向值:
根据三维向量计算手柄旋转方向值 :
;
其中,为物体旋转所在平面的法线向量, 为当前获得的手柄速度向量, 为上一次获得的手柄速度向量;
步骤3‑2:将获取的手柄旋转方向值 与预设的阈值 作比较,经以下逻辑判断,将值进入旋转方向缓存队列signBuffer:当旋转方向值 时,手柄不转动,此时将值0进入转动方向缓存队列signBuffer,即 ;
当旋转方向值 时,根据左手定则,在物体旋转所在平面的法线向量 指向操作者的情况下,当旋转方向值 时,手柄逆时针转动,此时将值‑1进入旋转方向缓存队列signBuffer;当旋转方向值 时,手柄顺时针转动,此时将值1进入旋转方向缓存队列signBuffer,即;
步骤4:获取旋转角度缓存队列angularBuffer;具体包括:步骤4‑1:计算当前获得的手柄速度向量 与上一次获得的手柄速度向量 的夹角:;
步骤4‑2:通过旋转方向缓存队列signBuffer,计算得出当前旋转方向的均值averageSign,计算方法为:;
其中,bufferCapacity为缓存队列长度;
步骤4‑3:提取转动角度缓存队列angularBuffer的队列首值,通过符号函数判断其符号值与步骤4‑2得到的旋转方向的均值averageSign是否相等:当 时,当前手柄转动方向与上一次获得的转动方向相同,将当前获得手柄转动角度与方向进入转动角度缓存队列angularBuffer,即:angularBuffer[0]=tempAngle×averageSign;
当 时,当前手柄转动方向与上一次获得的转动方向不一致,此时将转动角度缓存队列angularBuffer的值都置为0,即:;
其中, angularBuffer[i]代表队列中索引i的值;
然后将当前获得手柄转动角度与方向进入转动角度缓存队列angularBuffer,即:;
步骤5:计算手柄带动物体旋转的角度并输出,具体为:计算转动角度缓存队列angularBuffer所有项的平均值 ,即;
其中, 为缓存队列长度; 输出为当前手柄带动物体旋转的角度,当 时,物体顺时针转动,当 时,物体逆时针转动。
2.根据权利要求1所述的一种操作三维场景中物体旋转的方法,其特征在于,获取旋转角度缓存队列angularBuffer之后,将当前获得的手柄速度向量 赋值给上一次获得的手柄速度向量 ,用来进行下一次旋转角度计算,即 。
3.根据权利要求1所述的一种操作三维场景中物体旋转的方法,其特征在于,在方法开始前,还包括以下初始操作:设置两个三维向量变量 和 ,其中,变量 用以存储上一次计算获得的手柄速度向量,其初始值为零向量(0,0,0),变量 用以存储当前计算获得的手柄速度向量;
设置两个长度相同的缓存队列,定义为转动角度缓存队列angularBuffer和转动方向缓存队列signBuffer;转动角度缓存队列angularBuffer缓存手柄转动夹角,用来计算物体转动角度数值,其初始值为0;转动角度缓存队列所有新的缓存数据由队头angularBuffer[0]进入,由队尾angularBuffer[bufferCapacity‑1]退出;转动方向缓存队列signBuffer缓存手柄转动方向值,用来判断物体转动方向,其中,1代表正转,‑1代表反转,0为不转动,方向缓存队列signBuffer的初始值为0;转动方向缓存队列所有新的缓存数据由队头signBuffer[0]进入,由队尾signBuffer[bufferCapacity‑1]退出;
设置一个阈值threhold,用以判断手柄是否执行旋转物体操作。
4.一种操作三维场景中物体旋转的系统,其特征在于,包括:向量获取模块,用以获取三维场景中物体的轴向向量和手柄的速度向量;
计算模块,用以计算手柄沿物体旋转平面的运动速度;
队列获取模块一,用以获取旋转方向缓存队列;
队列获取模块二,用以获取旋转角度缓存队列;
计算输出模块,计算当前手柄带动物体旋转的角度并输出;
所述队列获取模块一,进一步包括:
方向值计算单元,用以根据三维向量计算手柄运动的旋转方向值;
逻辑判断单元一,用以将计算得到的旋转方向值与预设的阈值作比较,进行相关逻辑判断,将值进入旋转方向缓存队列;
所述队列获取模块二,进一步包括:
夹角计算单元,用以计算当前获得的手柄速度向量与上一次获得的手柄速度向量的夹角;
方向均值计算单元,用以通过旋转方向缓存队列计算得出当前旋转方向的均值;
逻辑判断单元二,用以提取转动角度缓存队列angularBuffer的队列首值,通过符号函数判断其符号值与旋转方向的均值averageSign是否相等。
5.一种操作三维场景中物体旋转的装置,其特征在于,包括:存储器,用以存储计算机程序;
处理器,用以执行所述计算机程序时实现如权利要求1至3任意一项所述的操作三维场景中物体旋转的方法的步骤。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3任意一项所述的一种操作三维场景中物体旋转的方法的步骤。