Я разрабатываю приложение 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
.