Я сделал небольшую демонстрацию в ARKit. я сталкиваюсь с проблемой, как войти в 3D-объект, проводя пальцем.
Например, у меня есть домашний 3D-объект, он работает с Tap Gesture, Rotation Gesture, я хотел бы пойти внутрь дома, проводя одну в другую комнату внутри домашнего 3D-объекта.
Это вращающийся целый узел трехмерного объекта, я не мог провести и войти внутрь дома.
Это код, который я использовал для оси Y на основе поворота,
@objc private func viewRotated(_ gesture: UIRotationGestureRecognizer) {
let location = gesture.location(in: sceneView)
guard let node = node(at: location) else { return }
switch gesture.state {
case .began:
originalRotation = node.eulerAngles
case .changed:
guard var originalRotation = originalRotation else { return }
originalRotation.y -= Float(gesture.rotation)
node.eulerAngles = originalRotation
default:
originalRotation = nil
}
}
Чтобы повернуть во всех направлениях с помощью UIPanGestureRecognizer, это код, который я добавил,
@objc func viewPanned(gestureRecognize: UIPanGestureRecognizer){
let translation = gestureRecognize.translation(in: gestureRecognize.view!)
let x = Float(translation.x)
let y = Float(-translation.y)
let anglePan = sqrt(pow(x,2)+pow(y,2))*(Float)(M_PI)/180.0
var rotationVector = SCNVector4()
rotationVector.x = -y
rotationVector.y = x
rotationVector.z = 0
rotationVector.w = anglePan
homeNode?.rotation = rotationVector
if(gestureRecognize.state == UIGestureRecognizerState.ended) {
//
let currentPivot = homeNode?.pivot
let changePivot = SCNMatrix4Invert( (homeNode?.transform)!)
homeNode?.pivot = SCNMatrix4Mult(changePivot, currentPivot!)
homeNode?.transform = SCNMatrix4Identity
}
}
Возможно, есть другой способ сделать это, Может кто-то предложить способ .. Спасибо ..