visionOS RealityKit Entity始终面向用户头部位置计算

获取头部

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。