获取头部
WorldTrackingProvider
该类可以启动ARKit 进行头部位置追踪,挂载一个System就可以了
Entity位置
///计算两个位置 之间的方向向量
let direction = normalize(deviceTransform.translation - entity.transform.translation)
// 计算旋转轴 0 0 1 模型的面向量 一般默认都是 z 轴
let rotationAxis = cross(.init(x: 0, y: 0, z: 1), direction)
// 计算出旋转角度
let rotationAngle = acos(dot(.init(x: 0, y: 0, z: 1), direction))
// 创建四元数表示旋转
let rotation = simd_quatf(angle: rotationAngle, axis: normalize(rotationAxis))
///我写的效果是不管该Entity如何旋转都始终面向用户展示信息,信息是挂载到该旋转的Entity
///所以需要当前的Entity的rotation 进行逆矩阵,再进行对刚刚计算出来的rotation,进行矩阵合成也就是 rotation.inverse * rotation
self.widthEntity?.transform.rotation = lineBoxEntity.transform.rotation.inverse * rotation