四蕴忆、ARKit涂鴉②

歡迎小伙伴們的到來(lái)~

(一)介紹

如果小伙伴們還沒(méi)對(duì)ARKit有任何的了解可以先看看我前面幾章的介紹再來(lái)更好的看本章內(nèi)容

一颤芬、ARKit初探索

二、SCNGeometry代碼創(chuàng)建幾何體

三套鹅、ARKit涂鴉①

本次的代碼已上傳 github

終于有時(shí)間來(lái)繼續(xù)更新文章~~~

上一次給大家簡(jiǎn)單的介紹了一下使用SCNGeometry在平面上繪制線條的方法站蝠,但是SCNGeometry無(wú)法設(shè)置線條的寬度,為了使我們繪制出來(lái)的線條圓滑一些卓鹿,我決定使用SCNGeometry繪制圓柱來(lái)代表線條菱魔,圓柱的直徑就是線條的寬度。

本次我還在其中加入了撤銷吟孙、更改顏色澜倦、更改線條寬度等功能

先看下本次分享東西的效果圖

1.gif

(二)開(kāi)始~

首先我們來(lái)看一張圖片

QQ20171119-110029.png

圖片來(lái)自

從上圖我們可以看到要繪制一個(gè)圓柱聚蝶,可以使用逐步逼近法,用一個(gè)個(gè)長(zhǎng)方形拼合來(lái)逐步逼近圓藻治,這里我們使用兩個(gè)三角形組合一個(gè)長(zhǎng)方形碘勉。
1.獲取屏幕上手指劃過(guò)的位置相對(duì)真實(shí)世界對(duì)象的位置

2.拿到本次屏幕上劃過(guò)的位置,計(jì)算出兩點(diǎn)間圓柱上長(zhǎng)方形的所有頂點(diǎn)。

3.然后使用SCNGeometry繪制三角扇鏈接所有頂點(diǎn)。

下面我們就來(lái)實(shí)現(xiàn)所有的步驟:

1. 獲取屏幕上手指劃過(guò)的位置相對(duì)真實(shí)世界對(duì)象的位置

實(shí)現(xiàn)步驟

詳細(xì)見(jiàn)上一章ARKit涂鴉①

或查看代碼 github (MQARSCNController+AddNode.swift -> touchesMoved())

2.拿到本次屏幕上劃過(guò)的位置吠式,計(jì)算出兩點(diǎn)間圓柱上長(zhǎng)方形的所有頂點(diǎn)

關(guān)鍵代碼,具體查看項(xiàng)目MQNode類中addVertices方法

2-1
    //將圓分成40等份,迭代出當(dāng)前點(diǎn)對(duì)應(yīng)的圓所有頂點(diǎn)
    for index in 0...40 {
        
        //計(jì)算本次[弧度](https://baike.baidu.com/item/%E5%BC%A7%E5%BA%A6/1533188?fr=aladdin),360°角=2π弧度集峦,分成40份
        let t = Double(index) * (Double.pi * 2 / 40)
        
        //計(jì)算當(dāng)前點(diǎn)對(duì)應(yīng)的圓所有頂點(diǎn)
        let s = atan(-(Double(previousVertice.x)*cos(t) + Double(previousVertice.y)*sin(t)) / Double(previousVertice.z))
        let xt = Double(currenVertice.x) + r * cos(s) * cos(t)
        let yt = Double(currenVertice.y) + r * cos(s) * sin(t)
        let zt = Double(currenVertice.z) + r * sin(s)
        
        let ver = SCNVector3Make(Float(xt), Float(yt), Float(zt))
        
        //保存本次所有頂點(diǎn),用于和下次的點(diǎn)進(jìn)行連接
        tempPreviousVertices.append(ver)
        
        /*
            -------上次點(diǎn)
            ||||||| 一一對(duì)應(yīng)添加
            -------本次點(diǎn)
            如2-1圖所示
        */
        //添加本次點(diǎn)        
        roundLineVertices.append(ver)
        //添加上次對(duì)應(yīng)點(diǎn) 
        roundLineVertices.append(roundPreviousVertices[index])
        
        //添加頂點(diǎn)索引
        let verticesCount = UInt32(roundLineVertices.count)
        roundLineIndices.append(verticesCount-2)
        roundLineIndices.append(verticesCount-1)
    }

3.然后使用SCNGeometry繪制三角扇鏈接所有頂點(diǎn)。

關(guān)鍵代碼,具體查看項(xiàng)目MQNode類中addVertices方法

    //創(chuàng)建SCNGeometry
    let geometry = SCNGeometry(sources: [SCNGeometrySource(vertices: roundLineVertices)], elements: [SCNGeometryElement(indices: roundLineIndices, primitiveType: .triangleStrip)])
    
    //創(chuàng)建渲染器        
    let material = SCNMaterial()
    material.isDoubleSided = true
    material.diffuse.contents = MQARSCNController.sharedInstance.linecolour

    geometry.firstMaterial = material
    
    //把本次的圓柱添加到node上
    let node = SCNNode(geometry: geometry)
    self.addChildNode(node)

本章內(nèi)容就到這里感謝小伙伴們的到來(lái)~
代碼已經(jīng)上傳github

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辞州,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌件蚕,老刑警劉巖孙技,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件产禾,死亡現(xiàn)場(chǎng)離奇詭異排作,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)亚情,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門妄痪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人楞件,你說(shuō)我怎么就攤上這事衫生。” “怎么了土浸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵罪针,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我黄伊,道長(zhǎng)泪酱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任还最,我火速辦了婚禮墓阀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拓轻。我一直安慰自己斯撮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布扶叉。 她就那樣靜靜地躺著勿锅,像睡著了一般帕膜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溢十,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天泳叠,我揣著相機(jī)與錄音,去河邊找鬼茶宵。 笑死危纫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乌庶。 我是一名探鬼主播种蝶,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瞒大!你這毒婦竟也來(lái)了螃征?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤透敌,失蹤者是張志新(化名)和其女友劉穎盯滚,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體酗电,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魄藕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撵术。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片背率。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嫩与,靈堂內(nèi)的尸體忽然破棺而出寝姿,到底是詐尸還是另有隱情,我是刑警寧澤划滋,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布饵筑,位于F島的核電站,受9級(jí)特大地震影響处坪,放射性物質(zhì)發(fā)生泄漏根资。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一稻薇、第九天 我趴在偏房一處隱蔽的房頂上張望嫂冻。 院中可真熱鬧,春花似錦塞椎、人聲如沸桨仿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)服傍。三九已至钱雷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吹零,已是汗流浹背罩抗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灿椅,地道東北人套蒂。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像茫蛹,于是被迫代替她去往敵國(guó)和親操刀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容