Визуализация точки размещения на поверхности с помощью ARKit - PullRequest
0 голосов
/ 02 октября 2018

Я хотел бы нарисовать Focus Circle и тень внутри него на плоскости под объектом, который я помещаю, как в приложении IKEA AR.

Как мне это сделать?

enter image description here

1 Ответ

0 голосов
/ 05 октября 2018

Следуйте этому проекту AR, созданному инженерами Apple: Управление трехмерным взаимодействием и элементами управления пользовательским интерфейсом в дополненной реальности , чтобы узнать, как создать Focus Square программным способом.

В верхней части веб-страницы есть синяя кнопка Загрузить .

Чтобы создать Focus Circle как в приложении IKEA, я бы порекомендовал использовать pngфайл с предварительно умноженными каналами RGBA, подобными этому (перетащите его на рабочий стол для тестирования):

enter image description here

Для создания shadow вам нужно добавить directional light в вашу сцену.Чтобы сделать это программно, используйте следующий код:

let lightFixture = SCNNode()
lightFixture.light = SCNLight()
lightFixture.light!.type = .directional
lightFixture.light!.castsShadow = true
lightFixture.light!.shadowMode = .deferred
lightFixture.light!.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
lightFixture.position = SCNVector3(x: 0, y: 20, z: 0)
lightFixture.rotation = SCNVector4(x: -1, y: 0, z: 0, w: .pi/2)
scene.rootNode.addChildNode(lightFixture)

Затем вам необходимо создать невидимую плоскость для вашей полупрозрачной тени:

let shadowPlane = SCNNode()
shadowPlane.geometry = SCNFloor()
shadowPlane.geometry?.firstMaterial!.colorBufferWriteMask = []
shadowPlane.geometry?.firstMaterial!.readsFromDepthBuffer = true
shadowPlane.geometry?.firstMaterial!.writesToDepthBuffer = true
shadowPlane.geometry?.firstMaterial!.lightingModel = .constant
scene.rootNode.addChildNode(shadowPlane)

Вот и все,Надеюсь, это поможет.

...