我正在使用ARKit,我想允许用户在纵向和横向模式下使用该应用程序.我希望所有UI控件在方向更改时旋转,除了ARSCNView.我试图在相反的方向转换sceneView但是没有用.
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
let targetRotation = coordinator.targetTransform
let inverseRotation = targetRotation.inverted()
coordinator.animate(alongsideTransition: { (context) in
self.sceneView.transform = self.sceneView.transform.concatenating(inverseRotation)
context.viewController(forKey: UITransitionContextViewControllerKey.from)
}, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
如何防止ARKit会话的场景视图旋转,同时允许所有其他UI控件在方向更改时旋转?
我正在使用ARKit显示3D对象.我设法将节点放在用户面前的真实世界(也就是相机).但是当我放下相机时,我无法让它们面对镜头.
let tap_point=CGPoint(x: x, y: y)
let results=arscn_view.hitTest(tap_point, types: .estimatedHorizontalPlane)
guard results.count>0 else{
return
}
guard let r=results.first else{
return
}
let hit_tf=SCNMatrix4(r.worldTransform)
let new_pos=SCNVector3Make(hit_tf.m41, hit_tf.m42+Float(0.2), hit_tf.m43)
guard let scene=SCNScene(named: file_name) else{
return
}
guard let node=scene.rootNode.childNode(withName: "Mesh", recursively: true) else{
return
}
node.position=new_pos
arscn_view.scene.rootNode.addChildNode(node)
Run Code Online (Sandbox Code Playgroud)
节点位于相机前面的平面上.但他们都朝着同一个方向前进.我想我应该轮换,SCNNode但我没有设法做到这一点.
我是新手,目前正在构建一个与 AR 相关的应用程序,在旧版本上我说了这个
let results = self.hitTest(screenPosition, types: [.featurePoint])
Run Code Online (Sandbox Code Playgroud)
现在我遇到了一个问题,即在 iOS 14.0 中不推荐使用 hitTest
hitTest(_:types:)' was deprecated in iOS 14.0: Use [ARSCNView raycastQueryFromPoint:allowingTarget:alignment]
Run Code Online (Sandbox Code Playgroud)
请告诉我如何解决它,谢谢:)
我们如何使用ARCamera或可以访问前置摄像头图像,ARSCNView是否可以ARSCNView像摄像头一样进行录制?
我有一个简单的Swift ARKit设置,其中有一个带有3D对象的SCNNode,该对象在ARSCNView中可见。
我想确定该对象在ARSCNView上的2D坐标。我的意思是指将对象绘制到屏幕上时的x和y坐标。
我提供了一个草图来说明我的意思:

有没有办法获得这些坐标,或者至少是一个近似值?我需要这样做,以便对相机框架进行进一步的处理。基本上,我对对象在屏幕上占据的区域感兴趣。
我正在尝试使用 ARKit 制作一个具有一些 AR 体验的 iOS 应用程序。该应用程序现在有一个启动视图,其中有一个“开始”按钮(在应用程序刚刚启动后首先显示)和一个 AR 视图(在我点击启动视图中的“开始”按钮后显示),并且我还为每个控制器提供了视图控制器。AR 视图本质上是一个全屏 ARSCNView,它显示来自相机的实时图像,以及一些 UIButtons。
所有的事情似乎都运作良好,直到我想指定每个阶段的方向。需要将启动视图设置为纵向,将 AR 视图设置为横向。为了自动更改屏幕方向,我尝试将以下代码添加到viewDidLoad()AR ViewController 中:
let value = UIInterfaceOrientation.landscapeRight.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
Run Code Online (Sandbox Code Playgroud)
并设置
override var shouldAutorotate: Bool {
return false
}
Run Code Online (Sandbox Code Playgroud)
然而,它的效果并不好 --- 尽管 UI 的方向已正确更改,但相机预览也“旋转”了 90 度(因此您从应用程序中看到的所有图像都将旋转 90 度):
image1 (设备现在是物理纵向的,相机视图在某种程度上是垂直的)
image2 (设备现在物理上处于横向右侧,但相机视图仍然是垂直的)
我还尝试了另一种方法:
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.landscapeRight
}
Run Code Online (Sandbox Code Playgroud)
但结果还是一样。
我希望它如下所示,UI 固定在横向右侧,但相机始终处于正常方向(重力向下):
image3 (这是在允许自动旋转的情况下捕获的,但我希望它在切换到此视图时自动旋转!)
任何帮助或提示将不胜感激!
我一直在努力提取脸部特征,例如嘴巴,ARSCNFaceGeometry以改变颜色或添加不同的颜色material.我知道我需要创建一个SCNGeometry我拥有SCNGeometrySource但却无法创建的SCNGeometryElement.已尝试创建它ARFaceAnchor的update(from faceGeometry: ARFaceGeometry),但到目前为止一直未能.非常感谢有人的帮助
我ARSCNView正在跑步ARSession。您可以session.pause()肯定地暂停会话,但这仍然有效,可以使会话继续运行。我尝试ARSCNView通过将其从其超级视图中删除来取消分配。该ARSCNView确实重新分配,但ARSession仍运行后!您不能分配nil给ARSession任何一个。我可以看到ARSessionDelegate的
func session(_ session: ARSession, didUpdate frame: ARFrame)
Run Code Online (Sandbox Code Playgroud)
仍在被叫!
完成后,如何用ARKit彻底擦拭干净?
可能吗?
我正在尝试将ARKit添加到我现有的一个应用程序中,当您单击按钮时,我正在转换到该视图.如果您使用iOS 11,我只能使用该按钮,因此您只能使用iOS 11进入该视图,但如何摆脱故事板的这个错误?
iOS 11.0之前的类不可用ARSCNView
谢谢!
我有一个 ARSCNView 可以session根据情况偶尔暂停它。有没有办法检查它session是否正在运行?
像这样的东西:
class myARView: ARSCNView {
...
func foo() {
if(session.running) {
// do stuff
}
}
...
}
Run Code Online (Sandbox Code Playgroud) 我想混合virtual reality和augmented reality。目标是我有一个立体相机(每只眼睛)。
我试图将两个ARSCNView放入一个,viewCotnroller但 ARKit 似乎只能同时启用一个ARWorldTrackingSessionConfiguration。我怎样才能做到这一点?
我研究过将视图的图形表示复制到另一个视图,但无法找到。请帮我找到解决方案。
我找到了这个链接,也许它可以照亮我们: ARKit with multiple users
这是我的问题的示例:
https://www.youtube.com/watch?v=d6LOqNnYm5s
PS:之前不像我的帖子,评论为什么!
我想对我现有的 AR 应用程序做一些修改,我想拆分视图并添加到 2ARSCNView中,这样用户就可以使用 VR Card Box 并获得不同的体验,但 Xcode 总是返回给我:
Session (0x102617d10): did fail with error: Error Domain=com.apple.arkit.error Code=102 "Required sensor failed."
Run Code Online (Sandbox Code Playgroud)
所以,我假设我不能同时运行 2 个ARSCNView会话,还是我错了?
我有使用 ARSCNView 的应用程序。我正在尝试通过单击按钮截取屏幕截图并将该图像保存在图库中。但是当我截取屏幕截图时,它不会在该屏幕上显示内容。只需显示该图像,我上面有一些标签,但它没有在图像中显示。这是我的代码
@IBAction func captureImage(_ sender: Any) {
image = sceneView.snapshot()
UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
}
Run Code Online (Sandbox Code Playgroud)
如何在屏幕截图中显示 ARSCView 上的标签和按钮?