我在ARKit中有一个简单的SCNNode,我试图将它拖到手机上的任何地方.这是我的代码.
@objc func pan(recognizer :UIGestureRecognizer) {
guard let currentFrame = self.sceneView.session.currentFrame else {
return
}
var translation = matrix_identity_float4x4
translation.columns.3.z = -1.5
let sceneView = recognizer.view as! ARSCNView
let touchLocation = recognizer.location(in: sceneView)
let hitTestResult = sceneView.hitTest(touchLocation, options: [:])
if !hitTestResult.isEmpty {
print("hit result")
guard let hitResult = hitTestResult.first else {
return
}
let node = hitResult.node
node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation)
}
}
Run Code Online (Sandbox Code Playgroud)
问题是阻力很慢而且不平滑.
我正在使用ARKit开展一个小项目.我希望能够在点击时将对象添加到我的AR SceneView,用双击删除它们,然后用平移或拖动拖动主题.
放置对象的初始点击工作正常,但我在移除节点和拖动时遇到了一些问题.
删除和拖动的主要问题是实际上"保持"或单击SCNNode非常困难.大多数结果都没有出现在我添加的SCNNode上.
第二个问题是拖动有点儿错误,SCNNode实际上并没有像我的手指那样在拖动上移动.
我决定在github上创建一个项目,链接在这里:https://github.com/theraad/ARAttempt
但我也会发布我的代码来删除对象并拖动对象:
-(void)handleRemoveObject:(UITapGestureRecognizer *)recognizer {
NSLog(@"Long Press Fired");
CGPoint tapPoint = [recognizer locationInView:_sceneView];
NSArray <SCNHitTestResult *> *result = [self.sceneView hitTest:tapPoint options:nil];
if ([result count] == 0) {
return;
}
SCNHitTestResult *hitResult = [result firstObject];
if (hitResult.node) {
[[hitResult.node parentNode] removeFromParentNode];
}
}
-(void)moveObject:(UIPanGestureRecognizer *)recognizer {
NSLog(@"Move object");
if (recognizer.state == UIGestureRecognizerStateBegan) {
NSLog(@"Pan state began");
CGPoint tapPoint = [recognizer locationInView:_sceneView];
NSArray <SCNHitTestResult *> *result = [self.sceneView hitTest:tapPoint options:nil];
if ([result count] == …Run Code Online (Sandbox Code Playgroud) 当我在 ARKit 中围绕 y 轴旋转我的设备时,我试图计算它的旋转。为了澄清起见,ARKit 中的 y 轴是垂直于地面指向上方的轴。
我使用 eulerangles 来获得相机的旋转,如下所示:
var alpha = sceneView.pointOfView?.eulerAngles.y
Run Code Online (Sandbox Code Playgroud)
这大约在 时有效0=<alpha<pi/2 and when -pi/2<alpha<=0,但是对于应该是其他角度的内容,我得到了错误的读数。我怀疑这与万向节锁定有关,并且我必须以某种方式使用四元数才能获得正确的角度,而不管象限如何。任何帮助深表感谢!