通过置信值收集Android场景形成点云

通过置信值收集Android场景形成点云,android,point-clouds,arcore,sceneform,Android,Point Clouds,Arcore,Sceneform,我想用点云的置信值来描述它 首先,我创建了三个FloatBuffer,其中我基于阈值放置了单个点 private FloatBuffer makeFLoatBuffer(ArrayList<Float> conf) { FloatBuffer confFB = FloatBuffer.allocate(conf.size()); for(Float value : conf){ confFB.put(value); } confFB.

我想用点云的置信值来描述它

首先,我创建了三个FloatBuffer,其中我基于阈值放置了单个点

private FloatBuffer makeFLoatBuffer(ArrayList<Float> conf) {
    FloatBuffer confFB = FloatBuffer.allocate(conf.size());
    for(Float value : conf){
        confFB.put(value);
    }

    confFB.rewind();
    return confFB;
}

private ArrayList<FloatBuffer> splitPointCloudOnConfidence(PointCloud cloud) {
    ArrayList<Float> conf1 = new ArrayList<>();
    ArrayList<Float> conf2 = new ArrayList<>();
    ArrayList<Float> conf3 = new ArrayList<>();
    ArrayList<FloatBuffer> floatBufferArray = new ArrayList<>();

    FloatBuffer buf_temp = cloud.getPoints();
    int buf_temp_limit = buf_temp.limit();
    for (int i = 0; i < buf_temp_limit / 4; i++) {

        float x = buf_temp.get(i * 4);
        float y = buf_temp.get(i * 4 + 1);
        float z = buf_temp.get(i * 4 + 2);
        float confidence = buf_temp.get(i * 4 + 3);

        if(confidence < 1.0 && confidence > 0.5){
            conf1.add(x);
            conf1.add(y);
            conf1.add(z);
            conf1.add(confidence);
        } else if(confidence < 0.5 && confidence > 0.2) {
            conf2.add(x);
            conf2.add(y);
            conf2.add(z);
            conf2.add(confidence);
        } else {
            conf3.add(x);
            conf3.add(y);
            conf3.add(z);
            conf3.add(confidence);
        }
    }

    floatBufferArray.add(makeFLoatBuffer(conf1));
    floatBufferArray.add(makeFLoatBuffer(conf2));
    floatBufferArray.add(makeFLoatBuffer(conf3));

    return floatBufferArray;
}
在ONUPDATAEListener中,我将特定的数据提供给三个节点

PointCloud pC = frame.acquirePointCloud();

ArrayList<FloatBuffer> bufHolder = splitPointCloudOnConfidence(pC);

pointCloudNodeTestRed.update(pC, bufHolder.get(2));
pointCloudNodeTestYellow.update(pC,  bufHolder.get(1));
pointCloudNodeTestGreen.update(pC,  bufHolder.get(0));

pC.release();
PointCloud pC=frame.acquirePointCloud();
ArrayList bufHolder=splitPointCloudOnConfidence(pC);
更新(pC,bufHolder.get(2));
更新(pC,bufHolder.get(1));
更新(pC,bufHolder.get(0));
pC.release();

我的问题是一般性的。有没有更好的方法来实现这种可视化?

我的理解是,
SceneForm
不再由谷歌维护。 使用
ARCore
GLES20
作为
PointCloudRenderer.java
示例文件的修改版本,如 链接如下,但所有点都使用多种颜色而不是一种颜色

PointCloud pC = frame.acquirePointCloud();

ArrayList<FloatBuffer> bufHolder = splitPointCloudOnConfidence(pC);

pointCloudNodeTestRed.update(pC, bufHolder.get(2));
pointCloudNodeTestYellow.update(pC,  bufHolder.get(1));
pointCloudNodeTestGreen.update(pC,  bufHolder.get(0));

pC.release();