我需要一个CVPixelBuffer
包含相机帧和我放置的AR模型,以30+fps的速率,最好是低能量和CPU影响。session(_:didUpdate:)
中帧的capturedImage不包含AR模型。
我试过使用sceneView.snapshot()
来获取UIImage
,然后将其转换为CVPixelBuffer
。这具有明显的高能量影响。
最后,我还尝试创建了一个SCNRenderer
,然后使用它通过UIImage
获取snapshot(atTime:with:antialiasingMode:)
,然后转换为CVPixelBuffer
。这对CPU和能量的影响稍微小一些。但这只适用于纵向模式,生成的UIImage
在横向模式下不正确。
有没有一种方法可以以更少的CPU和能耗的方式(至少与上述方法相比)获得CVPixelBuffer
?
最佳答案
您可以创建自己的CVPixelBuffer
,然后从中获取MTLTexture
,最后将SCNRenderer
渲染到该纹理中。这不会涉及从快照API生成UIImage
的CPU成本。
这里的关键部分是use a CVMetalTextureCache
从像素缓冲区获得金属纹理。
关于swift - 高效地获取CVPixelBuffer(相机框架和AR模型),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56363631/