如何在Swift中使用核心图形绘制3D对象?

时间:2016-04-07 21:18:13

标签: swift core-graphics

如何在Swift中绘制带有核心图形的3D对象(最好是矩形)?

是否可以或者我必须使用不同的库?

UIKit可以吗?

2 个答案:

答案 0 :(得分:0)

借用这个答案:https://stackoverflow.com/a/24127282/887210

您问题的关键部分是:

SCNBox(width: 1, height: 4, length: 9, chamferRadius: 0)

这会使用SceneKit和UIKit绘制一个矩形框。它被设置为在项目中的自定义UIViewController中使用,但它可以很容易地适应其他用途。

示例代码:

override func loadView() {
  // create a scene view with an empty scene
  let sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
  let scene = SCNScene()
  sceneView.scene = scene

  // default lighting
  sceneView.autoenablesDefaultLighting = true

  // a camera
  let cameraNode = SCNNode()
  cameraNode.camera = SCNCamera()
  cameraNode.position = SCNVector3(x: 0, y: 0, z: 15)
  scene.rootNode.addChildNode(cameraNode)

  // a geometry object
  let box = SCNBox(width: 1, height: 4, length: 9, chamferRadius: 0)
  let boxNode = SCNNode(geometry: box)
  scene.rootNode.addChildNode(boxNode)

  // configure the geometry object
  box.firstMaterial?.diffuse.contents  = UIColor.redColor()
  box.firstMaterial?.specular.contents = UIColor.whiteColor()

  // set a rotation axis (no angle) to be able to
  // use a nicer keypath below and avoid needing
  // to wrap it in an NSValue
  boxNode.rotation = SCNVector4(x: 1, y: 1, z: 0.0, w: 0.0)

  // animate the rotation of the torus
  let spin = CABasicAnimation(keyPath: "rotation.w") // only animate the angle
  spin.toValue = 2.0*M_PI
  spin.duration = 10
  spin.repeatCount = HUGE // for infinity
  boxNode.addAnimation(spin, forKey: "spin around")

  view = sceneView // Set the view property to the sceneView created here.
}

答案 1 :(得分:0)

这个问题类似于是否可以在2D之间的纸上绘制3D对象的问题。通过绘制额外的线条作为投影来实现三维效果。第三维也可以通过动作来感知,因此,Core Animation是Core Graphics的可能伴侣,但是它需要大量的计算,结果非常复杂(使用Core Animation)。

实际上,SceneKit或Metal是使用Swift绘制3D模型的选项。