【问题标题】:How do I get the forward (LookAt) vector of the camera in ARKit?如何在 ARKit 中获取相机的前向(LookAt)向量?
【发布时间】:2020-12-26 23:01:47
【问题描述】:

我正在尝试在 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
        }
    }
}

提前致谢。

斯坦

【问题讨论】:

    标签: swift vector camera arkit


    【解决方案1】:
    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()
        }
    }
    

    【讨论】:

      【解决方案2】:

      我想我找到了更好的方法。

      我创建了一个 raycastQuery,只是使用 ARSCNView 中间的点作为原点。方向是光线投射结果的一个属性。

      这似乎仍然不是正确的方法,(我觉得我应该能够从相机的变换属性中提取前向矢量,但这似乎可行。

      【讨论】:

        猜你喜欢
        • 2018-05-23
        • 2013-03-21
        • 2018-07-21
        • 1970-01-01
        • 2019-06-07
        • 2019-09-03
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多