【ARToolkit】模型的x,yz轴的横移变化

       ARToolKit 中摄像头与虚拟物体之间存在一个对应的矩阵变换,正是由这个矩阵变换,所以才在摄像头与标识卡上的虚拟物体之间建立了联系,如下图,摄像头和标识卡之间有着x,y,z的坐标轴的对应变换。



其中能够对应的原因ARToolKit 提供了标识在摄像机的坐标系统中的位置,使用 opengl 矩阵系统计算出虚 拟物体的位置。


坐标系统存在于每一个ARToolkit程序之中,我们以之前文章中提到的 simpleTest 程序为例。打开它,把下面这句代码加在 arGetTransMat 后: printf("%f %f %f\n",patt_trans[0][3],patt_trans[1][3],patt_trans[2][3]); 

重新编译,就会出现一个这样的图


其中运行程序。注意输出值。如果把标识往左移动,第一个值就会增加,往上 移动,第二个值就减小,往前移动最后一个值也会增加输出的值与这些坐标系统相对应。标识坐标系统有着和 opengl 坐标系统一样的方位。 因此任何应用于与标识关联的物体的转换都应遵循 opengl 的转换规则,上述显示的值都是根据摄像头的坐标系来确定的,正负是以原点为界限,这个坐标系与数学中的坐标系理解类似。

下面就将介绍如何改变模型出现在标识卡上的位置。

还是以simpletest为例:

比如说,如果不想 把方块显示在标识坐标系统的中心,而是让它显示在顶部,可以把下面的代码: 

glTranslatef(0.0,0.0,25.0); 

代替为:

 glTranslatef(0.0,20.0,25.0); 

其中第一幅图为glTranslatef(0.0,0.0,25.0); 时候的图像

第二幅图为 glTranslatef(0.0,20.0,25.0); 时候的图像

glTranslatef(float x,float y, float z);分别对应着标识卡上的坐标系,只需要改变x,y,z的值就能改变虚拟物体出现在标识卡上的位置。

下面举几个例子,例如代码为:glTranslatef( 50.0, 0.0, 25.0 )的时候,是这样的


再把代码改为:glTranslatef( 100.0, 0.0, 25.0 )的时候,出现的图则是这样的


只需要改变x,y,z的值就能改变虚拟物体出现在标识卡上的位置

其中为glTranslatef( 0.0, 0.0, 0.0 )时,是这样的效果


猜你喜欢

转载自blog.csdn.net/qq_38643064/article/details/79765597
yz