Я создаю простую демонстрацию 3D SceneKit и мне нужно визуализировать несколько динамических c текстов в виде текстур на плоскостях.
У меня есть две плоскости, на каждой из которых я хочу визуализировать различный текст. Это возможно путем создания SceneKit Scene и SKLabelNode
, добавления узла к сцене и передачи ему свойства материала плоскостей:
let myLabel = SKLabelNode(fontNamed: "Helvetica")
myLabel.text = "Lorem Ipsum"
myLabel.fontSize = 20
myLabel.fontColor = SKColor.green
myLabel.position = CGPoint(x: 50, y: 50)
skScene = SKScene(size: CGSize(width: 100, height: 100))
skScene?.addChild(myLabel)
let geometry = SCNPlane(width: 5.0, height: 5.0)
let plane = SCNNode(geometry: geometry)
let planeMaterial = SCNMaterial()
planeMaterial.diffuse.contents = skScene
geometry.firstMaterial = planeMaterial
sceneView.scene?.rootNode.addChildNode(plane)
Это работает для одной плоскости с текстом, но что если я хочу создать новый с другим текстом? Должен ли я:
A) Продолжать создавать новые SKScene
s и SKLabelNode
s для каждого нужного мне текста или
B) Каким-то образом повторно использовать исходный SKScene
, то есть изменять размер рисовать и растеризовать его каждый раз, когда нужна новая текстура? Я знаю, что могу растеризовать узел до SKTexture
, используя .texture () , но не уверен, как мне реализовать его в моем случае.
Я пытался сделать
let texture = self.spriteKitView?.texture(from: winner)
geometry.firstMaterial?.diffuse.contents = texture
И хотя это успешно строится, я застрял с белым цветом вместо желаемой текстурной текстуры ...