需要RealityKit中MeshResource/Box的起止位置

问题描述

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 的开始和结束位置。

假设带有实体的框具有中间/当前位置 (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,z: -(self.viewModel.doorDepth/2))

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

您也可以参考此问题及其已接受的答案:

Position a SceneKit object in front of SCNCamera's current orientation

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...