1 准备工作,对于AR开发人员这个都是废话
a) 确定开发环境Unity(32位)+Vuforia(vuforia现在暂时不支持unity64的编辑)
b) 构建工程,创建场景
2 注册用于图画的线框标识图,作为识别对象,在三维制作软件(3dsMax、maya等)里面把线框图作为纹理赋给你的增强对象
3 获取ImageTarget四个角点,利用Camera的函数WorldToViewportPoint从世界坐标转换到视口坐标,加以判断,目的就是做到ImageTarget全部在视口内。
如果是NGUI,NGUI使用自己独立的正交摄像机,转换步骤如下:
1. 使用透视摄像机把世界坐标转换到屏幕坐标
Vector3 pos = Camera.main.WorldToScreenPoint(worldPos);
pos.z = 0f; //z一定要为0.
2. 使用UI摄像机转换到NGUI的世界坐标
Vector3 pos2 = UICamera.currentCamera.ScreenToWorldPoint(pos);
3. 赋值给NGUI控件
temp.transform.position = pos2; //temp为NGUI控件.
4 保证识别对象全部显示在视口内之后,利用Vuforia API提供的函数GetCameraImage()提取运行时图片,具体做法
见:https://developer.vuforia.com/forum/faq/unity-how-can-i-reset-frame-format-scene-reload
5 这里得到的图片就是手机屏幕看到的,里面应确保ImageTarget全部显示在视野内,获取图片的同时,确定ImageTarget四个角点在图片中的位置,把得到的图片数据以像素的形式保存到颜色数组(Color32[])中
6 写一个图像展开(就是图形图像学里面的一些变换)算法,就是根据ImageTarget四个角点在图片中的位置,获取颜色数据中的有效像素点,根据Imagetarget纹理大小,新创建一个Texture2D,以利用算法得到ImageTarget时时纹理,用什么算法具体自己研究,不在这里公开
7 把纹理替换掉增强对象上的纹理即可。
【个人广告】
希望大家可以支持我的个人微信号“小游戏情报局”