2016-03-31 2 views
3

Я знаю о существовании SCNLookAtConstraint в SceneKit. Этот метод, однако, не то, что я ищу.LookAt метод камеры? NOT SCNLookAtConstraint

То, что мне нужно, может указывать камеру в любой момент времени на точку (а не узел) в пространстве.

Имея X, Y, Z в мировых координатах, мне нужно, чтобы камера вращалась так, чтобы она указывала на эту точку.

Точки будут меняться со временем (что означает, что разные точки передаются методу, мне нужно «прыгать» от одного к другому).

Я предпочел бы пропустить вычисление eulerAngles, некоторые решения, которые я видел, основаны на функциях триггера и cos (angle) в знаменателе. Пользователь в принципе может свободно вращаться, перетаскивая CameraNode.

Любой метод, который мне не хватает для этого в SceneKit?

ответ

3

Мне кажется, что использование узла в качестве цели является самым простым способом. Если вы создадите пустой узел (без геометрии или камеры или света), он не будет виден, и вы сможете использовать самые доступные абстракции, которые предлагает вам рамка. Переместите узел из точки в точку, с анимацией или с резкими переходами.

+0

Спасибо Хэл, это сделало это для меня –

3

Здесь могут быть интересны методы GLKMatrix4, в частности GLKMatrix4MakeLookAt.

Учитывая положение глаз (камеру), позицию, на которую вы хотите посмотреть, и вектор вверх, вы сможете создать матрицу преобразования (как GLKMatrix4). Функция SceneKit SCNMatrix4FromGLKMatrix4 затем переведет это на SCNMatrix4, которую вы можете установить как преобразование узла вашей камеры.

TBH, я бы, вероятно, пошел с решением Хэла.

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