ARKit: уведомление при обнаружении характерной точки? - PullRequest
0 голосов
/ 06 июня 2018

Этот ответ и другие объясняют, как получать уведомления, когда ARKit обнаруживает якоря или плоскости, но как вы получаете уведомления, когда ARKit обнаруживает характерные точки?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Глядя на API, это в некоторой степени похоже на ответы, с которыми вы связались.

Используя ARSessionDelegate session(_ session: ARSession, didUpdate frame: ARFrame), вы можете получить доступ к rawFeaturePoints только что переданного ARFrame.

Таким образом, это выглядело бы примерно так:

// Not actually tested
class MyARSessionDelegate: ARSessionDelegate {
    var previouslyDetectedPointCount = 0
    func session(_ session: ARSession, didUpdate frame: ARFrame) {
        // Check if new points are detected
        if previouslyDetectedPointCount != frame.rawFeaturePoints?.points.count {
            // point count has changed
             previouslyDetectedPointCount = frame.rawFeaturePoints!.points.count
        }
    }
}

Хотя, почему вы хотели бы искать конкретные пункты, любопытно.В документации четко говорится:

ARKit не гарантирует, что число и расположение необработанных характерных точек останутся стабильными между выпусками программного обеспечения или даже между последующими кадрами в одном и том же сеансе.

0 голосов
/ 07 июня 2018

Это не похоже на идеальное решение, но оно работает.Реализуйте функцию func session(_ session: ARSession, didUpdate frame: ARFrame) из протокола ARSessionDelegate и проверьте наличие характерных точек в каждом кадре.

func session(_ session: ARSession, didUpdate frame: ARFrame) {
    // Show tap icon once we find feature points
    if !detectedFeaturePoints, let points = frame.rawFeaturePoints?.points, let firstPoint = points.first {
        detectedFeaturePoints = true
    }
}
...