SCNMaterial 内容中的 SKScene 出现倒置

Posted

技术标签:

【中文标题】SCNMaterial 内容中的 SKScene 出现倒置【英文标题】:SKScene in SCNMaterial's contents appears upside down 【发布时间】:2018-07-31 02:20:12 【问题描述】:

我正在尝试使用平面几何图形的 SCNNode,它在其中显示 2d 文本。我通过将 SKLabelNode 设置为几何材料来做到这一点(取自 here)

这是我的代码:

let label = SKLabelNode(text: "Test Text 1")
label.fontColor = .white
label.fontName = UIFont.systemFont(ofSize: 32).fontName
label.fontSize = 32

let backgroundRectShape = SKShapeNode(rect: CGRect(origin: .zero, size: label.frame.size))
backgroundRectShape.fillColor = .orange
backgroundRectShape.addChild(label)
label.position = CGPoint(x: backgroundRectShape.frame.width / 2, y: 0)

let skScene = SKScene(size: label.frame.size)
skScene.addChild(backgroundRectShape)
backgroundRectShape.position = .zero

let plane = SCNPlane(width: label.frame.width / 10, height: label.frame.height / 10)
plane.firstMaterial?.diffuse.contents = skScene
let node = SCNNode(geometry: plane)

scene.rootNode.addChildNode(node)

一切看起来都很好,但是 SKLabelNode 看起来是颠倒的:

SCNNode 肯定是正确对齐而不是旋转的,因为当我将图像设置为素材内容时,一切正常:

我就是不明白为什么会这样。最简单的解决方案是将SKLabelNodeyScale 设置为-1,但我不想在不了解默认情况下它出现颠倒的原因的情况下这样做。

【问题讨论】:

我遇到了同样的问题。你有没有发现更多关于这个的信息? 【参考方案1】:

这似乎是一个错误或SpriteKit/SceneKit 框架的众多限制之一

我认为 SCNMaterial 的内容由于 ios 坐标系的原点而错误地显示为上下颠倒

但与其缩放 SCNNode 本身,不如使用SCNMaterialcontentsTransform 实例属性沿Y-axis 镜像纹理。像这样:

material.diffuse.contentsTransform = SCNMatrix4MakeScale(1, -1, 1)

希望这会有所帮助。

【讨论】:

【参考方案2】:
plane.firstMaterial?.diffuse.contentsTransform = SCNMatrix4Translate(SCNMatrix4MakeScale(1, -1, 1), 0, 1, 0)

【讨论】:

以上是关于SCNMaterial 内容中的 SKScene 出现倒置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SpriteKit 中的 SKScene 上显示 AdMob 横幅广告?

SceneKit中的SKScene

SKScene 中的 UIPanGestureRecognizer

SKScene 中的 AVAudio 播放器出错

在界面生成器中隐藏 SKScene 中的节点

如何使用 Swift 正确切换 SpriteKit 中的 SKScene?