Проблема:
Я пытаюсь заставить узел смотреть на телефон так, чтобы верхняя часть узла ВСЕГДА указывала на северный полюс телефона, независимо от того, как телефонориентированный.Давайте предположим, что узел находится в центре, а телефон начинается с (0, 0, 10)
, и предположим, что узел имеет геометрию прямоугольника, которая аналогична геометрии телефона.Я хочу, чтобы вершина этого прямоугольника всегда указывала вверх относительно того места, где я нахожусь.
Итак, у нас есть
let node = SCNNode()
node.position = SCNVector3(0, 0, 0)
self.sceneView.pointOfView.position = (0, 0, 10)
//The top of the node should be pointing towards (0, 100, 0) and
//should be facing the phone.
Теперь давайте перейдем к self.sceneView.pointOfView.position = (10, 0, 0)
, поэтому мы хотим, чтобы узелследуйте и поворачивайте вокруг оси Y на 90 градусов.
node.eulerAngles.y = Float(90*Double.pi/180)
Теперь давайте переместимся по телефону в положение self.sceneView.pointOfView.position = (0, 10, 0)
У нас есть начальное вращение на 90 градусов вокруг оси Y, и теперь мы добавляем вращение вокруг ОРИГИНАЛЬНОЙ оси X или ТЕКУЩЕЙ оси Z от нашей текущей позиции.(Я говорю это, потому что я открыт для предложений о том, как решить эту проблему, и я хочу, чтобы это было как можно более понятным).
Итак, теперь у нас есть
node.eulerAngles.x = Float(90*Double.pi/180)
, и наш узел указывает«ВВЕРХ» относительно нашей позиции;то есть, мы находимся перед узлом, и узел указывает «ВВЕРХ», основываясь на наших прошлых преобразованиях.
Мои усилия:
Я пытался использовать node.look(at:, up:, localFront:)
безрезультатно.Я попытался
node.look(at: self.sceneView.pointOfView!.position, up: self.sceneView.pointOfView.worldUp, localFront: SCNNode.localFront)
, но это заставляет node
двигаться, когда я поворачиваю телефон, и я не хочу, чтобы это произошло.Я не хочу, чтобы node
двигался, когда я поворачиваюсь от пейзажа к портрету, а также я не хочу, чтобы node
вращался.
Вопрос:
Как мне сделать так, чтобы узел всегда был направлен вверх от моей позиции и всегда смотрел на меня, не двигаясь, не поворачиваясь и не поворачиваясь, когда яповернуть телефон?Я хочу только движения X и Y.Я открыт для любых предложений.