gpt4 book ai didi

ios - 在 XZ 平面上拖动对象

转载 作者:行者123 更新时间:2023-11-29 11:37:39 26 4
gpt4 key购买 nike

我正在开发一款增强现实应用,我希望能够在空间中拖动一个对象。我在 SO 中找到的解决方案的问题是,建议使用 projectPoint/unprojectPoint 的解决方案是它们沿 XY 平面产生运动.

我试图使用手指在屏幕上的移 Action 为节点的 xz 坐标的偏移量。问题是有很多东西需要考虑(相机的位置、节点的位置、节点的旋转等等)

有更简单的方法吗?

最佳答案

我已经更新了 @Alok 的答案,因为在我的例子中,它只是从上面的解决方案中拖入 x 平面。所以我添加了 y 坐标,对我有用。

var PCoordx: Float = 0.0
var PCoordy: Float = 0.0
var PCoordz: Float = 0.0

@objc func handleDragGesture(_ sender: UIPanGestureRecognizer) {

switch sender.state {
case .began:
let hitNode = self.sceneView.hitTest(sender.location(in: self.sceneView),
options: nil)
self.PCoordx = (hitNode.first?.worldCoordinates.x)!
self.PCoordy = (hitNode.first?.worldCoordinates.y)!
self.PCoordz = (hitNode.first?.worldCoordinates.z)!
case .changed:
// when you start to pan in screen with your finger
// hittest gives new coordinates of touched location in sceneView
// coord-pcoord gives distance to move or distance paned in sceneview
let hitNode = sceneView.hitTest(sender.location(in: sceneView), options: nil)
if let coordx = hitNode.first?.worldCoordinates.x,
let coordy = hitNode.first?.worldCoordinates.y,
let coordz = hitNode.first?.worldCoordinates.z {
let action = SCNAction.moveBy(x: CGFloat(coordx - PCoordx),
y: CGFloat(coordy - PCoordy),
z: CGFloat(coordz - PCoordz),
duration: 0.0)
self.photoNode.runAction(action)

self.PCoordx = coordx
self.PCoordy = coordy
self.PCoordz = coordz
}

sender.setTranslation(CGPoint.zero, in: self.sceneView)
case .ended:
self.PCoordx = 0.0
self.PCoordy = 0.0
self.PCoordz = 0.0
default:
break
}
}

关于ios - 在 XZ 平面上拖动对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48210319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com