如何在使用自定义着色器时将视频渲染为 SceneKit 节点上的漫反射纹理?这听起来很简单,但是:
- SceneKit 元素不支持
AVPlayerLayer
作为输入纹理 (SO) - 备选方案是:
- 使用带有 SKVideoNode 的 SpriteKit 场景,但是:
- 将视频输出转换为 CGImage,将其传递给 CALayer,并将该层传递给 SceneKit 视频节点(不涉及 SpriteKit)这很详细 here ,但一旦视频有点大,就不是一个可行的解决方案,因为所有输出都被复制到图像中,而且成本很高..
我仍然不太愿意离开 SceneKit,因为它用 opengl/metal 处理了很多烦人的低级事情,但我现在无法让事情正常工作......
作为一个额外的坏消息,看起来 SpriteKit 在与 Metal 一起使用时有内存泄漏,并且它使 SceneView 保持事件状态,因此所有父 View 和附加到它们的所有内容......
最佳答案
无法解决这个问题,我编写了自己的库来模仿 SceneKit 的一些功能:https://github.com/team-pie/DDDKit
关于video - iOS10 + SceneKit : render a video with custom shader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39542205/