我想从从激光雷达接收到的深度数据中删除属于墙壁的深度数据。
我启用了垂直平面检测,我可以检索平面锚几何体和平面中心。我也通过计算平面法线来计算平面方程。
法线计算是基于从平面 Anchor 的顶点列表中取两个顶点(点 P 和 Q)并创建从中心到点 P 和 Q 的两个向量来完成的。
这是我迄今为止尝试过的,
let planeCenter = planeAnchor.transform * simd_float4(planeAnchor.center,1)
let numberOfVertices = planeAnchor.geometry.vertices.count/2
//print ("Wall Plane Abs Center: ", planeCenter)
let p1 = planeAnchor.transform * simd_float4(planeAnchor.geometry.vertices[0],1)
let p2 = planeAnchor.transform * simd_float4(planeAnchor.geometry.vertices[numberOfVertices],1)
let origin = simd_float3(planeCenter[0],planeCenter[1],planeCenter[2])
let p1_f3 = simd_float3(p1[0],p1[1],p1[2])
let p2_f3 = simd_float3(p2[0],p2[1],p2[2])
let v1 = p1_f3 - origin
let v2 = p2_f3 - origin
let planeNormalUn = ( cross(v1, v2))
所以现在我假设我在世界坐标中有点 P1 和 P2 以及原点。这个假设是真的吗?
如果是这样,那么这意味着我对从激光雷达接收到的深度数据使用 frame.camera.transform 将它们转换为世界坐标,结果点应该位于平面上(如果它们在现实世界中的平面上) .
如果我在某处错了,请纠正我,因为这不起作用。