如何使用 RealityKit 跟踪相机的位置?有几个例子在使用 SceneKit,但我发现没有一个使用 RealityKit。我需要一个功能,例如:
func session(_ session: ARSession, didUpdate frame: ARFrame) {
// Do something with the new transform
let currentTransform = frame.camera.transform
doSomething(with: currentTransform)
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试解决问题但没有成功,希望有人能提供帮助。
我寻找过类似的帖子,但找不到任何可以解决我的问题的内容。
我的场景如下:我有一个 ,上面可以放置UIView
许多其他s 。UIView
这些可以使用手势识别器移动、缩放和旋转(这里没有问题)。用户能够更改主视图(画布)的长宽比,我的问题是尝试缩放画布的内容以适应新的目标尺寸。
有许多具有类似主题的帖子,例如:
但这些并没有解决比率的多次变化。
我的方法:
当我更改画布的纵横比时,我使用AVFoundation
计算画布的子视图应适合的纵横比适合的矩形:
let sourceRectangleSize = canvas.frame.size
canvas.setAspect(aspect, screenSize: editorLayoutGuide.layoutFrame.size)
view.layoutIfNeeded()
let destinationRectangleSize = canvas.frame.size
let aspectFittedFrame = AVMakeRect(aspectRatio:sourceRectangleSize, insideRect: CGRect(origin: .zero, size: destinationRectangleSize))
ratioVisualizer.frame = aspectFittedFrame
Run Code Online (Sandbox Code Playgroud)
红框只是为了可视化纵横比拟合矩形。正如您所看到的,虽然长宽比适合的矩形是正确的,但对象的缩放不起作用。当我将缩放和旋转应用于子视图(CanvasElement)时尤其如此。
我缩放对象的逻辑显然是错误的:
@objc
private func setRatio(_ control: UISegmentedControl) {
guard let aspect = Aspect(rawValue: control.selectedSegmentIndex) else { return }
let sourceRectangleSize = canvas.frame.size
canvas.setAspect(aspect, screenSize: editorLayoutGuide.layoutFrame.size)
view.layoutIfNeeded()
let destinationRectangleSize = canvas.frame.size
let aspectFittedFrame = AVMakeRect(aspectRatio:sourceRectangleSize, …
Run Code Online (Sandbox Code Playgroud) 这个类也渲染了我的SCN文件.
import UIKit
import ARKit
class SimpleViewController: UIViewController {
@IBOutlet var sceneView: ARSCNView!
override func viewDidLoad() {
super.viewDidLoad()
sceneView.scene = SCNScene(named: "duck.scn", inDirectory: "models.scnassets/furniture")!
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
sceneView.session.run(ARWorldTrackingConfiguration())
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
sceneView.session.pause()
}
}
Run Code Online (Sandbox Code Playgroud)
但我知道如何旋转或缩放我的object(duck.scn
)文件.我想用户可以与我的对象进行交互.
我已经扫描并训练了多个现实世界的对象。我确实有,ARReferenceObject
并且应用程序可以很好地检测到它们。
我面临的问题是,当一个对象没有独特的,鲜明的功能时,它需要几秒钟的时间才能返回检测结果,据我所知。现在,我希望该应用在尝试检测该对象时在其顶部显示一个边界框和一个活动指示器。
我没有有关此的任何信息。同样,如果有任何方法可以获取开始检测的时间或检测到的对象的置信度百分比。
任何帮助表示赞赏。
ios ×4
swift ×4
arkit ×3
aspect-ratio ×1
ios12 ×1
realitykit ×1
scaling ×1
scenekit ×1
xcode ×1