在 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)
你也可以参考这个问题及其接受的答案:
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)
你也可以参考这个问题及其接受的答案: