[SceneKit]物理仿真模擬(二)

SceneKit的物理引擎是很強(qiáng)大的, 你只需要告訴引擎你想使用的物理學(xué)效果, 接下來的一切都有引擎來完成, 模擬重力, 檢測(cè)碰撞等.

在進(jìn)行物理仿真模擬之前先來解釋下幾個(gè)概念.

首先, 力的作用的相互的, 當(dāng)兩個(gè)物體之間進(jìn)行力的作用時(shí)情況是多樣的, 可能兩者都有運(yùn)動(dòng), 也可能只有其中的一個(gè)會(huì)運(yùn)動(dòng), 試想, 如果拿一個(gè)雞蛋去碰撞一塊很大的石頭, 很顯然, 雞蛋碎了, 石頭不會(huì)有任何變化(以我們?nèi)庋蹃碛^察, 石頭是不會(huì)有變化的, 實(shí)質(zhì)上石頭是有變化的), 物理仿真中的type就是為了定義當(dāng)一個(gè)物體受到力的作用時(shí)該如何去響應(yīng).

static靜態(tài)物體不會(huì)移動(dòng):當(dāng)其他物體可能與這些物體碰撞時(shí)横朋,靜態(tài)物體本身不受模擬中的任何力和碰撞的影響衷恭。 你可以使用這種類型的墻壁和大塊不動(dòng)的巨石脊髓。

dynamic動(dòng)力體受力量和碰撞的影響; 您可以使用這種類型的東西绝葡,如活動(dòng)椅子,桌子和杯子播瞳。

kinematic運(yùn)動(dòng)體類似于靜態(tài)體怀挠,因?yàn)樗鼈円膊皇苡绊?br> 力量和碰撞 但是琢蛤,您可以移動(dòng)這些類型,并且它們也可能與動(dòng)態(tài)主體相沖突蜂嗽。 您可以使用這種類型的身體苗膝,例如移動(dòng)電梯或可以打開和關(guān)閉的門。

在SceneKit中所有的物理對(duì)象都是SCNPhysicsBody, 然后需要把該對(duì)象綁定到SCNNode的physicsBody實(shí)例屬性, 然后物理引擎就可以進(jìn)行仿真模擬了.

在上一節(jié)中, 我們使用Node去管理一個(gè)幾何體, 同樣, SCNPhysicsBody對(duì)象也管理者物理引擎, 也就是說, 此時(shí)我們的node擁有一個(gè)可以做物理仿真模擬的幾何體

let geometryNode = SCNNode(geometry: geometry)下面添加如下代碼

    geometryNode.physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)

創(chuàng)建物理體時(shí)植旧,您可以指定物體應(yīng)具有的類型和形狀辱揭。 如果為nil离唐,Scene Kit將根據(jù)節(jié)點(diǎn)的幾何形狀自動(dòng)生成一個(gè)形狀。

接下來運(yùn)行工程, 千萬不要眨眼, 你會(huì)發(fā)現(xiàn)一個(gè)立方體很快的掉落下來, 然后消失.
接下來我們需要修改下視角, 讓物體受重力作用更明顯一些.
修改下面的代碼

    cameraNode.position = SCNVector3(x: 0, y: -5, z: 10)

再次運(yùn)行, 會(huì)看到一個(gè)物體從頂部掉下來

自由落體實(shí)現(xiàn)了, 接下來我們給該物體添加一個(gè)向上的推力
讓物體實(shí)現(xiàn)一個(gè)拋物線的自由落體運(yùn)動(dòng)
geometryNode.physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)下面添加如下代碼

這個(gè)設(shè)置我們的物體要移動(dòng)的重點(diǎn)位置, 下面三個(gè)值得意思是, x為0, 代表從中心帶開始運(yùn)動(dòng), y值為正數(shù), 代表向上, z為0代表我們看的視角的深度不會(huì)變, 如果是負(fù)數(shù), 則會(huì)發(fā)現(xiàn)在運(yùn)動(dòng)過程中, 物體越來越小, 如果為正, 則發(fā)現(xiàn)在運(yùn)動(dòng)過程中物體則會(huì)運(yùn)來越大

    let force = SCNVector3(x: 0, y: 15 , z: 0)

作用力的位置

    let position = SCNVector3(x: 0.05, y: 0.05, z: 0.05)

