填充 SKShapeNode CGPath SCNMaterial

Fill SKShapeNode CGPath SCNMaterial

我有一种方法可以在 3D 球体上渲染 2D 形状。我将 SpriteKit 用于 2D 形状,将 SceneKit 用于 3D 内容。

我希望能够填充我的 SKShapeNode 的颜色,然后将 material 应用到 SCNNode

let path = generatePinPath(nodeWidth: 120)
let scene = SKScene(size: CGSize(width: 120, height: 75))
let pinShape = SKShapeNode(path: path)
pinShape.name = "A Label"
pinShape.fillColor = SKColor.red
pinShape.strokeColor = SKColor.white
pinShape.lineWidth = 3

scene.addChild(pinShape)


let materialProperty = SCNMaterial()
materialProperty.diffuse.contents = scene

planeGeometry.firstMaterial = materialProperty
planeGeometry.firstMaterial?.isDoubleSided = false

let node = SCNNode(geometry: planeGeometry)
nodes.append(node)

我的 generatePinPath 方法如下所示:

func generatePinPath(nodeWidth: Int) -> CGMutablePath {
  let path = CGMutablePath()
  path.move(to: CGPoint(x: 20, y: 0)
  path.addLine(to: CGPoint(x: CGFloat(nodeWidth - 20), y: 0))
  path.addCurve(to: CGPoint(x: CGFloat(nodeWidth - 20), y: 53), control1: CGPoint(x: CGFloat(nodeWidth), y: 0), control2: CGPoint(x: CGFloat(nodeWidth), y: 53))
  path.addLine(to: CGPoint(x: CGFloat(nodeWidth / 2) + 20, y: 53))
  path.closeSubpath()
  return path
}

当形状在 3D space 上呈现时,出现了红色,但它 "bleeding" 在定义的路径之外。我不知道为什么会这样,我只是假设路径会限制其内部的颜色。描边颜色和线条按预期呈现。

可能 "SpriteKit rendering inside SceneKit rendering" 代码路径有问题。如果您使用 CAShapeLayer 而不是 SKShapeNode 会怎样?