如何在 iOS 11 中将 SKVideoNode 添加到 ARKit-SceneKit?

Posted

技术标签:

【中文标题】如何在 iOS 11 中将 SKVideoNode 添加到 ARKit-SceneKit?【英文标题】:How to add SKVideoNode to ARKit-SceneKit in iOS 11? 【发布时间】:2018-04-22 08:38:40 【问题描述】:

有没有办法将 SKVideoNode 添加到 ARKit 场景(Scenekit)?我尝试将 SKVideoNode 添加为 SCNPlane 几何漫反射内容,但它不起作用,

    let videoNode = SKVideoNode(fileNamed: "0.mov")
    videoNode.size = CGSize(width: 200, height: 100)
    videoNode.alpha = 0.8
    videoNode.play()
    self.videoNode = videoNode

    let plane = SCNPlane(width: 0.05, height: 0.05)
    let newMaterial = SCNMaterial()
    newMaterial.isDoubleSided = true
    newMaterial.diffuse.contents = self.videoNode
    plane.materials = [newMaterial]
    let node = SCNNode(geometry: plane)

    parent.addChildNode(node)

【问题讨论】:

【参考方案1】:

SKNode 不是supported types for SceneKit material property contents 之一。也不是它的任何子类。

如果您想将 SpriteKit 内容映射到 SceneKit 材质,方法是将SKScene 设置为材质属性内容。然后,该场景可以包含任意数量或类型的 SpriteKit 节点。

【讨论】:

你能分享一些示例代码吗?我尝试实施您提到的方式,但视频显示不正确。它只是闪烁并显示一些颜色,而不是实际的视频。它看起来像是在后台播放视频,但上面应用了一个图层,因此模糊了整个视频。 显示该代码。屏幕抓住了问题。 Rickster 是人,但不要以为他是读心者。 @yaali 我遇到了完全相同的问题。通过在创建 Sprite Kit 场景时设置大小来修复它:let spriteKitScene = SKScene(size: CGSize(width: 640, height: 480)) 我希望能解决您的问题! 另请注意,在最新版本的 SceneKit 中,使用 SKSceneSKVideoNode 并不是播放视频所必需的。您可以直接将AVPlayer 设置为SCNMaterialProperty 实例的内容。【参考方案2】:

我遇到了完全相同的问题。通过在创建 Sprite Kit 场景时设置大小来修复它: let spriteKitScene = SKScene(size: CGSize(width: 640, height: 480))

希望能解决您的问题!

【讨论】:

以上是关于如何在 iOS 11 中将 SKVideoNode 添加到 ARKit-SceneKit?的主要内容,如果未能解决你的问题,请参考以下文章

SKVideoNode不显示视频

SKVideoNode(嵌入在 SKScene 中)作为 Scene Kit Node 的纹理不起作用

在 iOS 11 LargeTitles 中将单行标题转换为多行标题时如何去除跳转效果

在iOS中将NSdate四舍五入到最近的小时

如何在 iOS 9.0 中将图像保存到特定文件夹中

如何在 iOS 中将全屏大小的图像设置为启动屏幕?