RealityKit - правильная проверка попадания в ARView

У меня есть такой код:

@objc func handleTap(_ sender: UITapGestureRecognizer) {
    
    let tapLocation = sender.location(in: arView)
    
    let hitResult0 = scnView?.hitTest(tapLocation)

    if let hitResult = arView?.entity(at: tapLocation) {
         // ...
    }
}

hitResult дает плохую точность. Он возвращает тот же объект (WheelbarrowHandles), даже если я коснулся другого, меньшего размера. hitResult0 выдает все объекты рядом с местом касания (слишком много).

Загрузка модели:

self.theModel = try! Entity.load(named: "wheelborrow")
self.theModel?.generateCollisionShapes(recursive: true)

Генерируются ли плохие формы столкновения?


Обновлено

Я попробовал сделать следующее вместо генерации:

modelEntity.collision = CollisionComponent(shapes: [ShapeResource.generateConvex(from: modelEntity.model!.mesh)])

и это работает.


person Sam    schedule 02.07.2020    source источник
comment
Чтобы узнать, как работает проверка попаданий и кастинг лучей, посмотрите этот пост - stackoverflow.com/questions/56466773/, в этом посте - stackoverflow.com/questions/56736645/, а на этом - stackoverflow.com/questions/60294367/   -  person Andy Fedoroff    schedule 03.07.2020
comment
Tnx, @AndyFedoroff. Я попробую рейкастинг и обратную запись.   -  person Sam    schedule 07.07.2020


Ответы (1)


Сгенерированные формы столкновения:

generateCollisionShapes(recursive: true)

введите описание изображения здесь

И со следующим кодом:

modelEntity.collision = CollisionComponent(shapes: [ShapeResource.generateConvex(from: modelEntity.model!.mesh)])

введите описание изображения здесь

person Sam    schedule 07.07.2020
comment
Это потрясающе, спасибо за эту информацию !. Также как вы визуализировали форму / каркас? : O - person Dariusz; 19.06.2021