Tango手机分析 3D点云 室内环境重建

来源:互联网 发布:七月煤炭进出口数据 编辑:程序博客网 时间:2024/05/18 17:04

之前一直在PC使用pmd pico flex深度相机,从上一篇文章开始尝试使用Tango手机。Tango手机集成了pmd Sunny深度相机。

tango渲染3D方式

tango范例通过2种方式来显示3D效果:
1、显示点云范例中,利用的是印度人写的插件rajawali。rajawali是基于OpenGLES,集成了大量功能,上手很方便,但不够自由。就像“美图秀秀”。
2、室内环境重建范例中,则是直接利用OpenGLES20来写的。OpenGLES是基于C语言开发,编写不方便,尤其是着色器部分比较复杂,但优势是自由,类似于“Photoshop”。

tango获取姿态方式

tango可通过2种方式获取姿态:
1、IMU惯导。
2、普通摄像头。

Tango室内重建 架构

UI主流程

Created with Raphaël 2.1.0设置Tango/TangoConfigTango.connectListener读取点云、图像通过TangoPointCloudManager、TangoImageBuffer保存当前帧数据设置OpenGLES渲染器Tango.connectListener读取点云、图像开启GLSurfaceView渲染视图

渲染流程

Created with Raphaël 2.1.0设置着色器TangoSupport.getMatrixTransformAtTime获取姿态数据,以矩阵形式传给着色器将当前帧点位置、颜色、索引信息存入HashMap<index,buffer>HashMap的位置、颜色、索引存入着色器渲染是否停止绘图no

数据处理流程

Created with Raphaël 2.1.0点云存入TangoPointCloudManager获取当前帧的TangoPointCloudData、TangoPoseData、TangoImageBuffer、TangoPoseData通过Tango3dReconstruction的native方法生成对准后的彩色点云TangoMesh[]将当前帧的TangoMesh的index与HashMap中对比,将当前帧存入HashMap进行OpenGLES渲染

封装native方法

环境配置

3D重建部分通过Tango3dReconstruction类来实现,需要在app的build.gradle中配置compile “com.google.tango:sdk-reconstruction:1.55”。

这样就能添加tango_java_3d_reconstruction_api 本地库

涉及功能

Created with Raphaël 2.1.0Tango3dReconstructionConfigTango3dReconstruction通过updateWithPointCloud打包点云(及姿态)、图像(及姿态)通过extractMeshSegment生成mesh及index生成当前帧的TangoMesh[]

其中TangoMesh中已实现RGB和XYZ坐标点的对准,及三角形网格序列的排布。既可通过
glDrawElements(GL_POINTS……)实现彩色点云效果。
glDrawElements(GL_POINTS……)实现彩色点云效果。
glDrawElements(GL_TRIANGLES……)实现彩色网格显示。
glDrawElements(GL_TRIANGLES……)实现彩色网格显示。

原创粉丝点击