如何解决如何在ARKit中获取摄像机的正向LookAt向量?
我正在尝试获取ARKit中摄像机的前向矢量(LookAt),但我认为我做错了。
经过研究,我在下面编写了这个辅助扩展,但是从我获得的数据来看,我认为这是不对的。 (当我将相机指向上方时,Y分量为负)。
有人能让我知道我在获取相机指向世界空间时所犯的错误吗?另外,如果有更好的方法(CoreLocation?),我也很乐意。
extension ARCamera {
/**
The Camera forward orientation vector as vector_float3.
*/
var forward: vector_float3 {
get {
return vector_float3(-1 * self.transform.columns.3.x,-1 * self.transform.columns.3.y,-1 * self.transform.columns.3.z)
}
}
/**
The Camera forward orientation vector as vector_float3 normalized.
*/
var normalForward: vector_float3 {
get {
let theNormaled = simd_normalize(vector_float3(-1 * self.transform.columns.3.x,-1 * self.transform.columns.3.z))
return theNormaled
}
}
}
谢谢。
斯坦
解决方法
我认为我找到了一种更好的方法。
我创建了一个raycastQuery,只是将ARSCNView中间的点用作原点。方向是光线投射结果的属性。
这似乎仍然不是正确的方法,(我觉得我应该能够从Camera的transform属性中提取前向矢量,但这似乎行得通。
,public extension float4x4 {
var forwardVector: simd_float3 { simd_float3(columns.2.x,columns.2.y,columns.2.z).normalized() }
}
public extension simd_float3 {
/**
* Negates the vector described by simd_float3 and returns
* the result as a new simd_float3.
*/
func negate() -> simd_float3 {
return self * -1
}
/**
* Returns the length (magnitude) of the vector described by the simd_float3
*/
func magnitude() -> Float {
return sqrtf(x*x + y*y + z*z)
}
/**
* Normalizes the vector described by the simd_float3 to length 1.0 and returns
* the result as a new simd_float3.
*/
public func normalized() -> simd_float3 {
return self / magnitude()
}
}