SceneKit Орбитальные преобразования
Поэтому, начав со SceneKit, все шло хорошо, пока я не наткнулся на преобразования, думая, что это будет похоже на преобразования CA3d* на слоях.
Однако, похоже, я совершенно не прав, и преобразование работает совсем по-другому в отношении того, как работает ось Z.
Например, я пытаюсь выполнить движение в стиле орбиты 3d, похожее на карусель. Этот кусок кода CA3D прекрасно работает для этого:
var trans = CATransform3DIdentity
trans = CATransform3DRotate(trans, deg * (Float(M_PI)/180), 1, 1, 0)
trans = CATransform3DTranslate(trans, 0, 0, 100)
layer.transform = trans
Если применить к нескольким объектам с различными значениями "deg", вы получите красивый круговой вид 3d орбиты.
То же самое с SceneKit дает другой результат:
var trans = SCNMatrix4Identity
trans = SCNMatrix4Rotate(trans,Float(angleTemp*(M_PI/180)), 1, 1, 0)
trans = SCNMatrix4Translate(trans, 0, 0, 100)
node.transform = transform
На самом деле происходит то, что после поворота ось Z-значения изменяется и переводится в зависимости от поворота, примененного в слоях CAT3D +, однако в SceneKit ось Z всегда постоянна, поэтому при перемещении их все перемещается вместе, и вы просто получаете сжатие смотреть.
Итак, я понимаю, что это работает в истинном трехмерном пространстве, но теперь мне кажется, что мне приходится работать со сферической и эллиптической математикой, чтобы сделать то же самое.
Так что кто-нибудь может предложить мне советы, как делать то, что я пытаюсь сделать? Сейчас я экспериментирую со сферической математикой и использую SCNMatrix4Translate, но пока не совсем правильно понял математику.
Я думаю, что мне нужны формулы для вычисления XYZ для эллипса, я после чего-то очень похоже на это:
http://en.wikipedia.org/wiki/Ellipse
Такого рода орбита может быть достигнута с помощью фрагмента CAT3D выше на слоях.
Короче говоря, мне нужно получить орбитальный макет, как на картинке выше, и мне нужна помощь с SceneKit и / или геометрией. Весь объект должен вращаться вокруг начала центра, как орбита