ARKit--HITTEST模式

HITTEST介紹

點(diǎn)擊測(cè)試(hittest),找到與相機(jī)圖像中的某個(gè)點(diǎn)所對(duì)應(yīng)的真實(shí)世界面是掰。如果您在 Session (會(huì)話) 配置當(dāng)中啟用了 planeDetection 配置的話,那么 ARKit 就會(huì)去檢測(cè)相機(jī)圖像當(dāng)中的水平面,并報(bào)告其位置和大小睹栖。您可以使用點(diǎn)擊測(cè)試所生成的結(jié)果飒责,或者使用所檢測(cè)到的水平面梦抢,從而就可以在場(chǎng)景當(dāng)中放置虛擬內(nèi)容案糙,或者與之進(jìn)行交互地啰。
HITTEST可以想象成策彤,發(fā)射一個(gè)射線到平面上栓袖,碰到的平面的點(diǎn)都做成ARHitTestResult返回匣摘。

API

ARSCNView類里定義了hittest的API.

/* 
@param point A point in the view's coordinate system.
                屏幕坐標(biāo)系里的點(diǎn)
 @param types The types of results to search for.
                 搜索類型
*/
- (NSArray<ARHitTestResult *> *)hitTest:(CGPoint)point 
types:(ARHitTestResultType)types;

一個(gè)手指觸碰點(diǎn)HITEST的例子

手指觸摸的時(shí)候,做一次hittest裹刮,返回3d坐標(biāo)系里觸摸的點(diǎn)音榜,放一個(gè)小物品。

//定義點(diǎn)擊手勢(shì)
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] 
initWithTarget:self 
action:@selector(handleTapFrom:)];

- (void)handleTapFrom: (UITapGestureRecognizer *)recognizer {
  // Take the screen space tap coordinates and pass them to the hitTest method on the ARSCNView instance
  CGPoint tapPoint = [recognizer locationInView:self.sceneView];
  NSArray<ARHitTestResult *> *result = [self.sceneView hitTest:tapPoint types:ARHitTestResultTypeExistingPlaneUsingExtent];
  
  // If the intersection ray passes through any plane geometry they will be returned, with the planes
  // ordered by distance from the camera
  if (result.count == 0) {
    return;
  }
  
  // If there are multiple hits, just pick the closest plane
  ARHitTestResult * hitResult = [result firstObject];
  [self insertGeometry:hitResult];
}

hitResult里面worldTransform捧弃,直接返回在3D世界的坐標(biāo)赠叼,下面的代碼是插入一個(gè)小小的cube做一個(gè)演示。

- (void)insertGeometry:(ARHitTestResult *)hitResult {
  // Right now we just insert a simple cube, later we will improve these to be more
  // interesting and have better texture and shading
  
  float dimension = 0.1;
  SCNBox *cube = [SCNBox boxWithWidth:dimension height:dimension length:dimension chamferRadius:0];
  SCNNode *node = [SCNNode nodeWithGeometry:cube];
  
  // The physicsBody tells SceneKit this geometry should be manipulated by the physics engine
  node.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:nil];
  node.physicsBody.mass = 2.0;
  node.physicsBody.categoryBitMask = CollisionCategoryCube;
  
  // We insert the geometry slightly above the point the user tapped, so that it drops onto the plane
  // using the physics engine
  float insertionYOffset = 0.5;
  node.position = SCNVector3Make(
                                 hitResult.worldTransform.columns[3].x,
                                 hitResult.worldTransform.columns[3].y + insertionYOffset,
                                 hitResult.worldTransform.columns[3].z
                                 );
  [self.sceneView.scene.rootNode addChildNode:node];
  [self.boxes addObject:node];
}

具體代碼參看例子
demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末违霞,一起剝皮案震驚了整個(gè)濱河市嘴办,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌买鸽,老刑警劉巖涧郊,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異眼五,居然都是意外死亡妆艘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門看幼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)批旺,“玉大人,你說(shuō)我怎么就攤上這事诵姜∑螅” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵棚唆,是天一觀的道長(zhǎng)逗物。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瑟俭,這世上最難降的妖魔是什么翎卓? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮摆寄,結(jié)果婚禮上失暴,老公的妹妹穿的比我還像新娘。我一直安慰自己微饥,他們只是感情好逗扒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欠橘,像睡著了一般矩肩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肃续,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天黍檩,我揣著相機(jī)與錄音叉袍,去河邊找鬼。 笑死刽酱,一個(gè)胖子當(dāng)著我的面吹牛喳逛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棵里,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼润文,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了殿怜?” 一聲冷哼從身側(cè)響起典蝌,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎头谜,沒(méi)想到半個(gè)月后骏掀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乔夯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了款侵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末荐。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖新锈,靈堂內(nèi)的尸體忽然破棺而出甲脏,到底是詐尸還是另有隱情,我是刑警寧澤妹笆,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布块请,位于F島的核電站,受9級(jí)特大地震影響拳缠,放射性物質(zhì)發(fā)生泄漏墩新。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一窟坐、第九天 我趴在偏房一處隱蔽的房頂上張望海渊。 院中可真熱鬧,春花似錦哲鸳、人聲如沸臣疑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讯沈。三九已至,卻和暖如春婿奔,著一層夾襖步出監(jiān)牢的瞬間缺狠,已是汗流浹背问慎。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儒老,地道東北人蝴乔。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像驮樊,于是被迫代替她去往敵國(guó)和親薇正。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • ARKit ARKit框架通過(guò)集成iOS設(shè)備攝像頭和運(yùn)動(dòng)功能囚衔,在您的應(yīng)用程序或游戲中產(chǎn)生增強(qiáng)現(xiàn)實(shí)體驗(yàn)挖腰。 概述 增強(qiáng)...
    暗夜夜夜行路閱讀 5,784評(píng)論 0 17
  • 其實(shí)一直在考慮要不要寫這篇所謂的游記,畢竟網(wǎng)絡(luò)上這樣的游記文章太多了练湿,讀者可能看花了眼猴仑,但我覺得每個(gè)人寫的都是從自...
    藍(lán)色豆芽閱讀 522評(píng)論 0 0
  • 首先需要下載ffmpeg.exe,下載后在D盤建一個(gè)文件夾肥哎,名字叫:ffmpeg辽俗,把這個(gè)程序移到文件夾中,同時(shí)將要...
    淮水依依閱讀 19,963評(píng)論 1 4
  • 棧道嵌在崖壁上 似一條墨色的飛龍 山崖和棧道相伴千年 沒(méi)有一言一語(yǔ) 風(fēng)和雨離間著它們 千年的棧道不曾埋怨分毫 棧道...
    墨竹輕踏雪閱讀 374評(píng)論 1 2
  • https://zhuanlan.zhihu.com/p/23948378 讓你的Web項(xiàng)目有趣起來(lái)篡诽! http...
    靖蘭亭閱讀 555評(píng)論 0 51