1.锚点
这个概念一开始不太容易理解。那么如何理解锚点呢?
这样假如我们现在正在创作一本电子版小说,我发现每次继续写小说都要拉到文档最后好麻烦⊙_⊙好了其实要解决这个问题也挺简单的,我在开始添加个结尾书签直接跳到结尾就好了●ω●,书签多方便想链接到哪里都可以,好了我们加了一个结尾书签方便我们每次写新的内容。
但是后来我发现一个问题,我每次写完都要修改这个书签的位置o_O,因为每次写完新的内容结尾位置也改变了...好不快乐~~好吧我想到一个办法在文章结尾处加一个"End"的字符,让书签指向"End"每次我都在"End"前面添加内容,这样也算完美的解决了问题了吧
~~~在这里我们的书签,永远说他在"物体"的相对位置(书签指向"End"第一个字符的位置,一开始我们加的"结尾书签"也是指向最后一个字符的后面),这里书签也就是"锚点"。
实际中我们一般让锚点指点一个特殊的点称为"定位点",并携带一些其他信息,来表示"物体"(一般我们还会在书签中加入标题信息,有时我们也会在书签中加入某个章节的字数,以便我们可以直接对所有章节进行分割)
2.用于表示现实世界的对象和位置类
ARAnchor
AR锚点,可用于表示对象在AR场景中真实世界的位置和方向。
ARPlaneAnchor
AR平面锚点,有关在AR会话中检测到的真实平面的位置和方向的信息,ARPlaneAnchor继承自ARAnchor
ARHitTestResult
通过检查AR会话的设备摄像机视图中一个点找到有关现实世界表面的信息。
3.用于相机和场景细节类
ARFrame
作为AR会话的一部分捕获的视频图像和位置跟踪信息。
ARCamera
有关AR会话中拍摄的视频帧的摄像机位置和成像特性的信息。
ARLightEstimate
与AR会话中捕获的视频帧相关联的估计场景照明信息。
4.AR代理
(1)ARSessionObserver
你可以实现的方法来响应AR会话状态的更改。ARSessionDelegate、ARSCNViewDelegate、ARSKViewDelegate这此协议定义了共同的可选方法,以及协议。当采用这些协议之一时,可以实现该协议的方法:
func session(ARSession, cameraDidChangeTrackingState: ARCamera)
通知代表ARKit设备位置跟踪质量的变化。
func sessionWasInterrupted(ARSession)
告诉代表会话已暂时停止处理帧和跟踪设备位置。
func sessionInterruptionEnded(ARSession)
告诉代表会话已恢复处理帧和跟踪设备位置。
(2)ARSessionDelegate
如果您需要直接使用ARFrame捕获会话的对象或直接跟踪会话的跟踪ARAnchor对象集的更改请执行此协议。通常情况下,你建立一个自定义视图显示AR时,采用这个协议的内容,如果显示与SceneKit或SpriteKit内容中,ARSCNViewDelegate或ARSKViewDelegate协议提供类似的信息,并与技术集成。此协议扩展了ARSessionObserver协议。
func session(ARSession, didUpdate: ARFrame)
向代理人提供新捕获的摄像机图像和附带的AR信息。
func session(ARSession, didAdd: [ARAnchor])
告诉代表一个或多个锚点已被添加到会话中。
func session(ARSession, didUpdate: [ARAnchor])
告诉代表会话已调整一个或多个锚点的属性。
func session(ARSession, didRemove: [ARAnchor])
告诉代表一个或多个锚已从会话中删除。
(3)ARSKViewDelegate
实现此协议以提供ARAnchor与视图的AR会话跟踪的对象相对应的SpriteKit内容,或者管理视图对这些内容的自动更新。此协议扩展了ARSessionObserver协议。
func view(ARSKView, nodeFor: ARAnchor)
请求委托人提供一个对应于新添加的锚点的SpriteKit节点。
func view(ARSKView, didAdd: SKNode, for: ARAnchor)
告诉代理人,一个与新的AR锚点相对应的SpriteKit节点已被添加到场景中。
func view(ARSKView, willUpdate: SKNode, for: ARAnchor)
告诉委托人SpriteKit节点的属性将被更新以匹配其相应锚点的当前状态。
func view(ARSKView, didUpdate: SKNode, for: ARAnchor)
告知委托人SpriteKit节点的属性已更新,以匹配其对应锚点的当前状态。
func view(ARSKView, didRemove: SKNode, for: ARAnchor)
告诉代理人,与AR锚点相对应的SpriteKit节点已从场景中删除。
(4)ARSCNViewDelegate
实现此协议以提供ARAnchor与视图的AR会话跟踪的对象相对应的SceneKit内容,或者管理视图对这些内容的自动更新。此协议扩展了ARSessionObserver协议。
func renderer(SCNSceneRenderer, nodeFor: ARAnchor)
请求委托人提供一个对应于新添加的锚点的SceneKit节点。
func renderer(SCNSceneRenderer, didAdd: SCNNode, for: ARAnchor)
告诉代理人,一个与新的AR锚点相对应的SceneKit节点已添加到场景中。
func renderer(SCNSceneRenderer, willUpdate: SCNNode, for: ARAnchor)
告诉代理,SceneKit节点的属性将被更新以匹配其相应锚点的当前状态。
func renderer(SCNSceneRenderer, didUpdate: SCNNode, for: ARAnchor)
告诉代理人,一个SceneKit节点的属性已被更新,以匹配其相应锚点的当前状态。
func renderer(SCNSceneRenderer, didRemove: SCNNode, for: ARAnchor)
告诉代理人,已将已删除的AR锚点对应的SceneKit节点从场景中删除。
网友评论