ARKit - проблема ротации SCNNode в iOS

Я пытаюсь создать демонстрационное приложение, просматривая видео WWDC 2017.

let planeNode = SCNNode(geometry: imageplane)
sceneView.scene.rootNode.addChildNode(planeNode) 
var translation=matrix_identity_float4x4
translation.columns.3.z = -0.1
planeNode.simdTransform = matrix_multiply(currentFrame.camera.transform,
                                          translation)

Приведенный выше код работает нормально и правильно отображает плоскость. Однако при нажатии он меняет поворот снимка, пробовал разные способы, но ничего не сработало.

Любая помощь будет очень признательна.


person Mohit    schedule 29.06.2017    source источник
comment
Что вы имеете в виду, это меняет поворот снимка? Снимок должен быть помещен перед камерой параллельно ей. Так что, если ваша камера поворачивается, снимок тоже будет повернут.   -  person Guig    schedule 30.06.2017
comment
@guig он должен показать скриншот как есть. В настоящее время меняет поворот изображения. например, если снимок находится в режиме портрета, последний добавленный снимок будет отображаться в альбомной ориентации. в основном, как к захваченному изображению применяется поворот на 90 градусов.   -  person Mohit    schedule 03.07.2017
comment
То же самое. Любые идеи?   -  person dobranoc    schedule 26.07.2017
comment
@monikazee нет. нет идей :( не могу найти решение для этого   -  person Mohit    schedule 27.07.2017


Ответы (2)


Измените поворот SCNNode перед принятием перевода камеры:

let planeNode = SCNNode (geometry: imageplane)
planeNode.eulerAngles.z = Float.pi / 2

var translation = planeNode.simdTransform
translation.columns.3.z = -0.1
planeNode.simdTransform = matrix_multiply(currentFrame.camera.transform,translation)

sceneView.scene.rootNode.addChildNode(planeNode)
person Christoph    schedule 16.08.2017
comment
Я пробовал ваше решение, работает только в режиме portait. В альбомном режиме ориентация снимков экрана меняется. есть идеи, как это исправить? - person Mohit; 24.08.2017

Я столкнулся с той же проблемой, решил ее, повернув матрицу перевода перед применением преобразования камеры к узлу.

Код в Obj-C:

SCNNode *planeNode = [SCNNode nodeWithGeometry:imagePlane];

simd_float4x4 translation = planeNode.simdTransform;
translation.columns[3].z = -0.1;
translation =  SCNMatrix4ToMat4(SCNMatrix4Rotate(SCNMatrix4FromMat4(translation), GLKMathDegreesToRadians(90), 0, 0, 1.0));
planeNode.simdTransform = matrix_multiply(currentFrame.camera.transform, translation);

[self.sceneView.scene.rootNode addChildNode:planeNode];
person psilencer    schedule 24.01.2018