基于OenGL实现的三维物体绕任意轴旋转*

2014-12-26 03:34姚红革鬲文娟
西安工业大学学报 2014年11期
关键词:鼠标物体角度

姚红革,鬲文娟

(西安工业大学 计算机科学与工程学院,西安710021)

Ivan Sutherland的博士论文 Sketchpad Project[1]为交互式计算机图形系统开辟了一个新领域.他提出的交互模式是用户在显示器屏幕上看到一幅图像,通过某种交互设备(如鼠标)对图像做出某种反应,图像响应用户的输入并发生某些变化,用户又对图像的变化做出反应,如此反复进行.自从Ivan Sutherland首次提出交互模式后的40多年里,计算机的硬件技术和软件技术都有了突飞猛进的发展.无论是利用最新的窗口系统所提供的工具编写程序,还是在博物馆里利用人机交互界面观看展览,都是在利用此种交互模式.交互是许多应用软件的一个重要组成部分,而鼠标拖动物体绕任意轴平滑旋转是交互的一个重要方面,

鼠标拖动场景里的物体,鼠标的移动方向要与模型的旋转效果可靠地关联起来,而其他的做法,关联效果很差,鼠标拖动与想要旋转的方向出现很大的误差,达不到平滑的效果,为此,本文构建了一个虚拟球,通过鼠标拖动划过的弧线对应的角度确定旋转角度实现平滑旋转.

Ken Shoemake[2]首先提出了旋转3D 图形的弧球旋转算法.基于此并在其上进行改进,本文采用弧球算法实现物体响应鼠标操作绕任意轴的旋转,他突破了鼠标拖动物体只是在单一坐标轴(x轴、y轴)方向旋转的局限性,实现了物体沿任意方向的平滑旋转,并结合创建实时3D图形的编程接口OpenGL,对算法进行验证实现.

1 弧球算法

Michael Chen提出的虚拟球(Virtual Sphere)[3],利用附加z轴方法,用鼠标选中模型,使光标沿屏幕坐标系横坐标,纵坐标的旋转分别与三维物体绕世界坐标系横坐标,纵坐标的旋转相关联,而光标在模型外的移动则使模型绕z轴旋转,这种方法虽能实现最终需要的方位,但本质上是基于固定的三个轴的旋转,无法实现将鼠标的移动方向与模型的旋转效果可靠地关联起来,且这种方法还会产生万向节死锁现象(Gimbal Lock)[4].同年,Bell提出了三维旋转的轨迹球算法[5],他是将二维坐标映射到相应的圆面和曲面上,这种方法虽然可以实现平滑的旋转,但是他的物理意义一般.为了达到好的旋转效果,本文改进了Chen的虚拟球中旋转轴和旋转角度的计算方法[6].

1.1 二维坐标到三维坐标

鼠标在屏幕上的点击点是以二维坐标的形式表示的,物理世界的旋转都有三维空间性,弧球算法根据物理世界的规律,为二维坐标虚拟出了第三维坐标,他的朝向是垂直于显示器向外的.

二维坐标到三维的转换,首先进行二维坐标内的变换,为了构建单位旋转弧球,要将鼠标点击的窗口坐标转换到构建单位球用的边长为2的正方形.若窗口的宽度和高度经过线性变换.经过线性变换,可以得到正方形下新的二维坐标.

图1 虚拟三维坐标系Fig.1 Virtual 3Dcoordinate

图2 鼠标点击经转换后落在弧球内Fig.2 The point in the arcball

图3 鼠标点击经转换后落在弧球外Fig.3 The point out of the arcball

综合上述两种情况,可得鼠标点击后经转换的弧球坐标(x,y,z)式为

1.2 旋转参数的计算

图4 旋转示例Fig.4 Rotating sample

其次,旋转角度即为两个矢量的夹角α,由于对鼠标的快速跟踪,所以鼠标位置在每次移动中的变化量很小,所以可以采用近似计算以节省由求反三角函数所用的计算时间,如式(3)

此处计算出的旋转角是以弧度为单位的.并且范围为0≤α≤π.

2 旋转的累加

四元数可以用来表示旋转角度和旋转轴.鼠标多次拖动产生的旋转效果由四元数代表的旋转向量累加,再将四元数转换为相应的旋转矩阵[3],实现旋转的任意化.

用四元数表示旋转轴n和旋转角度α为p=(α,n).对p规范化,使他变为单位向量.则p的“旋转四元数[4]”(表示一个旋转角α绕着规范化轴(即单位向量)v进行的旋转)可表示为

