Ios 重用单个SKView生成多个SKTextures以在SceneKit中使用

Ios 重用单个SKView生成多个SKTextures以在SceneKit中使用,ios,swift,sprite-kit,scenekit,Ios,Swift,Sprite Kit,Scenekit,我正在构建一个简单的3D SceneKit演示,需要在平面上将多个动态文本渲染为纹理 我有两个平面,每个平面上我想呈现不同的文本。这可以通过创建SceneKit场景和SKLabelNode、将节点添加到场景并向场景传递“平面”材质的属性来实现: 设myLabel=SklabelNodeFontName:Helvetica myLabel.text=Lorem Ipsum myLabel.fontSize=20 myLabel.fontColor=SKColor.green myLabel.pos

我正在构建一个简单的3D SceneKit演示,需要在平面上将多个动态文本渲染为纹理

我有两个平面,每个平面上我想呈现不同的文本。这可以通过创建SceneKit场景和SKLabelNode、将节点添加到场景并向场景传递“平面”材质的属性来实现:

设myLabel=SklabelNodeFontName:Helvetica myLabel.text=Lorem Ipsum myLabel.fontSize=20 myLabel.fontColor=SKColor.green myLabel.position=CGPointx:50,y:50 skScene=SKScenesize:CGSizewidth:100,height:100 skScene?.addChildmyLabel 让几何体=SCN平面宽度:5.0,高度:5.0 让平面=SCNNodegeometry:几何体 设planeMaterial=snmaterial planeMaterial.diffuse.contents=skScene geometry.firstMaterial=平面材质 sceneView.scene?.rootNode.addChildNodeplane 这适用于一个包含文本的平面,但如果我想创建一个包含不同文本的新平面,该怎么办?我是否应该:

A为我需要的每一个文本不断创建新的SKScenes和SKLabelNodes,或

B以某种方式重用原始场景,即每次需要新纹理时调整其大小、绘制并光栅化

我很确定正确的方法是重用它。我知道我可以使用将节点光栅化为SKTexture,但不确定在我的情况下应该如何实现它

我试过了

让texture=self.spriteKitView?.texturefrom:winner geometry.firstMaterial?.diffuse.contents=纹理
虽然这成功地构建了,但我仍然坚持使用白色,而不是所需的文本纹理…

选项a有很多优点,不需要记忆,但您可以操纵材质内部的对象来创建酷效果。像钟一样

如果您真的想从重用场景中获取SKTexture,可以使用以下语法:

planeMaterial.diffuse.contents = SKView().texture(from: skScene)!
我为这个问题创建了两个解决方案,请看一看:


哇-谢谢你完整的回答!这很有道理,我认为你的答案是正确的: