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/

相关文章:

ios - CloudKit - 完整的错误处理示例

ios - Swift:让 subview Controller 保持原位,即使使用新 Controller ?

linux - 从linux命令行抓图(uvccapture抓黑图)

android - 如何检测 "double"是否按下了主页按钮?

ios - 直接在应用程序中呈现下载文件的预览

IOS Apple 通用链接随机失败

C++ 访问 vector 超出 size() 和低于 capacity()

c++ - 当一个元素从两者之间移除时,STL<vector> 中会发生什么?

java - 使用 2D HUD 图标跟踪 3D 环境中的对象

Android ImageView -相机