我需要在背景中将辅助SCNScene渲染到纹理(NSImage)中,以使该场景在" main"中可用作纹理。 SCNScene。我尝试将新的SCNView(未添加到superview)与辅助场景及其snapshot()方法结合使用,但它只绘制部分场景或根本不绘制场景。它实际上似乎有一个"计时问题"。如果我在将场景分配给SCNView和snapshot()调用之间添加睡眠,则它会完全呈现。如果我让它们彼此直接执行,则场景仅部分渲染。 我尝试了在类似文章中找到的各种其他提议(即renderToImage作为SCNRenderer的扩展),但它们都显示相同的时间问题。 将次要场景渲染到NSImage中的正确方法是什么(显示主场景时)?
答案 0 :(得分:2)
我没有看到您正在谈论的其他提案的链接,但SCNRenderer
应该可以在这里帮助您 - renderAtTime:
方法可让您选择场景时间戳在哪个渲染,所以你应该能够使用与当前帧相同的时间戳。
您也可以通过跳过NSImage
步骤来提高性能 - 这需要从GPU读取数据以在CPU内存中创建图像,然后将其反馈给GPU。可能您可以将SCNRenderer
目标设为NSOpenGLLayer
或MTLTexture
,然后您可以将其设置为素材的漫反射内容,以直接重复使用渲染表面。
最后,您可以使用SK3DNode
在SpriteKit(2D)场景中显示SceneKit(3D)内容......您可以将SKScene
纹理贴图到SceneKit 3D对象上,方法是将其设置为材料属性的内容。我不确定这对于你的动画同步问题是如何工作的,但它应该至少将所有内容保存在同一个渲染表面中。