由四元数的性质知,单位四元数可以用来表达旋转.利用旋转四元数对多次鼠标拖动产生的旋转效果进行累加.设q1(x1,x2,x3,x4)和q2(y1,y2,y3,y4)为两次旋转的“旋转四元数”,则将两次旋转的效果累加可以用四元数的乘法实现,且由四元数性质可知,单位四元数相乘后得到的也是单位四元数为

四元数乘法运算中先进行的是q2的旋转,再进行的是q1的旋转,所以计算时一定要根据旋转的次序来进行正确的四元数乘法[7].最后将四元数转换为旋转矩阵,单位四元数Qz转换为旋转矩阵可以按式(5)计算[8]

3 OpenGL实现

OpenGL为一个优秀的三维渲染显示工具,因其与计算机硬件直接相关,所以语句执行高速简洁,显示效果好.因此在任意旋转操作实现上采用基于VC++6.0的OpenGL平台.

通过计算出的旋转矩阵,在重绘函数中,用当前模型视图矩阵乘以上面的计算结果,实现旋转操作.算法的流程图如图5所示.验证结果如图6所示,实现了鼠标对物体沿任意方向旋转的控制.

图5 程序流程图Fig.5 Program flow chart

图6 实现物体任意方向旋转Fig.6 Realize the object of arbitrary direction

4 结 论

本文采用虚拟弧球算法实现了鼠标拖动下三维物体绕任意方向的旋转并采用四元数对旋转效果累加的计算,既提高了计算效率,且使旋转非常的平滑.与传统的旋转只是绕单一坐标轴旋转相比,弧球方法更符合人们希望对物体的各方面进行观察的期望,而且旋转很平滑,旋转方向误差很小.虽然这种方法是在OpenGL下测试的,不过它不只是适合OpenGL,而是对于所有三维绘图需要进行旋转的情况都适合.

[1] EDWARD A.交互式计算机图形学:基于 OPENGL的自顶向下方法[M].4版.吴文国,译.北京:清华大学出版社,2007.EDWARD A,Interactive Computer Graphics A Top-Down Approach Using OpenGL Fourth Edition[M].4th ed.WU Wen-guo,Translated.Beijing:Tsinghua University Press,2007.(in Chinese)

[2] SHOEMAKE K.Animating Rotation with Quaternion Curves[J].Cmputer Graphics,1985,19(3):245.

[3] CHEN M,MOUNTFORD S J,SELLEN A.A Study in Interactive 3-D Rotation Using 2-D Control Devices[J].Computer Graphics,1988,22(4):121.

[4] DUNN F,PARBERRY I.3D数学基础:图形与游戏开发[M].史银雪,陈洪,王荣静,译.北京:清华大学出版社,2005.DUNN F,PARBERRY I.3DMath Primer for Graphics and Game Development[M].SHI Yin-xue,CHEN Hong,WANG Rong-jing,Translated.Beijing:Tsinghua University Press,2005.(in Chinese)

[5] ZHAO J Y,SHURALYOV D,STUERZLINGER W.Comparison of Multiple 3DRotation Methods[R].IEEE International Conference on Virtual Environments Human-Computer Interfaces and Measurement Systems.IEEE Computer Society,2011.

[6] 肖伟,梁久祯,陈玮琪.基于四元数的3D物体旋转及运动插值[J].系统仿真学报,2012,24(3):624.XIAO Wei,LIANG Jiu-zhen,CHEN Wei-qi.3DObject Rotation and Motion Interpolation Based on Quaternion[J].Journal of System Simulation,2002,24(3):624.(in Chinese)

[7] 马新武,赵国群,王广春.用虚拟球实现交互式Open-GL3D 图 形 的 旋 转 [J].计 算 机 应 用,2001,21(8):169.MA Xin-wu,ZHAO Guo-qun,WANG Guang-chun.With the Virtual Sphere to Achieve Interactive Open-GL 3DGraphics Rotation[J].Journal of Computer Applications,2001,21(8):169.(in Chinese)

[8] 世界著名数论经典著作钩沉编写组编.世界著名数论经典著作钩沉:算术卷[M].哈尔滨:哈尔滨工业大学出版社,2012.Compiling Group of World Famous Classical Works in Number Theory.The World Famous Classical Works in Number Theory:Arithmetic Volume[M].Harbin:Harbin Institute of Technology Press,2012.(in Chinese)

猜你喜欢
鼠标物体角度
神奇的角度
深刻理解物体的平衡
我们是怎样看到物体的
一个涉及角度和的几何不等式链的改进
角度不同
人啊
为什么同一物体在世界各地重量不一样?
鼠标折叠笔
悬浮的鸡蛋
45岁的鼠标