基于四元数的坦克炮塔旋转控制方法的研究及实现

2017-04-15 17:04王少璞何丽
电脑知识与技术 2016年34期

王少璞+何丽

摘要:传统的欧拉角插值方案在解决三维物体的旋转上应用范围有限,且易生成错误路径,而四元数样条插值以其快捷、准确的特点正在受到越来越多的关注。本文以Unity3D作为开发平台,研究了四元数的发展,设计了一套基于四元数样条的坦克炮塔旋转与瞄准方案,最终实现了在移动端通过触摸屏操控坦克炮塔。实验结果表明,四元数样条插值较常规欧拉角插值而言描述准确、变化流畅,可以使三维物体的旋转在视觉上更加平滑、真实。

关键词:计算几何;Unity3D;四元数样条;三维旋转;

中图分类号:TP319 文献标识码:A 文章编号:1009-3044(2016)34-0237-02

Abstract: The traditional scheme that Euler Angle interpolation can cover limited situations when dealing with the rotation of three-dimensional objects. However, the Quaternion Spherical and Quadrangle interpolation are drawing attention for its quickness and accuracy. Base on a development platform named Unity3D, this paper studies the development of the quaternion, and designs a scheme about tanks turret rotating and targeting based on Quaternion, and finally achieved a project that can control tanks turret through the touch screen with a mobile terminal. The experimental result shows that the Quaternion Spherical and Quadrangle interpolation can make the rotation of three-dimensional objects looks more smoothly and real thanks to its satisfactory precise which the Euler Angle cannot match.

Key words: Computing geometry; Unity3D; Quaternion Splines; 3D rotation

1 概述

在三维图形系统的开发过程中,描述模型的旋转状态成了计算机辅助几何设计的一项重要研究领域。随着相关需求愈发地旺盛,先后出现了欧拉角、矩阵、四元数等方式,三种方式各有利弊。欧拉角由于其易于理解的特性而被较早地使用,但由于容易导致路径错误、自由度减少等缺陷而较少用于底层状态控制。矩阵是目前计算机引擎底部使用较多的表达方法,但易导致矩阵蠕变,且使用不够直观,因此在许多软件中都被隐藏在其他表达方式下[1]。四元数由于其易插值、增量旋转速度快等特性而被广泛使用,在许多软件中均得到丰富的支持。

本次实验通过目前较为流行的开发平台Unity3D进行坦克炮塔的旋转模拟操作,通过对比几种方法的特性后使用四元数作为表达方式,并通过插值优化了炮塔旋转时视觉效果,使之更加流畅。

2 关键技术分析

2.1四元数

定义:四元数是一种三维空间中描述复数的表达方式,由四个元素,即一个实部和三个虚部组成,如下所示:

3 坦克炮塔旋转及平滑处理实现

3.1旋转

本次实验使用Unity3D打包生成的Android平台应用,其输入方式为手指在触摸屏的移动。手指的移动可以由一个二维数组(x,y)组成,其中x表示横向移动距离,y表示纵向移动距离。应用到坦克炮塔时可以认为x表示炮塔的横向旋转幅度,y表示炮口的纵向旋转幅度。虽然可以直接用于欧拉角体系,但其中产生的万向节死锁将导致生成错误的更长的路径,从而导致在瞄准时浪费宝贵的时间,因此使用四元数来描述坦克炮塔,并利用乘法将多个维度的旋转综合为单个旋转序列,降低操作复杂度。

3.2平滑处理

在使用常规欧拉角解决方案时,火炮会在瞄准较远目标时产生剧烈的颤抖,因此需要较高的精确度以模拟炮口朝向在不同時刻的状态。

实验中炮塔的初状态和末状态分别为此时炮塔的方位和期望方位,炮塔从初状态旋转至末状态往往需要一定的时间,所以需要在炮塔的旋转过程中采用样条插值。由于Unity3D已经提供了完善的四元数保存方案,所以数据在读取和传入时无需更改形式,通过FixedUpdate()函数调用机制[5],可以在每一定的时间间隔后进行一次采样,计算整个样条后插值改变炮塔方位。与欧拉角方案对比,可明显看出采用Squad样条的炮塔旋转更加平滑,并且在瞄准较远距离目标时不易发生颤抖现象,对坦克状态的模拟更加真实。实验效果如图所示。

4 结论

本文主要研究了基于四元数的三维物体旋转。借助Unity3D平台较为完善的四元数支持,完成了使用触摸屏指定任意目标的坦克炮塔旋转控制,并通过插值算法使状态之间的变化平滑流畅,通过四元数样条生成一条类似曲线替代了普通线性插值,从而大大减少了瞄准远处目标时带来的颤抖现象。

四元数的诸多特性克服了传统欧拉角表示下的一些无法避免的问题,但本身也存在着误差累积、不易理解等缺陷。但是瑕不掩瑜,随着时间的发展和相关知识体系的完善,四元数无疑会在三维图形的表示和操作方面扩大使用范围。

参考文献:

[1] 吴彬,黄赞臻,郭雪峰,刘向群.Unity 4.X从入门到精通[M].中国铁道出版社,2013.

[2] Millington,I.游戏物理引擎开发[M];徐明亮,李强,宋伟,译.北京:清华大学出版社,2013.

[3] 刘俊峰,三维转动的四元数表述[J].大学物理,2004,23(4):39-43.

[4] 关东东,关华勇,傅颖.一种3维动画中间帧非线性插值算法[J].中国图像图形学报,2006, 11(12):1820-1826.

[5] 刘钢,孙文涛.Unity官方案例精讲[M].北京:中国铁道出版社,2015.