【ARtooklit】坐标系的平移与旋转

在ARToolKit 六个步骤中,步骤四是arGetTransMat函数计算摄像头的转移矩阵,就是为了让摄像头和标识卡之间的坐标相对应,为了让摄像头和标识卡之间有很好的联系。

那么arGetTransMat函数是如何计算摄像机的转移矩阵呢,这里有一篇文章,从转移矩阵的算法介绍了计算机的转移矩阵http://haiyangxu.github.io/posts/2014/2014-06-12-camera-matrix.html

本次我们将会去了解,摄像机是如何和标识卡之间获得联系的。

ARToolKit 提供了标识在摄像机的坐标系统中的位置,使用 opengl 矩阵系统计算出虚 拟物体的位置。然后虚拟物体显示在标识卡与摄像机坐标系相对应的坐标之中。其中ARToolKit 所使用的坐标 系统(CS),CS坐标系统有着和 opengl 坐标系统一样的方位。 因此任何应用于与标识关联的物体的转换都应遵循 opengl 的转换规则。而具体的对应的函数则是glTranslatef函数,这个函数属于opengl里面的函数,glTranslatef(double x,double y,double z),xyz 的值则是当前屏幕中心的原点,改变xyz的值,可以让虚拟物体沿着 X, Y 和 Z 轴移动,而对于移动,则有个法则:

1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。

2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。

3.中心左面的坐标值是负值,右面是正值。
   移向屏幕顶端是正值,移向屏幕底端是负值。
   移入屏幕深处是负值,移出屏幕则是正值。

当更改glTranslatef函数里面的参数时,虚拟物体的位置会发生移动,而移动的时候,您并不是相对屏幕中心移动,而是相对与当前所在的屏幕位置。与当前屏幕有关。

OpenGL函数glRotatef

而glRotatef(angle, x, y, z)函数则是让虚拟物体旋转,与glTranslatef(x, y, z)类似,glRotatef(angle, x, y, z)也是对坐标系进行操作。旋转轴经过原点,方向为(x,y,z),旋转角度为angle,方向满足右手定则。

旋转函数:glRotatef(float angle, float X, float Y, float Z)其中,angle指定对象旋转的角度,X,Y,Z三个参数共同决定旋转轴的方向。即,glRotatef函数是将某对象沿指定轴旋转angle角度。

2.旋转实现方法:

  float rotateTri;

  float rotateQuad;

  //旋转三角形

  gl.glRotatef(rotateTri, 0.0f, 1.0f, 0.0f);

  //旋转四边形

  gl.glRotatef(rotateQuad, 1.0f, 0.0f, 0.0f);

  //为了不断旋转,需要不断改变旋转的角度.

  rotateTri += 0.5f;

  rotateQuad -= 0.5f;

只要添加了opengl中的glRotatef旋转函数,则可以对虚拟物体实现不同的角度进行旋转操作。

glLoadIdentity()函数将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作,应写在glTranslatef函数之前,或者写在glRotatef函数之后,可以停止旋转或者平移



猜你喜欢

转载自blog.csdn.net/qq_38643064/article/details/80202425