ARKIT:在一个SCNNode与另一个SCNNode之间绘制线时观察到滞后

时间:2019-02-01 07:29:53

标签: ios swift xcode augmented-reality arkit

我有画线,并创建带有尺寸的框。在iPhone 8及更高版本上面临滞后问题,但在iPhone7上运行正常。

用于更新行:

fileprivate func updateLine(_ line: SCNNode, from position: SCNVector3, distance: Float, axis: SCNVector3.Axis) {
        guard let box = line.geometry as? SCNBox else {
            fatalError("Tried to update something that is not a line")
        }

        let absDistance = CGFloat(abs(distance))
        let offset = distance * 0.5
        switch axis {
        case .x:
            box.width = absDistance
            line.position = position + SCNVector3(x: offset, y: 0, z: 0)
        case .y:
            box.height = absDistance
            line.position = position + SCNVector3(x: 0, y: offset, z: 0)
        case .z:
            box.length = absDistance
            line.position = position + SCNVector3(x: 0, y: 0, z: offset)
        }
    }

enter image description here

iPhone 7:

CPU:48%

内存:199MB

FPS:60

帧渲染时间:1.9毫秒

iPhone 8 Plus: CPU:48%

内存:236 MB

GPU:4.5

FPS:60

帧渲染时间:16.6 ms

项目中没有内存泄漏。

1 个答案:

答案 0 :(得分:0)

我在iPhone 8及更高版本上面临滞后的问题,但是在iPhone7上画线很流畅,所以我实现了

 // Show statistics such as fps and timing information
        sceneView.showsStatistics = true

要比较iPhone7和iPhone8之间的区别,加上我注意到iPhone 8Plus及更高版本需要18ms的帧渲染时间,而对于iPhone 7,它只是1ms的帧渲染时间所以我将FPS从默认值60FPS降低了

sceneView.preferredFramesPerSecond = 40

现在,解决滞后问题

enter image description here