SCNS形状与bezier路径

时间:2015-01-28 11:03:51

标签: ios swift scenekit

我想在Scenekit iOS中绘制一条3d线,我正在尝试下面的代码来画线,

func path() -> UIBezierPath
    {
        var bPath = UIBezierPath()
        bPath.moveToPoint(CGPointMake(0, 0))
        bPath.addLineToPoint(CGPointMake(10, 10))
        bPath.addLineToPoint(CGPointMake(5, 5))
        bPath.closePath()
        return bPath
    }

以下代码是在SCNNode中加载行,

let sap = SCNShape()
    sap.path = path()
    let carbonNode = SCNNode(geometry: sap)
    carbonNode.position = SCNVector3Make(0, 0, 15)
    scene.rootNode.addChildNode(carbonNode)

但是,我的屏幕空白了。

3 个答案:

答案 0 :(得分:3)

尝试更改几何体的材质。您可能在白色背景上有一个白色物体。

编辑: 事实证明,三角形的顶点是共线的。因此,你最终会出现退化的三角形。

答案 1 :(得分:3)

你的路径没有表面区域,因为你从(0,0)开始,画一条线到(10,10)然后第二条线到(5,5)已经在(0,0)之间的线上)和(10,10)。然后通过绘制另一条线到(0,0)来关闭路径。

更改三个点中的任何一个都会创建一个带有表面区域的路径。

此外,z轴指向屏幕外。这意味着根据相机的位置,您可能会将碳节点放在相机后面。相反,如果你打算将它进一步放置到场景中,你应该使用负z值。

答案 2 :(得分:2)

这里是我为解决问题而编写的一些代码。

    // Material colors
    let cyanMaterial = SCNMaterial()
    cyanMaterial.diffuse.contents = UIColor.cyanColor()

    let anOrangeMaterial = SCNMaterial()
    anOrangeMaterial.diffuse.contents = UIColor.orangeColor()

    let aPurpleMaterial = SCNMaterial()
    aPurpleMaterial.diffuse.contents = UIColor.purpleColor()

    // A bezier path
    let bezierPath = UIBezierPath()
    bezierPath.moveToPoint(CGPointMake(-0.25, 0))
    bezierPath.addLineToPoint(CGPointMake(0, -0.25))
    bezierPath.addLineToPoint(CGPointMake(0.25, 0))
    bezierPath.addLineToPoint(CGPointMake(0, 0.25))
    bezierPath.closePath()

    // Add shape
    let shape = SCNShape(path: bezierPath, extrusionDepth: 0.75)
    shape.materials = [cyanMaterial, anOrangeMaterial, aPurpleMaterial]
    let shapeNode = SCNNode(geometry: shape)
    shapeNode.position = SCNVector3(x: 0.2, y: 0.75, z: 0.1);
    self.rootNode.addChildNode(shapeNode)
    shapeNode.rotation = SCNVector4(x: -1.0, y: -1.0, z: 0.0, w: 0.0)

请记住,数字,场景套件比例,以米为单位。因此,将数字设置为与您创建的其他形状相同的数字。