2015-12-28 1 views
2

У меня есть серия объектов типа SCNPlane, которые вращаются вокруг центрального SCNPlane с шириной и высотой, равными 0. При загрузке представления в моем приложении я получаю ниже, что показывает, что мои плоскости загружаются правильно. Вращение их слева направо с помощью курсора тоже. Это выглядит следующим образом:Устанавливает SCNNodes постоянное значение оси Y?

enter image description here

Однако, если мой курсор перемещается в направлении оси у, вид заканчивает переход так, что дисплей показан с другого угла. В принципе, точка зрения может в конечном итоге выглядит так:

enter image description here

Я не хочу, чтобы это произошло; Я хочу, чтобы первое изображение было тем, что я хочу. Когда я перемещаю курсор, он должен двигаться влево или вправо, а не вверх или вниз.

Вот что я пытался делать:

  • установки шарнира в SCNMatrix4MakeRotation(Float(CGFloat(M_PI_2)), 0, 0, 0)
  • задающего вращение SCNVector4(1, 0, 1, Float(CGFloat(M_PI_2))
  • настройку ориентации на SCNQuaternion(0, 0, 0, Float(CGFloat(M_PI_2))
  • с помощью функции SCNLookAtConstraint центрировать все плоскости вокруг центральной координаты и обращены наружу
  • с использованием функции SCNTransformConstraint functi с блоком, который принимает в узел и матрицу (newMatrix = incomingMatrix) переменную. Если он обнаруживает, что позиция объекта имеет значение y, то newMatrix.m42 = 0. newMatrix возвращается в любом случае.

Ничего из перечисленного не устранило мою проблему. Возможно ли даже ограничить камеру только осями x и z?

+1

Звучит так, будто вы используете встроенное управление камерой ('SCNView'' позволяет CameraControl'). Это так? Если да, то нет. Добавьте свою собственную камеру в иерархию сцены и непосредственно контролируйте ее позицию (как в [этом ответе] (http://stackoverflow.com/a/25674762/957768)). Затем, когда вы сопоставляете пользовательский ввод с движением камеры, переместите узел, содержащий камеру, только по оси, в которую вы хотите ее переместить. – rickster

+0

@ rickster Я нашел ответ, который вы отправили, прежде чем я задал вопрос. Моя забота заключалась в том, чтобы понять, как реализовать ввод. Я не могу найти никаких хороших ресурсов для вращения arcball _ в Swift_, и я не уверен, как я смогу сделать отображение жестов. Я думаю, что второй в моем случае был бы легче; вы могли бы расширить объяснение? Математика все еще запутывает меня. –

+0

1. Если вы ищете помощь в API Apple и игнорируете ресурсы на базе ObjC, вы оказываете себе плохую услугу. Самая важная часть ответа на любой вопрос «как мне сделать X с помощью SceneKit» будет заключаться в том, какие API-интерфейсы SceneKit вызывать и как создавать решения вокруг них? Языковые различия в фактическом коде являются второстепенными.Кажется, что любой новый программист Swift научится * читать * ObjC (если не писать его и достаточно хорошо, чтобы понять, что делает программа и перевести на Swift). – rickster

ответ

0

Мне потребовалось несколько дней, но я, наконец, понял, что исправить.

Я реализовал узел камеры, как предложил рикер, и установил allowCameraControl на false. Затем я реализовал UIPanGestureRecognizer и привязал его к функции, как было предложено here, которое также было основано на ответе Рикстера.

Теперь он делает то, что я хочу. Большое спасибо, всем!

Смежные вопросы