Quantcast
Channel: C++博客-所有随笔
Viewing all articles
Browse latest Browse all 7886

实现Arcball效果(OpenGL)

$
0
0
  • 主要讲解如何在OpenGL中实现Arcball效果.
  • Arcball效果: 当按下鼠标左键并移动时, 场景窗口中鼠标下方的物体会围绕其中心旋转. 好比人用手指按住地球仪让其旋转的效果.
  • 本例主要运用矩阵变换来实现. 首先根据鼠标的移动得到旋转轴以及旋转角度. 而后转换成四元数格式, 再转换成变换矩阵.
  • 首先得到投影矩阵和视图变换矩阵
1 GLdouble projection_matrix[16= {1,0,0,00,1,0,00,0,1,00,0,0,1};
2 GLdouble modelview_matrix[16= {1,0,0,00,1,0,00,0,1,00,0,0,1};
3 int viewport_matrix[4= {0,0,640,480};
4 
5 glGetDoublev(GL_PROJECTION_MATRIX,projection_matrix);
6 glGetIntegerv(GL_VIEWPORT,viewport_matrix);
  • 得到鼠标位置在模型空间中的位置

1 GLdouble x,y,z;
2 gluUnProject(mouse_x, mouse_y, 0.0,
3              modelview_matrix,
4              projection_matrix,
5              viewport_matrix,
6              &x, &y, &z);
  • 而后从眼睛位置以及上面得到的鼠标位置得到一条射线, 而后根据射线方程得到球面上一点的位置.
  • 而后根据鼠标的移动得到另外一个球面点的位置. 从而得到球心到达两个球面上点的向量, 叉乘得到旋转轴, 点乘得到旋转角度.
  • 根据旋转轴和旋转角度得到四元数. 而后四元数变换得到旋转矩阵.

参考资料: http://rainwarrior.ca/dragon/arcball.html






夏冰 2014-01-22 08:12 发表评论

Viewing all articles
Browse latest Browse all 7886

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>