Scenekit Scnbillboard и конфликт ограничений lookat - PullRequest
0 голосов
/ 28 марта 2020

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

Вот настройка для ограничений:

let billboardConstraint = SCNBillboardConstraint ()
billboardConstraint.freeAxes = SCNBillboardAxis.Y 

let lookatConstraint = SCNLookAtConstraint ( target: targetNode )
lookatConstraint.localFront = SCNVector3Make ( 0, 1, 0 )
lookatConstraint.worldUp = SCNVector3Make ( 0, 1, 0 )

arrowNode.constraints = [billboardConstraint, lookatConstraint]

self.sceneView.pointOfView?.addChildNode ( arrowNode )

Вот примеры изображений проблемы. Первое изображение - это то, как я хочу его сохранить, второе изображение показывает уплощение, которое я не могу контролировать:

Ok

NOT OK

Независимо от того, что я пытаюсь, он не остается лицом к камере. Я попытался приравнять расстояние по оси z как к узлу стрелки, так и к целевому узлу (все еще вращает узел стрелки, нежелательно), попытался установить блокировку карданного подвеса (откидывает узел стрелки), попытался отрегулировать углы для узла стрелки, чтобы сохранить он "смотрел" на точку зрения и пытался использовать SCNCone в качестве указателя.

Я также попытался просто переместить этот узел стрелки в вид изображения в оверлее, с невидимым узлом стрелки внутри Scenekit, но не смог получить правильную математику при попытке CGAffineTransform 2d UIImageView. Я попытался получить вектор вращения для SCNNode, который имеет SCNLookatConstraint, пробовал projectpoint и т. Д. c. Не совсем понял. Может быть, я должен был уделять больше внимания в старшей школе: - (

У кого-нибудь есть идеи:

1 Ответ

0 голосов
/ 29 марта 2020

Этот пост: 59251351 - это как 3d коробка с трубкой (танк с ружьем), которая нацелена на конкретный узел c - "нацеливается" на него. Это ваша стрелка, поэтому сначала - убедитесь, что вы установили ее с правильным вращением с самого начала, иначе она никогда не будет работать. Стрелка должна быть подузлом, чтобы ваш основной узел и все подузлы вращались вместе, когда вы устанавливаете ограничения для основного узла.

В примере задан фиксированный -z для связанных узлов, и точка зрения не меняется , Предполагая, что вы хотите переместить камеру вперед, вам нужен способ сохранить перспективу - это удерживает Z для всех рассматриваемых на одном и том же расстоянии от камеры.

Итак, если ваш целевой узел и индикатор могут оставаться включенными та же плоскость расстояния z (как вы указали в своем примере, она может работать таким образом), я «думаю», это должно помочь. Вы могли бы установить целевой узел немного по z по сравнению с вашими узлами стрелки, что-то незначительное, например .001, - просто чтобы математика lookAt фактически не возвращала (NAN), хотя некоторая случайность.

Если это более сложно, тогда требуется кто-то с более высокими математическими навыками. Надеюсь, это поможет

...