Как провести / сдвинуть перейти в 3D-объект - PullRequest
0 голосов
/ 03 июля 2018

Я сделал небольшую демонстрацию в 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
    }
}

Возможно, есть другой способ сделать это, Может кто-то предложить способ .. Спасибо ..

...