我正在尝试在应用程序中使用SceneKit,并希望将从iPhone / iPad相机(正面或背面)捕获的图像用作SCNScene
中对象的纹理。
从我在文档中可以看到的所有内容以及StackOverflow上的其他问题,我应该能够使用适当的AVCaptureVideoPreviewLayer
创建AVCaptureSession
并让它“正常工作”。不幸的是,它没有。
我正在使用这样一行代码:
cubeGeometry.firstMaterial?.diffuse.contents = layer
将图层作为材质似乎有效,因为如果我设置图层的backgroundColor
,我会看到背景颜色,但相机捕捉似乎不起作用。图层设置正确,因为如果我将图层用作SCNView
的子图层而不是SCNScene
中的对象,则图层会在UIKit
中正确显示。
可以找到示例项目here。
您可以使用USE_FRONT_CAMERA
中的GameViewController.swift
常量在使用前置和后置摄像头之间切换。您可以使用USE_LAYER_AS_MATERIAL
常量在AVCaptureVideoPreviewLayer
作为材质的纹理或SCNView
中的子图层之间切换。
我已经使用一些OpenGL调用找到了一个非常hacky的解决方法,但我更喜欢让这些代码作为一个更通用且不太脆弱的解决方案。任何人都知道如何在设备上正常工作?我已经尝试过iOS 8.0和iOS 9.0设备。