仅当检测到适当的水平面时才使用 iOS 11 ARKit(Scenekit) 放置 3D 对象
Place 3D object using iOS 11 ARKit(Scenekit) only if proper horizontal plane is detected
我使用 iOS 11 ARKit(Scenekit- https://developer.apple.com/sample-code/wwdc/2017/PlacingObjects.zip) 开发了一个 POC。当我尝试使用相机放置 3D 对象时,它会检测到水平面并放置它。
但是我可以将对象放置在任何地方(比如在空中),即使它没有检测到适当的水平面,这不是一个理想的场景。
是否可以限制用户,使对象只能放置在地板等有效水平面上,而不能放置在其他任何地方?那就是我想检测地板的高度并将物体仅放置在有效平面上方而不是空中。
您可以通过指定命中测试选项 ARHitTestResultTypeExistingPlaneUsingExtent
来限制 ARHitTestResult
用户触摸事件。
CGPoint tapPoint = [recognizer locationInView:self.sceneView];
NSArray<ARHitTestResult *> *result = [self.sceneView hitTest:tapPoint types:ARHitTestResultTypeExistingPlaneUsingExtent];
然后将选定的对象放置在ARHitTestResult.worldTransform
中指定的位置。
这将确保用户只能将对象放置在 ARKit 检测到的平面上。
我使用 iOS 11 ARKit(Scenekit- https://developer.apple.com/sample-code/wwdc/2017/PlacingObjects.zip) 开发了一个 POC。当我尝试使用相机放置 3D 对象时,它会检测到水平面并放置它。
但是我可以将对象放置在任何地方(比如在空中),即使它没有检测到适当的水平面,这不是一个理想的场景。
是否可以限制用户,使对象只能放置在地板等有效水平面上,而不能放置在其他任何地方?那就是我想检测地板的高度并将物体仅放置在有效平面上方而不是空中。
您可以通过指定命中测试选项 ARHitTestResultTypeExistingPlaneUsingExtent
来限制 ARHitTestResult
用户触摸事件。
CGPoint tapPoint = [recognizer locationInView:self.sceneView];
NSArray<ARHitTestResult *> *result = [self.sceneView hitTest:tapPoint types:ARHitTestResultTypeExistingPlaneUsingExtent];
然后将选定的对象放置在ARHitTestResult.worldTransform
中指定的位置。
这将确保用户只能将对象放置在 ARKit 检测到的平面上。