iOS AR开发-标尺,精准测量

效果图

思路梳理

  • 场景实现
    在AR中万物皆节点,实现AR效果,我们首先需要做的是场景拆分,将AR场景拆分为一个个节点。设定相应的剧本,就能完美的实现AR效果。
    分析我们上面的标尺效果,对场景进行拆分

    • 包含的节点(包含三位坐标)
      开始点节点、结束点节点、线条节点、文本节点
  • 实现思路

    核心:两点坐标位置 ,两点间距离
    
    如何表示三维坐标:
    SCNVector3
    
    如何获取位置:
    hitTest(_ point: CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult]
    
    三维坐标距离计算:
    A(x1,y1,z1),B(x2,y2,z2),则A,B之间的距离为
    d=√[(x1-x2)^2+(y1-y2)^2+(z1-z2)^2]
    
    状态更新:
    起始点位置不变,实时更新线条和终点的位置 计算距离
    
    

类结构图

难点梳理

  • 获取相机与物体之间的距离
    hitTest(_ point: CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult]
    这个方法,是用来搜索 ARSession 检测到的锚点还有真实世界的对象, 不是view 里 SceneKit.的內容。若是SceneKit使用如下方法:
    hitTest(<#T##point: CGPoint##CGPoint#>, options: <#T##[SCNHitTestOption : Any]?#>)

  • 4D齐次空间(烧脑内容,3D空间为什么会有四维矩阵)
    4D向量和4x4矩阵不过是对3D运算的一种方便的记忆而已。
    4D向量有4个分量,前3个是标准的x,y和z分量,第4个是w,有时称作齐次坐标。
    为了理解标准3D坐标是怎样扩展到4D坐标的,让我们先看一下2D中的齐次坐标,它的形式为(x, y, w)。想象在3D中w=1处的标准2D平面,实际的2D点(x, y)用齐次坐标表示为(x, y, 1),对于那些不在w=1平面上的点,则将它们投影到w=1平面上。所以齐次坐标(x, y, w) 映射的实际2D点为(x/w, y/w)。

    因此,给定一个2D点(x, y),齐次空间中有无数多个点与之对应。所有点的形式都为(kx, ky, k),k≠0。这些点构成一条穿过齐次原点的直线。
    当w=0时,除法未定义,因此不存在实际的2D点。然而,可以将2D齐次点(x, y, 0)解释为"位于无穷远的点",它描述了一个方向而不是一个位置。
    4D坐标的基本思想相同,实际的3D点被认为是在4D中w=1"平面"上。4D点的形式为(x, y, z, w),将4D点投影到这个"平面"上得到相应的实际3D点(x/w, y/w, z/w)。w=0时4D点表示"无限远点",它描述了一个方向而不是一个位置。
    4 X 4 平移矩阵
    3x3变换矩阵表示的是线性变换,不包括平移。因为矩阵乘法的性质,零向量总是变换成零向量。因此,任何能用矩阵乘法表达的变换都不包含平移。这很不幸,因为矩阵乘法和它的逆是一种非常方便的工具,不仅可以用来将复杂的变换组合成简单的单一变换,还可以操纵嵌入式坐标系间的关系。如果能找到一种方法将3x3变换矩阵进行扩展,使它能处理平移,这将是一件多么美妙的事情啊。4x4矩阵恰好提供了一种数学上的"技巧",使我们能够做到这一点。
    暂时假设w总是等于1。那么,标准3D向量[x, y, z]对应的4D向量为[x, y, z, 1]。任意3x3变换矩阵在4D中表示为:
    任意一个形如[x, y, z, 1]的向量乘以上面形式的矩阵,其结果和标准的3x3情况相同,只是结果是用w=1的4D向量表示的:
    现在,到了最有趣的部分。在4D中,仍然可以用矩阵乘法来表达平移,而在3D中是不可能的:
    记住,即使是在4D中,矩阵乘法仍然是线性变换。矩阵乘法不能表达4D中的"平移",4D零向量也将总是被变换成零向量。这个技巧之所以能在3D中平移点是因为我们实际上是在切变4D空间。与实际3D空间相对应的4D中的"平面"并没有穿过4D中的原点。因此,我们能通过切变4D空间来实现3D中的平移。

下载demo-swift

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容