我想在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)
但是,我的屏幕空白了。
答案 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)
请记住,数字,场景套件比例,以米为单位。因此,将数字设置为与您创建的其他形状相同的数字。