我需要一个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/

10-11 19:22