SceneKit-无法使用位掩码进行查询 [英] SceneKit- Cannot query using bitmask

查看:0
本文介绍了SceneKit-无法使用位掩码进行查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们能够使用位掩码进行自定义光线投射:

let hitTest = sceneView.hitTest(location, options: [categoryBitMask: bitmask])

但hitTest现在已弃用,我想不出如何为光线投射查询设置位掩码:

let query = sceneView.raycastQuery(from: location, allowing: .estimatedPlane, alignment: .horizontal)

推荐答案

场景工具包

在SceneKit中,您可以在[SCNHitTestResult]的上下文中使用位掩码。hitTest(_:options:)实例方法尚未弃用,它可以在iOS 15.2中运行。

let sceneView = ARSCNView(frame: .zero)

enum HitTestType: Int {
    case object_A = 0b00000001
    case object_B = 0b00000010
}

let point: CGPoint = gesture.location(in: self.sceneView)

let bitMask = HitTestType.object_A.rawValue | HitTestType.object_B.rawValue

let results = sceneView.hitTest(point, options: [.categoryBitMask: bitMask])

附注

目前只有hitTest(_:types:)不推荐使用。


RealityKit

在RealityKit中,您可以在CollisionCastHit的上下文中使用位掩码:

let arView = ARView(frame: .zero)

let point: CGPoint = gesture.location(in: self.arView)
    
let (origin, direction) = arView.ray(through: point)!
    
let raycasts: [CollisionCastHit] = arView.scene.raycast(origin: origin, 
                                                     direction: direction, 
                                                        length: 50, 
                                                         query: .any, 
                                                          mask: .default, 
                                                    relativeTo: nil)

...或这样:

let raycasts: [CollisionCastHit]  = arView.hitTest(point, 
                                                   query: .any, 
                                                    mask: .default)

这篇关于SceneKit-无法使用位掩码进行查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