SCNNode Вращение по нескольким осям

Этот вопрос был опубликован, но на него так и не ответили.

Подобно этому вопросу, я пытаюсь чтобы понять SCNNode.rotation как 4D-вектор. В предыдущем вопросе используется пример, который манипулирует только 1 осью, т. Е.

SCNNode.rotation = (0, 0, 1, degToRad(45)) //Rotate about z-axis by 45 degrees

что имеет смысл; однако, что, если я хочу повернуть ось X на 20 градусов, ось Y на 45 градусов, а затем ось Z на 78 градусов?

SCNNode.rotation = ??

Я бы предоставил код, который пробовал, но я концептуально не понимаю понятие четырехмерного вектора вращения.


person impression7vx    schedule 31.01.2019    source источник


Ответы (1)


Каждый узел просто имеет преобразование с матрицей 4x4. Таким образом, все операции вращения отражаются в изменении преобразования.

В этом случае, если вы измените вращение, eulerAngles и ориентацию, вы должны получить то же значение.

При вращении вокруг трех осей я предложил использовать eulerAngles.

node.eulerAnges = SCNVector3(x:degToRad(20),y:degToRad(45), z:degToRad(78))

После того, как вы установите это, вернитесь и проверьте значение вращения:

SCNVector4(x: -0.16975601, y: 0.5943193, z: 0.786109, w: 1.448788)

Это означает, что есть ось, проходящая через точку (-0,16975601, 0,5943193, 0,786109) и начало координат (0,0,0), и узел вращается вокруг нее на 1,448788 (82 градуса).

person E.Coms    schedule 31.01.2019
comment
Просто прочитайте другой пост, в котором говорится, что использовать eulerAngles проще. Спасибо за это. eulerAngles слишком очевидно, чтобы я мог быстро придумать, лол. - person impression7vx; 31.01.2019