标签: arscnview

如何防止ARSCNView在方向更改期间旋转

我正在使用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控件在方向更改时旋转?

ios scenekit arkit arscnview

12
推荐指数
1
解决办法
904
查看次数

ARKit将SCNNode放置在面向相机的位置

我正在使用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但我没有设法做到这一点.

ios swift scnnode arkit arscnview

11
推荐指数
3
解决办法
6657
查看次数

'hitTest()' 在 iOS 14.0 中被弃用

我是新手,目前正在构建一个与 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)

请告诉我如何解决它,谢谢:)

hittest ios raycasting swift arscnview

8
推荐指数
2
解决办法
1445
查看次数

ARKit是否有前置摄像头支持?

我们如何使用ARCamera或可以访问前置摄像头图像,ARSCNView是否可以ARSCNView像摄像头一样进行录制?

ios swift arkit arscnview arcamera

5
推荐指数
2
解决办法
4886
查看次数

ARKit:在屏幕上查找SCNNode的坐标

我有一个简单的Swift ARKit设置,其中有一个带有3D对象的SCNNode,该对象在ARSCNView中可见。

我想确定该对象在ARSCNView上的2D坐标。我的意思是指将对象绘制到屏幕上时的x和y坐标。

我提供了一个草图来说明我的意思: 草图

有没有办法获得这些坐标,或者至少是一个近似值?我需要这样做,以便对相机框架进行进一步的处理。基本上,我对对象在屏幕上占据的区域感兴趣。

ios swift scnnode arkit arscnview

5
推荐指数
1
解决办法
1457
查看次数

iOS ARKit 应用程序:如何旋转 UI(屏幕)而不旋转内部相机视图?

我正在尝试使用 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 (这是在允许自动旋转的情况下捕获的,但我希望它在切换到此视图时自动旋转!)

任何帮助或提示将不胜感激!

uiinterfaceorientation ios arkit arscnview

5
推荐指数
0
解决办法
736
查看次数

从ARSCNFaceGeometry中提取面部特征

我一直在努力提取脸部特征,例如嘴巴,ARSCNFaceGeometry以改变颜色或添加不同的颜色material.我知道我需要创建一个SCNGeometry我拥有SCNGeometrySource但却无法创建的SCNGeometryElement.已尝试创建它ARFaceAnchorupdate(from faceGeometry: ARFaceGeometry),但到目前为止一直未能.非常感谢有人的帮助

ios arkit arscnview

4
推荐指数
1
解决办法
1312
查看次数

Swift ARKit如何完全杀死ARSession?

ARSCNView正在跑步ARSession。您可以session.pause()肯定地暂停会话,但这仍然有效,可以使会话继续运行。我尝试ARSCNView通过将其从其超级视图中删除来取消分配。该ARSCNView确实重新分配,但ARSession仍运行后!您不能分配nilARSession任何一个。我可以看到ARSessionDelegate

func session(_ session: ARSession, didUpdate frame: ARFrame) 
Run Code Online (Sandbox Code Playgroud)

仍在被叫!

完成后,如何用ARKit彻底擦拭干净?

可能吗?

swift arkit arscnview

4
推荐指数
1
解决办法
1079
查看次数

iOS 11.0之前的ARSCNView

我正在尝试将ARKit添加到我现有的一个应用程序中,当您单击按钮时,我正在转换到该视图.如果您使用iOS 11,我只能使用该按钮,因此您只能使用iOS 11进入该视图,但如何摆脱故事板的这个错误?

iOS 11.0之前的类不可用ARSCNView

谢谢!

storyboard swift4 arkit xcode9 arscnview

3
推荐指数
1
解决办法
1103
查看次数

检查 ARSession 是否正在运行 (ARKit)

我有一个 ARSCNView 可以session根据情况偶尔暂停它。有没有办法检查它session是否正在运行?

像这样的东西:

class myARView: ARSCNView {
    ...
    func foo() {

        if(session.running) {
            // do stuff
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

ios scenekit swift arkit arscnview

3
推荐指数
1
解决办法
1381
查看次数

立体声 ARSCNview 使 VR 和 AR 混合

我想混合virtual realityaugmented reality。目标是我有一个立体相机(每只眼睛)。

我试图将两个ARSCNView放入一个,viewCotnroller但 ARKit 似乎只能同时启用一个ARWorldTrackingSessionConfiguration。我怎样才能做到这一点?

我研究过将视图的图形表示复制到另一个视图,但无法找到。请帮我找到解决方案。

我找到了这个链接,也许它可以照亮我们: ARKit with multiple users

这是我的问题的示例:

https://www.youtube.com/watch?v=d6LOqNnYm5s

PS:之前不像我的帖子,评论为什么!

augmented-reality swift virtual-reality arkit arscnview

2
推荐指数
1
解决办法
1173
查看次数

ARKit Stereo – 是否可以同时运行两个 ARSCNView?

我想对我现有的 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会话,还是我错了?

augmented-reality scenekit swift arkit arscnview

2
推荐指数
1
解决办法
1021
查看次数

快速 ARKit 中的屏幕截图问题

我有使用 ARSCNView 的应用程序。我正在尝试通过单击按钮截取屏幕截图并将该图像保存在图库中。但是当我截取屏幕截图时,它不会在该屏幕上显示内容。只需显示该图像,我上面有一些标签,但它没有在图像中显示。这是我的代码

  @IBAction func captureImage(_ sender: Any) {


 image = sceneView.snapshot()
     UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
}
Run Code Online (Sandbox Code Playgroud)

如何在屏幕截图中显示 ARSCView 上的标签和按钮?

swift arscnview

0
推荐指数
1
解决办法
457
查看次数