ARToolkit例子中的simpleVRML.c改写(三)
来源:互联网 发布:淘宝高达模型的黑店 编辑:程序博客网 时间:2024/06/05 18:38
ARToolkit提供了标识在摄像机坐标系统中的位置,可以使用opengl矩阵系统计算出虚拟物体的位置。标识坐标系统有着和opengl坐标系统一样的方位。因此任何应用于与标识关联的物体的转换都应遵循opengl的转换规则。ARToolKit所使用的坐标系统如图1所示。
图1 ARToolKit坐标系统
(1)摄像机坐标系与标识物坐标系的关系。
(2)摄像机坐标系与理性屏幕坐标系的关系。
其中 为摄像机坐标系与标记物坐标系的变换矩阵;C为摄像机参数,为已知量;M为标记物坐标系,也就是物理坐标系;R为3×3的单位正交矩阵;T为三维平移向量;f是摄像机的焦距;(x,y)是空间任意一点p的物理坐标。
标识卡和摄像机之间的关系非常重要,它们之间的转换使多个坐标系统的工作成为可能。在这些坐标系统的基础上,同样可以得到任何两个不同的坐标系统之间的转换关系。
我在simpleVRML.c代码的static void Display(void)函数中添加了如下代码,得到标识卡2在标识卡1坐标系里面的转移矩阵wmat2[3][4],其中(wmat2[0][3],wmat2[1][3],wmat2[2][3])是标示卡2在标示卡1坐标系里面的相对转移矩阵。将其在控制台输出,观察输出的值,输出结果如图2所示,让标识物2与标识物1之间的距离在某个范围内,就触发事件。
程序通过 arUtilMatInv()函数来对矩阵求逆,通过arUtilMatMul()函数来做一个矩阵乘法,即wmat2=gObjectData[1].trans*wmat1。
if( gObjectData[0].visible >= 0&& gObjectData[1].visible >= 0 ) { double wmat1[3][4], wmat2[3][4]; arUtilMatInv(gObjectData[0].trans, wmat1); arUtilMatMul(wmat1, gObjectData[1].trans, wmat2);printf("%8.4f,%8.4f,%8.4f\n",wmat2[0][3],wmat2[1][3],wmat2[2][3]);double dis=wmat2[0][3]*wmat2[0][3]+wmat2[1][3]*wmat2[1][3]+wmat2[2][3]*wmat2[2][3];if(dis<8000){glTranslatef(300.0,100.0,100.0);arVrmlDraw(gObjectData[0].vrml_id);}
图3 两个标识物之间的距离不在某个范围内 图4 两个标识物之间的距离在某个范围内,触发事件
- ARToolkit例子中的simpleVRML.c改写(三)
- ARTOOLKIT例子中的simpleVRML.c改写(一)
- ARToolkit例子中的simpleVRML.c改写(二)
- Artoolkit的例子simpleVRML详解
- Artoolkit例子中的simpletest.c改写-----识别多个标识
- Artoolkit例子中的simpletest.c改写-----将显示的模型移动
- Artoolkit例子中的simpletest.c改写-----将显示的模型放在长方体内
- ARToolKit例子中simpleTest.c改写-----旋转标识卡,显示出旋转角度
- ARtoolkit例子中的交互代码paddleInteractionTest.c理解
- 【学习ARToolkit小记之三】 摄像头标定(Camera Calibration)
- ARtoolkit学习一:Paddle交互代码理解和改写
- ARToolKit
- netfilter 例子改写1
- netfilter例子改写2
- netfilter例子改写3
- netfilter例子改写4
- netfilter例子改写5
- ARToolKit的安装配置及例子演示(WindowsXP,VC++6.0开发环境)(zz)
- Android Render(四)supportVersion 27.0.0源码RecyclerView绘制流程解析
- DVRRDK之MCFW下GPIO操作
- 使用java如何爬取12306的余票信息?
- 断言与静态断言
- 寻找有环单链表的入口节点
- ARToolkit例子中的simpleVRML.c改写(三)
- 使用curl抓取百度首页
- java .class文件为什么以CAFEBABE开头?
- MONGDB学习笔记
- 系统时变性与因果性的判断
- 条款18:避免使用vector<bool>(转)
- 配置虚拟机
- 函数的调用堆栈
- eclipse连接hadoop