学习SceneKit之几何体概览

本系列所有文章目录

获取示例代码


什么是几何体

在序篇中,我们已经初步了解到了球形几何体,我们通过SCNSphere.init(radius: 0.3)可以方便的创建一个半径为0.3的球形几何体。SCNSphere是苹果为我们内置的几何体,当然苹果还为我们内置了很多其他几何体,包括SCNPlane, SCNBox, SCNSphere, SCNPyramid, SCNCone, SCNCylinder, SCNCapsule, SCNTube, SCNTorus,这些在例子中都有展示。在计算机的3D世界中,通常使用顶点数组去表示几何体,比如一个三角形可以表示为(-0.5,0.5, 0),(0.5,0.5, 0),(0,-0.5, 0)(x,y,z)是一个顶点的坐标。一个球体可以通过很多个三角形拼接而成,所以对于一个球体而言,表示它的数据就是这些三角形顶点的集合。当然以上只是一个简化的说明,如果你想知道底层显示几何体的方法和原理,可以去看我的OpenGL ES系列文章

几个内置几何体的展示

下面为大家展示几个苹果内置的几何体。

SCNCone(圆锥体)

圆锥体接受三个参数上面的半径,下面的半径和高度。

SCNCone.init(topRadius: 0.1, bottomRadius: 0.5, height: 1)

计算机中的圆都是采用多边形接近的方式制作的,圆锥也不例外,圆锥体提供了radialSegmentCount属性控制组成圆锥的面数,默认是一圈48个面。如果把它调整为3,就会变成这样。


圆锥还提供了一个heightSegmentCount属性控制从上到下切成几份。这两个属性值越大,产生的顶点就越多,模型就越精致,但绘制的性能消耗也就越大。

SCNCapsule(胶囊)

胶囊其实就和我们平时吃的感冒胶囊长得一样,两头是半球形,
中间是圆柱,生成它只需要提供半球半径和高度两个参数。

SCNCapsule.init(capRadius: 0.1, height: 1)


它也有控制生成模型精度的属性radialSegmentCountcapSegmentCountheightSegmentCount

SCNTube(管子)

管子是可以控制管壁厚度的管状几何体。需要提供内径,外径和高度三个参数。

SCNTube.init(innerRadius: 0.3, outerRadius: 0.5, height: 0.4)

SCNTorus(圆环)

圆环可以看作是圈成环的圆柱体,需要提供圆环的半径ringRadius和圆柱体的半径pipeRadius

SCNTorus.init(ringRadius: 0.5, pipeRadius: 0.1)

3D文本

使用SceneKit可以方便的将文字转换成3D几何体,SCNText还支持设置斜切角,让文字模型的转角不那么生硬。使用起来也很方便。另外,SCNText还支持一个flatness属性,这个值越小,生成出来的文字线条越精细,默认为1,当然越精细性能负担也就越重。

let attrs: [NSAttributedStringKey: Any] = [ .font: UIFont.systemFont(ofSize: 1) ]
let textGeometry = SCNText.init(string: NSAttributedString.init(string: "handy\nTool", attributes: attrs), extrusionDepth: 0.4)
textGeometry.chamferRadius = 0.1

生成的文字默认不在中间,我根据文本模型的大小调整它的位置,将它放到中间的位置。具体代码在addGeometry方法中。

SCNShape

SCNShape可以将Path转换成3D模型,其实方式和3D文本一样,或者说3D文本就是利用这个原理生成的。因为文字可以先转换成Path,然后再用SCNShape转换成3D模型,读者可以自己试一试用SCNShape生成一些模型。

总结

系统提供的几何体可以说是简单易用,掌握它们也很轻松。不过对于几何体的学习不会止步于此,后面的文章中将会逐步为大家介绍如何自定义几何体,控制几何体的外观以及LOD技术。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上次讲了Maya中的Hotbox的用法以及坐标系统,认识了视图的种类以及视角的操纵方式。这次介绍的是3D动画基础物...
    yxssiszx阅读 2,378评论 0 7
  • 温柔倔强也会撒娇投降 天使魔鬼都是我的样 烈似砒霜甜起来像蜜糖 自己导航才能活的更漂亮。 筑起心墙,才不会有失望和...
    大庆袖珍阁阅读 465评论 0 3
  • 原来这是一个伟大的骗局 看着是很美好 但确实是不容易被拆穿 我们总以为外面的世界都很美好 却不知有她的黑暗一面 那...
    半分微凉阅读 204评论 0 6
  • JAVA介绍 Java有很多常见的名词,由于java是通过过java虚拟机运行的,所以在运行java的主机上需要配...
    断尾壁虎V阅读 3,683评论 0 5
  • 似水年华 如天际的流星 转瞬即逝 无情的岁月模糊了 一张张青春洋溢的面容 那些年一起唱过的歌瑶 那些年一起经历的风...
    Julien陆主欢阅读 250评论 7 3