在 RealityKit 中需要 MeshResource/Box 的开始和结束位置

Need starting and ending position of MeshResource/Box in RealityKit

let material = SimpleMaterial.init(color: .red,roughness: 1,isMetallic: false)
let doorBox = MeshResource.generateBox(width: 0.02,height: 1, depth: 0.5)
let doorEntity = ModelEntity(mesh: doorBox, materials: [material])
let anchor = ARAnchorEntity()
anchor.addChild(doorEntity)

在RealityKit中,我有一个盒子,它是MeshResource,盒子看起来像一条线。我在 ARView 中添加了这个框,并设置了实时相机位置。在一种情况下,我想知道 Box/Line 的开始和结束位置。

假设带有实体的盒子有 middle/current 位置 (0.1,0.23,-1.3) 那么盒子的左右位置是什么?带框的锚点会随着相机的移动不断改变它的位置。

提前致谢。

Check explanation with the image

您可以使用此扩展程序。

extension Entity {
    
    func getDistancedPosition(x: Float, y: Float, z: Float) -> SIMD3<Float> {
        
        let referenceNodeTransform = transform.matrix
        var translationMatrix = matrix_identity_float4x4
        translationMatrix.columns.3.x = x
        translationMatrix.columns.3.y = y
        translationMatrix.columns.3.z = z
        let updatedTransform = matrix_multiply(referenceNodeTransform,
                                               translationMatrix)
        
        return .init(updatedTransform.columns.3.x,
                     updatedTransform.columns.3.y,
                     updatedTransform.columns.3.z)
        
    }
    
}

要左右移动您的盒子,请使用以下代码:

let side1Position = door.getDistancedPosition(x: 0, y: 0, z: self.viewModel.doorDepth/2)
let side2Position = door.getDistancedPosition(x: 0, y: 0, z: -(self.viewModel.doorDepth/2))

要使方框看起来像线条,您必须使用深度。如果不是,那么您可以相应地更改参数。例如door.getDistancedPosition(x: -0.1, y: 0, z: 0)

你也可以参考这个问题及其接受的答案: