獲取示例代碼
什么是幾何體
在序篇中算墨,我們已經(jīng)初步了解到了球形幾何體,我們通過SCNSphere.init(radius: 0.3)
可以方便的創(chuàng)建一個(gè)半徑為0.3的球形幾何體。SCNSphere
是蘋果為我們內(nèi)置的幾何體矾湃,當(dāng)然蘋果還為我們內(nèi)置了很多其他幾何體湿故,包括SCNPlane, SCNBox, SCNSphere, SCNPyramid, SCNCone, SCNCylinder, SCNCapsule, SCNTube, SCNTorus
,這些在例子中都有展示稽莉。在計(jì)算機(jī)的3D世界中瀑志,通常使用頂點(diǎn)數(shù)組去表示幾何體,比如一個(gè)三角形可以表示為(-0.5污秆,0.5劈猪, 0),(0.5良拼,0.5战得, 0),(0庸推,-0.5常侦, 0)
,(x贬媒,y刮吧,z)
是一個(gè)頂點(diǎn)的坐標(biāo)。一個(gè)球體可以通過很多個(gè)三角形拼接而成掖蛤,所以對(duì)于一個(gè)球體而言杀捻,表示它的數(shù)據(jù)就是這些三角形頂點(diǎn)的集合。當(dāng)然以上只是一個(gè)簡化的說明,如果你想知道底層顯示幾何體的方法和原理致讥,可以去看我的OpenGL ES系列文章仅仆。
幾個(gè)內(nèi)置幾何體的展示
下面為大家展示幾個(gè)蘋果內(nèi)置的幾何體。
SCNCone(圓錐體)
圓錐體接受三個(gè)參數(shù)上面的半徑垢袱,下面的半徑和高度墓拜。
SCNCone.init(topRadius: 0.1, bottomRadius: 0.5, height: 1)
計(jì)算機(jī)中的圓都是采用多邊形接近的方式制作的,圓錐也不例外请契,圓錐體提供了radialSegmentCount
屬性控制組成圓錐的面數(shù)咳榜,默認(rèn)是一圈48個(gè)面。如果把它調(diào)整為3爽锥,就會(huì)變成這樣涌韩。
圓錐還提供了一個(gè)
heightSegmentCount
屬性控制從上到下切成幾份。這兩個(gè)屬性值越大氯夷,產(chǎn)生的頂點(diǎn)就越多臣樱,模型就越精致,但繪制的性能消耗也就越大腮考。
SCNCapsule(膠囊)
膠囊其實(shí)就和我們平時(shí)吃的感冒膠囊長得一樣雇毫,兩頭是半球形,
中間是圓柱踩蔚,生成它只需要提供半球半徑和高度兩個(gè)參數(shù)棚放。
SCNCapsule.init(capRadius: 0.1, height: 1)
它也有控制生成模型精度的屬性
radialSegmentCount
,capSegmentCount
馅闽,heightSegmentCount
飘蚯。
SCNTube(管子)
管子是可以控制管壁厚度的管狀幾何體。需要提供內(nèi)徑捞蛋,外徑和高度三個(gè)參數(shù)。
SCNTube.init(innerRadius: 0.3, outerRadius: 0.5, height: 0.4)
SCNTorus(圓環(huán))
圓環(huán)可以看作是圈成環(huán)的圓柱體柬姚,需要提供圓環(huán)的半徑ringRadius
和圓柱體的半徑pipeRadius
拟杉。
SCNTorus.init(ringRadius: 0.5, pipeRadius: 0.1)
3D文本
使用SceneKit可以方便的將文字轉(zhuǎn)換成3D幾何體,SCNText
還支持設(shè)置斜切角量承,讓文字模型的轉(zhuǎn)角不那么生硬搬设。使用起來也很方便。另外撕捍,SCNText
還支持一個(gè)flatness
屬性拿穴,這個(gè)值越小,生成出來的文字線條越精細(xì)忧风,默認(rèn)為1默色,當(dāng)然越精細(xì)性能負(fù)擔(dān)也就越重。
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
生成的文字默認(rèn)不在中間狮腿,我根據(jù)文本模型的大小調(diào)整它的位置腿宰,將它放到中間的位置呕诉。具體代碼在addGeometry方法中。
SCNShape
SCNShape可以將Path轉(zhuǎn)換成3D模型吃度,其實(shí)方式和3D文本一樣甩挫,或者說3D文本就是利用這個(gè)原理生成的。因?yàn)槲淖挚梢韵绒D(zhuǎn)換成Path椿每,然后再用SCNShape轉(zhuǎn)換成3D模型伊者,讀者可以自己試一試用SCNShape生成一些模型。
總結(jié)
系統(tǒng)提供的幾何體可以說是簡單易用间护,掌握它們也很輕松亦渗。不過對(duì)于幾何體的學(xué)習(xí)不會(huì)止步于此,后面的文章中將會(huì)逐步為大家介紹如何自定義幾何體兑牡,控制幾何體的外觀以及LOD技術(shù)央碟。