调用TangoSupport.transformPointCloud(transform.matrix,pointCloud)时Tango Java应用程序崩溃

调用TangoSupport.transformPointCloud(transform.matrix,pointCloud)时Tango Java应用程序崩溃,java,android,google-project-tango,Java,Android,Google Project Tango,我是Google Tango开发的新手,我正在尝试将多个点云压缩成一个点云。为此,我构建了以下代码: for (int i = 0; i < mPointCloudList.size(); ++i) { TangoPointCloudData pointCloud = mPointCloudList.get(i); TangoSupport.TangoMatrixTransformData transform = Tang

我是Google Tango开发的新手,我正在尝试将多个点云压缩成一个点云。为此,我构建了以下代码:

for (int i = 0; i < mPointCloudList.size(); ++i) {

    TangoPointCloudData pointCloud = mPointCloudList.get(i);

    TangoSupport.TangoMatrixTransformData transform =
                        TangoSupport.getMatrixTransformAtTime(pointCloud.timestamp,
                                TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
                                TangoPoseData.COORDINATE_FRAME_CAMERA_DEPTH,
                                TangoSupport.TANGO_SUPPORT_ENGINE_OPENGL,
                                TangoSupport.TANGO_SUPPORT_ENGINE_TANGO,
                                TangoSupport.ROTATION_IGNORED);

    TangoPointCloudData pcd = TangoSupport.transformPointCloud(transform.matrix, pointCloud);

    int numPoints = pcd.numPoints;

    if (numPoints != 0) {
        int numFloats = 4 * numPoints;
        for (int j = 0; j < numFloats; j = j + 4) {
            myOutWriter.write(String.format("v %f %f %f\n", pcd.points.get(j),
                                pcd.points.get(j), pcd.points.get(j + 2)));
        }
    }
}
关于如何解决这个问题或如何解决这个问题有什么想法吗


谢谢

我通过这样做来解决这个问题:

TangoSupport.TangoMatrixTransformData transform =
                        TangoSupport.getMatrixTransformAtTime(pointCloud.timestamp,
                                TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
                                TangoPoseData.COORDINATE_FRAME_CAMERA_DEPTH,
                                TangoSupport.TANGO_SUPPORT_ENGINE_OPENGL,
                                TangoSupport.TANGO_SUPPORT_ENGINE_TANGO,
                                TangoSupport.ROTATION_IGNORED);

if (transform.statusCode == TangoPoseData.POSE_VALID) {
    int numPoints = pointCloud.numPoints;
    Vector3 point = new Vector3(0f, 0f, 0f);

    double dTransformMatrix[] = new double[transform.matrix.length];

    for (int k = 0; k < transform.matrix.length; k++) {
        dTransformMatrix[k] = (double) transform.matrix[k];
    }

    if (numPoints != 0) {
        int numFloats = 4 * numPoints;
        for (int j = 0; j < numFloats; j = j + 4) {
             if (pointCloud.points.get(j + 3) >= 0.5) {
                 point.x = pointCloud.points.get(j);
                 point.y = pointCloud.points.get(j + 1);
                 point.z = pointCloud.points.get(j + 2);
                 point = point.multiply(dTransformMatrix);
                 myOutWriter.write(String.format("v %f %f %f\n", point.x, point.y, point.z));
             }
         }
     }
}
TangoSupport.TangoMatrixTransformData转换=
TangoSupport.GetMatrix转换时间(pointCloud.timestamp,
A.协调服务的框架和启动,
Tangopoa.坐标、帧、相机、深度、,
TangoSupport.TANGO\u支持\u引擎\u OPENGL,
TangoSupport.TANGO\u支持\u引擎\u TANGO,
TangoSupport。旋转(忽略);
if(transform.statusCode==a.POSE\u有效){
int numPoints=pointCloud.numPoints;
矢量3点=新矢量3(0f,0f,0f);
double dTransformMatrix[]=新的double[transform.matrix.length];
for(int k=0;k=0.5){
point.x=pointCloud.points.get(j);
point.y=pointCloud.points.get(j+1);
point.z=pointCloud.points.get(j+2);
点=点乘法(数据传输矩阵);
myOutWriter.write(String.format(“v%f%f%f\n”,point.x,point.y,point.z));
}
}
}
}
TangoSupport.TangoMatrixTransformData transform =
                        TangoSupport.getMatrixTransformAtTime(pointCloud.timestamp,
                                TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,
                                TangoPoseData.COORDINATE_FRAME_CAMERA_DEPTH,
                                TangoSupport.TANGO_SUPPORT_ENGINE_OPENGL,
                                TangoSupport.TANGO_SUPPORT_ENGINE_TANGO,
                                TangoSupport.ROTATION_IGNORED);

if (transform.statusCode == TangoPoseData.POSE_VALID) {
    int numPoints = pointCloud.numPoints;
    Vector3 point = new Vector3(0f, 0f, 0f);

    double dTransformMatrix[] = new double[transform.matrix.length];

    for (int k = 0; k < transform.matrix.length; k++) {
        dTransformMatrix[k] = (double) transform.matrix[k];
    }

    if (numPoints != 0) {
        int numFloats = 4 * numPoints;
        for (int j = 0; j < numFloats; j = j + 4) {
             if (pointCloud.points.get(j + 3) >= 0.5) {
                 point.x = pointCloud.points.get(j);
                 point.y = pointCloud.points.get(j + 1);
                 point.z = pointCloud.points.get(j + 2);
                 point = point.multiply(dTransformMatrix);
                 myOutWriter.write(String.format("v %f %f %f\n", point.x, point.y, point.z));
             }
         }
     }
}