仅在检测到适当的水平面时,才使用iOS 11 ARKit(Scenekit)放置3D对象

时间:2017-08-04 06:44:26

标签: scenekit ios11 xcode9-beta arkit

我使用iOS 11 ARKit开发了一个POC(Scenekit- https://developer.apple.com/sample-code/wwdc/2017/PlacingObjects.zip)。当我尝试使用相机放置3D物体时,它会检测水平面并放置它。

但是我能够将物体放置在任何地方(比如在空中),即使它没有检测到不适合的水平面也不是理想的场景。

是否可以限制用户,使对象只能放置在有效的水平平面,如地板而不是其他任何地方?那就是我想要检测地板的高度并将物体放在有效的飞机上方,而不是在空中。

1 个答案:

答案 0 :(得分:1)

您可以通过指定匹配测试选项ARHitTestResult来限制ARHitTestResultTypeExistingPlaneUsingExtent用户触摸事件。

CGPoint tapPoint = [recognizer locationInView:self.sceneView];
NSArray<ARHitTestResult *> *result = [self.sceneView hitTest:tapPoint types:ARHitTestResultTypeExistingPlaneUsingExtent];

然后将对象放置在ARHitTestResult.worldTransform中指定的位置。 这将确保用户只能将对象放置在ARKit检测到的平面上。