給節(jié)點(diǎn)上的幾何體添加一個(gè)作用力, 當(dāng)您向物理機(jī)構(gòu)施加力量時(shí)问窃,您可以使用applyForce(_:atPosition:impluse :)亥鬓,并將SCNVector3的實(shí)例傳遞給要施加該力的力和位置,以及是否強(qiáng)制將被用作沖動(dòng)泡躯。您應(yīng)用的力將影響物理體的線性和角加速度贮竟。

    geometryNode.physicsBody?.applyForce(force, at: position, asImpulse: true)

注意

剛剛為了觀察自由落體效果, 我們把視角修改了, 讓物體從頂部掉落, 現(xiàn)在需要把它再改回來, 讓其從底部出現(xiàn)

    cameraNode.position = SCNVector3(x: 0, y: 5, z: 10)

OK, 運(yùn)行工程, 會(huì)發(fā)現(xiàn)有一個(gè)幾何體從底部向上拋, 然后在做自由落體運(yùn)動(dòng)


關(guān)與力的一些解釋
物理仿真中的力使用的是向量表示的, 向量是有方向有距離的一個(gè)值.

屏幕快照 2017-07-18 下午3.16.37.jpg

運(yùn)行使用真機(jī), 模擬器很卡

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市较剃,隨后出現(xiàn)的幾起案子咕别,更是在濱河造成了極大的恐慌,老刑警劉巖写穴,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惰拱,死亡現(xiàn)場離奇詭異,居然都是意外死亡啊送,警方通過查閱死者的電腦和手機(jī)偿短,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馋没,“玉大人昔逗,你說我怎么就攤上這事∨穸洌” “怎么了勾怒?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長声旺。 經(jīng)常有香客問我笔链,道長,這世上最難降的妖魔是什么腮猖? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任鉴扫,我火速辦了婚禮,結(jié)果婚禮上澈缺,老公的妹妹穿的比我還像新娘坪创。我一直安慰自己,他們只是感情好姐赡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布误堡。 她就那樣靜靜地躺著,像睡著了一般雏吭。 火紅的嫁衣襯著肌膚如雪锁施。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音悉抵,去河邊找鬼肩狂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姥饰,可吹牛的內(nèi)容都是我干的傻谁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼列粪,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼审磁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岂座,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤态蒂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后费什,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钾恢,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年鸳址,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘩蚪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稿黍,死狀恐怖疹瘦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巡球,我是刑警寧澤言沐,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站辕漂,受9級(jí)特大地震影響呢灶,放射性物質(zhì)發(fā)生泄漏吴超。R本人自食惡果不足惜钉嘹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲸阻。 院中可真熱鬧跋涣,春花似錦、人聲如沸鸟悴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽细诸。三九已至沛贪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背利赋。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工水评, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人媚送。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓中燥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塘偎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疗涉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • 111. [動(dòng)畫系統(tǒng)]如何將其他類型的動(dòng)畫轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫? 動(dòng)畫->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫]Unit...
    胤醚貔貅閱讀 13,057評(píng)論 3 90
  • 今天值班吟秩,挺忙咱扣。中午喝的牛肉湯,結(jié)果食物中毒峰尝,難受了一下午偏窝,吐了一會(huì),總算好受了一點(diǎn)武学。 一直認(rèn)為自己的身體硬朗無比...
    非小魚閱讀 208評(píng)論 0 0
  • 10.1.1 錯(cuò)誤報(bào)告及設(shè)置級(jí)別 PHP程序的錯(cuò)誤發(fā)生一般歸屬于下列三個(gè)領(lǐng)域: 語法錯(cuò)誤: 語法錯(cuò)誤最常見祭往,并且也...
    曹淵說創(chuàng)業(yè)閱讀 429評(píng)論 0 0
  • 我愛喝酒——熟識(shí)我的朋友都知道這事兒硼补。 愛酒的姑娘才不只我一個(gè),如今熏矿,越來越多的女孩子有小酌一杯的習(xí)慣已骇。 過去的女...
    小馬不怕過河閱讀 820評(píng)論 6 7
  • 你對(duì)我說,有一個(gè)地方叫茶峒票编。 你對(duì)我說褪储,茶峒里有一個(gè)姑娘叫翠翠。 我似是身臨其境慧域,延石板臺(tái)階而下鲤竹,坐在小碼頭旁,目...
    淺淺笑安然閱讀 342評(píng)論 5 3