AR捡取纹理功能实现

AR拾取纹理功能实现AR拾取纹理功能实现
最近大家比较关注ColARMix和涂乐等这些应用,作为开发人员吸引大家的就是运行时拾取识别目标纹理,在以线框为识别目标的图片上,用户可以图画颜色,识别之后把涂有色彩的图片作为纹理时时赋给增强对象,让用户图画的颜色体现在增强对象上,看到自己在平面上涂的颜色反应到三维增强对象上。很感谢想到这些创意的牛人们!
AR进入中国视线自己就开始关注,不知不觉几年过去了,可能是移动设备硬件的限制,之前两三年的时间一直没有得到很好的发展,随着移动设备硬件的强大支持,越来越多的AR应用走进人们的视野,特别是在少儿教育这一块,ColAR Mix、涂乐、小熊尼奥等都是非常成功的案例,在AR少儿教育方面比较有创新性的功能也应属AR运行时拾取纹理功能了,大家都非常关注,努力去实现,平常在大学做技术培训,这一块也炒的非常热。当知道ColAR Mix有拾取纹理这个功能后,感觉非常新颖,创意点也非常好,用在少儿教育方面恰到好处,能让孩子在乐趣和兴趣中快乐的学习成长。
至于此,作为程序开发人员,也尝试着实现,比如想到采集到图片之后,用OpenCV去实现图形图像变换以得到希望的目标纹理,走了不少弯路,但功夫不负有新人,最终实现了AR运行时拾取纹理功能。
先看看自己实现的具体效果:

现在把自己实现大致过程给列一下,相互学习,共同进步!
步骤:

  1.  准备工作,对于AR开发人员这个都是废话
    

a) 确定开发环境Window7+Unity+Vuforia,这个也没什么限制,根据自己情况而定
b) 构建工程,创建场景

  1.  注册用于图画的线框标识图,作为识别对象,在三维制作软件(3dsMax、maya等)里面把线框图作为纹理赋给你的增强对象
    
  2.  获取ImageTarget四个角点,利用Camera的函数WorldToViewportPoint从世界坐标转换到视口坐标,加以判断,目的就是做到ImageTarget全部在视口内
    
  3.  保证识别对象全部显示在视口内之后,利用Vuforia API提供的函数GetCameraImage()提取运行时图片,具体做法见:https://developer.vuforia.com/forum/faq/unity-how-can-i-reset-frame-format-scene-reload
    
  4.  这里得到的图片就是手机屏幕看到的,里面应确保ImageTarget全部显示在视野内,获取图片的同时,确定ImageTarget四个角点在图片中的位置,把得到的图片数据以像素的形式保存到颜色数组(Color32[])中
    
  5.  写一个图像展开(就是图形图像学里面的一些变换)算法,就是根据ImageTarget四个角点在图片中的位置,获取颜色数据中的有效像素点,根据Imagetarget纹理大小,新创建一个Texture2D,以利用算法得到ImageTarget时时纹理,用什么算法具体自己研究,不在这里公开
    
  6.  把纹理替换掉增强对象上的纹理即可。
    

这些是自己实现拾取颜色的流程,可能有更好的实现形式,希望在实现方式上可以和大家交流探讨。自己可以根据这些步骤来实现,相关的论坛上也有很多有用的信息,大家都可以参考,少走些弯路。毕竟要去实现个功能,肯定需要花费大量时间,多点耐心。
无论学习交流还是商用都可以发消息,相互学习,互利共赢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,503评论 25 709
  • 前言 也许你已经在生活中见识过AR(即增强现实)技术所带给你的神奇感受了,肯德基搞过的魔法小精灵活动,腾讯QQ做过...
    超级码李阅读 2,583评论 0 18
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,292评论 4 61
  • 摘自《鸟哥的Linux私房菜》-第十七章、程序管理与 SELinux 初探 PS(1) 将某个时间点的程序运行情况...
    tarzipc阅读 407评论 0 0
  • 回想起去年的今天,心情是既紧张又兴奋…整个婚礼策划,到交换戒指,每一个细节都充满意义,这一天绝对比领证那...
    vivi江江江阅读 335评论 2 1