Различные способы отображения камеры под SceneKit - PullRequest
0 голосов
/ 14 октября 2018

Я разрабатываю приложение AR, которое может использовать несколько разных движков.Один из них основан на SceneKit (не ARKit).

Раньше я делал SceneView фон прозрачным и просто отображал AVCaptureVideoPreviewLayer под ним.Но это создало проблему позже - оказывается, что если вы используете clear backgroundColor для SceneView, а затем добавляете к нему floor node, который имеет diffuse.contents = UIColor.clear (прозрачный пол), тогда тени не отображаются наЭто.И цель на данный момент состоит в том, чтобы иметь тени в этом двигателе.

Я думаю, что лучший способ заставить работать тени - это установить предварительный просмотр камеры как SCNScene.background.contents.Для этого я попытался использовать AVCaptureDevice.default(for: video).Это сработало, но у него есть одна проблема - вы не можете использовать нужный формат видео - SceneKit автоматически меняет формат при назначении.Я даже попросил Apple о помощи, используя один из двух запросов о помощи, которые вы можете отправить им, но они ответили, что на данный момент нет общедоступных API, которые позволили бы мне использовать это в формате, который я хотел бы.И на iPhone 6s этот формат меняется на 30 FPS, и мне нужно, чтобы он был 60 FPS.Так что этот вариант не годится.

Есть ли другой способ назначить предварительный просмотр камеры свойству фона сцены?Из того, что я прочитал, я также могу использовать CALayer для этого свойства, поэтому я попытался присвоить AVCaptureVideoPreviewLayer, но это привело только к черному цвету и отсутствию видео.Я обновил кадр слоя до правильного размера, но это все равно не сработало.Может я что-то не так сделал, и есть способ использовать этот AVCaptureVideoPreviewLayer или что-то еще?

Можете ли вы предложить некоторые возможные решения?Я знаю, что могу использовать ARKit, и я использую для другого двигателя, но для этого конкретного мне нужно продолжать использовать SceneKit.

...