Swift 如何在ARKit中获得相机的前向(注视)矢量?
我试图在ARKit中得到相机的前向(注视)矢量,但我想我搞错了什么 在做了一些研究之后,我在下面写了这个helper扩展,但是我认为从我得到的数据来看它是不对的。(当我将相机指向上时,Y分量为负数) 有人能告诉我,在获取摄像机指向世界空间的矢量时,我出了什么错吗?此外,如果有更好的方法获得它(CoreLocation?),我也愿意接受Swift 如何在ARKit中获得相机的前向(注视)矢量?,swift,vector,camera,arkit,Swift,Vector,Camera,Arkit,我试图在ARKit中得到相机的前向(注视)矢量,但我想我搞错了什么 在做了一些研究之后,我在下面写了这个helper扩展,但是我认为从我得到的数据来看它是不对的。(当我将相机指向上时,Y分量为负数) 有人能告诉我,在获取摄像机指向世界空间的矢量时,我出了什么错吗?此外,如果有更好的方法获得它(CoreLocation?),我也愿意接受 extension ARCamera { /** The Camera forward orientation vector as vector_
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.y,
-1 * self.transform.columns.3.z))
return theNormaled
}
}
}
提前谢谢
斯坦我想我找到了一个更好的方法 我创建了一个RayCaskQualk,并只使用了在ARSCNVIEW中间的点作为原点。方向是光线投射结果的一个属性
这似乎仍然不是正确的方法,(我觉得我应该能够从相机的变换属性中提取前向向量,但这似乎有效。我认为我找到了更好的方法
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()
}
}
我创建了一个RayCaskQualo,只使用了在ARSCNVIEW中间的点作为原点。这个方向是光线投射结果的属性。
这似乎仍然不是正确的方法,(我觉得我应该能够从相机的变换属性中提取前向向量,但这似乎是可行的
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()
}
}