ARScnView API
@available(iOS 11.0, *)
open class ARSCNView : SCNView, ARSessionProviding {
/**
Specifies the renderer delegate. 代理
*/
weak open var delegate: ARSCNViewDelegate?
/**
The session that the view uses to update the scene. 会话
*/
open var session: ARSession
/**
Specifies the scene of the view. 场景
*/
open var scene: SCNScene
/**
Determines whether the view will update the scene’s lighting.
是否自动适应灯光
@discussion When set, the view will automatically create and update lighting for
light estimates the session provides. Defaults to YES.
*/
open var automaticallyUpdatesLighting: Bool
/**
Determines whether view renders camera grain.
一个确定SceneKit是否将图像噪声特征应用于应用程序的虚拟内容的标志。
默认启用
@discussion When set, the view will automatically add camera grain to rendered
content that matches the grainy noise of the camera stream. Enabled by default.
*/
@available(iOS 13.0, *)
open var rendersCameraGrain: Bool
/**
Determines whether view renders motion blur.
确定视图是否呈现运动模糊。 默认关闭
@discussion When set, the view will automatically add motion blur to rendered
content that matches the motion blur of the camera stream.
Overwrites SCNCamera's motionBlurIntensity property. Disabled by default.
*/
@available(iOS 13.0, *)
open var rendersMotionBlur: Bool
/**
Searches the scene hierarchy for an anchor associated with the provided node.
@param node A node in the view’s scene.
返回对应节点的锚点,节点是一个3D虚拟物体,它的坐标是虚拟场景中的坐标,而锚点ARAnchor是ARKit中现实世界的坐标
*/
open func anchor(for node: SCNNode) -> ARAnchor?
/**
Returns the node that has been mapped to a specific anchor.
@param anchor An anchor with an existing node mapping.
返回对应锚点的物体
*/
open func node(for anchor: ARAnchor) -> SCNNode?
/**
Searches the current frame for objects corresponding to a point in the view.
根据2D坐标点搜索3D模型,这个方法通常用于,当我们在手机屏幕点击某一个点的时候,可以捕捉到这一个点所在的3D模型的位置,至于为什么是一个数组非常好理解。手机屏幕一个是长方形,这是一个二维空间。而相机捕捉到的是一个由这个二维空间射出去的长方体,我们点击屏幕一个点可以理解为在这个长方体的边缘射出一条线,这一条线上可能会有多个3D物体模型
point:2D坐标点(手机屏幕某一点)
ARHitTestResultType:捕捉类型 点还是面
(NSArray<ARHitTestResult *> *):追踪结果数组 详情见本章节ARHitTestResult类介绍
数组的结果排序是由近到远
@discussion A 2D point in the view’s coordinate space can refer to any point along a line segment
in the 3D coordinate space. Hit-testing is the process of finding objects in the world located along this line segment.
@param point A point in the view’s coordinate system.
@param types The types of results to search for.
@return An array of all hit-test results sorted from nearest to farthest.
*/
@available(iOS, introduced: 11.0, deprecated: 14.0, message: "Use [ARSCNView raycastQueryFromPoint:allowingTarget:alignment]")
open func hitTest(_ point: CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult]
/**
Creates a raycast query originating from the point on view, aligned along the center of the field of view of the camera.
@discussion A 2D point in the view's coordinate space and the frame camera's field of view is used to create a ray in the 3D cooridnate space originating at the point.
@param point A point in the view’s coordinate system.
@param target Type of target where the ray should terminate.
@param alignment Alignment of the target.
*/
@available(iOS 13.0, *)
open func raycastQuery(from point: CGPoint, allowing target: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery?
}
@available(iOS 12.0, *)
extension ARSCNView {
@nonobjc public func unprojectPoint(_ point: CGPoint, ontoPlane planeTransform: simd_float4x4) -> simd_float3?
}
@available(iOS 11.0, *)
public protocol ARSCNViewDelegate : ARSessionObserver, SCNSceneRendererDelegate {
/**
Implement this to provide a custom node for the given anchor.
自定义节点的锚点
@discussion This node will automatically be added to the scene graph.
If this method is not implemented, a node will be automatically created.
If nil is returned the anchor will be ignored.
@param renderer The renderer that will render the scene.
@param anchor The added anchor.
@return Node that will be mapped to the anchor or nil.
*/
optional func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode?
/**
Called when a new node has been mapped to the given anchor.
当添加节点时会调用,我们可以通过这个代理方法得知我们添加一个虚拟物体到AR场景下的锚点(AR现实世界中的坐标)
@param renderer The renderer that will render the scene.
@param node The node that maps to the anchor.
@param anchor The added anchor.
*/
optional func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor)
/**
Called when a node will be updated with data from the given anchor.
将要刷新节点
@param renderer The renderer that will render the scene.
@param node The node that will be updated.
@param anchor The anchor that was updated.
*/
optional func renderer(_ renderer: SCNSceneRenderer, willUpdate node: SCNNode, for anchor: ARAnchor)
/**
Called when a node has been updated with data from the given anchor.
已经刷新节点
@param renderer The renderer that will render the scene.
@param node The node that was updated.
@param anchor The anchor that was updated.
*/
optional func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor)
/**
Called when a mapped node has been removed from the scene graph for the given anchor.
移除节点
@param renderer The renderer that will render the scene.
@param node The node that was removed.
@param anchor The anchor that was removed.
*/
optional func renderer(_ renderer: SCNSceneRenderer, didRemove node: SCNNode, for anchor: ARAnchor)
}
/**
Extended debug options for an ARSCNView
*/
@available(iOS 11.0, *)
public typealias ARSCNDebugOptions = SCNDebugOptions
extension SCNDebugOptions {
/** Show the world origin in the scene. */
@available(iOS 11.0, *)
public static let showWorldOrigin: SCNDebugOptions
/** Show detected 3D feature points in the world. */
@available(iOS 11.0, *)
public static let showFeaturePoints: SCNDebugOptions
}