ARKit API 举例
ARKit API by example
我正在努力研究 Apple 的 ARKit API,并且我已经将他们的 example ARKitExample
project 推到了 GitHub。
在这个 demo/sample 项目中,您在环境中移动 phone 摄像头,它 似乎 可以自动检测平面并放置一组"focus squares" 在你的相机在那个表面上的中心位置。如果您随后从多个对象(lamp、杯子、花瓶等)中的一个按下 "+"
UI 按钮和 select,它将在适当的位置渲染该虚拟对象的焦点广场。您可以看到所有这些的实际效果 right here,这可能比我试图解释的要好!
我试图在代码中找到虚拟对象实际被调用和呈现在屏幕上的位置。这将是在 selected 之后,我 认为 发生 here:
@IBAction func chooseObject(_ button: UIButton) {
// Abort if we are about to load another object to avoid concurrent modifications of the scene.
if isLoadingObject { return }
textManager.cancelScheduledMessage(forType: .contentPlacement)
performSegue(withIdentifier: SegueIdentifier.showObjects.rawValue, sender: button)
}
但本质上,用户 select 是一个虚拟对象,然后它会在焦点方块当前所在的任何位置呈现 - 我正在寻找发生这种情况的地方,有什么想法吗?
它将 virtualObject 实例(它是 SCNNode 的子类)添加为 SCNScene 根节点的子节点:
func virtualObjectSelectionViewController(_: VirtualObjectSelectionViewController, didSelectObjectAt index: Int) {
guard let cameraTransform = session.currentFrame?.camera.transform else {
return
}
let definition = VirtualObjectManager.availableObjects[index]
let object = VirtualObject(definition: definition)
let position = focusSquare?.lastPosition ?? float3(0)
virtualObjectManager.loadVirtualObject(object, to: position, cameraTransform: cameraTransform)
if object.parent == nil {
serialQueue.async {
self.sceneView.scene.rootNode.addChildNode(object)
}
}
}
我正在努力研究 Apple 的 ARKit API,并且我已经将他们的 example ARKitExample
project 推到了 GitHub。
在这个 demo/sample 项目中,您在环境中移动 phone 摄像头,它 似乎 可以自动检测平面并放置一组"focus squares" 在你的相机在那个表面上的中心位置。如果您随后从多个对象(lamp、杯子、花瓶等)中的一个按下 "+"
UI 按钮和 select,它将在适当的位置渲染该虚拟对象的焦点广场。您可以看到所有这些的实际效果 right here,这可能比我试图解释的要好!
我试图在代码中找到虚拟对象实际被调用和呈现在屏幕上的位置。这将是在 selected 之后,我 认为 发生 here:
@IBAction func chooseObject(_ button: UIButton) {
// Abort if we are about to load another object to avoid concurrent modifications of the scene.
if isLoadingObject { return }
textManager.cancelScheduledMessage(forType: .contentPlacement)
performSegue(withIdentifier: SegueIdentifier.showObjects.rawValue, sender: button)
}
但本质上,用户 select 是一个虚拟对象,然后它会在焦点方块当前所在的任何位置呈现 - 我正在寻找发生这种情况的地方,有什么想法吗?
它将 virtualObject 实例(它是 SCNNode 的子类)添加为 SCNScene 根节点的子节点:
func virtualObjectSelectionViewController(_: VirtualObjectSelectionViewController, didSelectObjectAt index: Int) {
guard let cameraTransform = session.currentFrame?.camera.transform else {
return
}
let definition = VirtualObjectManager.availableObjects[index]
let object = VirtualObject(definition: definition)
let position = focusSquare?.lastPosition ?? float3(0)
virtualObjectManager.loadVirtualObject(object, to: position, cameraTransform: cameraTransform)
if object.parent == nil {
serialQueue.async {
self.sceneView.scene.rootNode.addChildNode(object)
}
}
}