swift - 如何在 ARKit 中获取相机的前向 (LookAt) 向量?

标签 swift vector camera arkit

我试图在 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.y,
                                                           -1 * self.transform.columns.3.z))
            return theNormaled
        }
    }
}

提前致谢。

斯坦

最佳答案

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()
    }
}

关于swift - 如何在 ARKit 中获取相机的前向 (LookAt) 向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63795941/

相关文章:

c++ - 如果包含重复元素,如何合并多个 vector ?

c++ - 运行时错误 : reference binding to null pointer of type 'std::vector<int, std::allocator<int>>' (STL_vector. h)

android - EditText drwableLeft 不适用于向量

android - 如何修复 Android 模拟器中的 "Fail to connect to camera service"异常

swift - 使用未声明的类型错误 : How to compare object with class type?

ios - 分离约束和 UI 元素(UIView、UIButton、UITextField 等)声明以分离 swift 文件

从 AVCaptureSession 捕获的 iPhone 图像比例

file - 在 Flutter 中保存照片(尤其是到相机胶卷)

iOS 13 : @objc VC. navigationController(_:willShow:animated:):线程违规:预期主线程

ios - 无法将变量从类中的函数传递到 Swift 中的另一个函数