通过置信值收集Android场景形成点云
我想用点云的置信值来描述它 首先,我创建了三个FloatBuffer,其中我基于阈值放置了单个点通过置信值收集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.
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();