swift - 如何从 ARFrame 相机设置 SCNView 相机?
问题描述
我在ViewController中创建了一个SCNView,我有一个ARFrame信息,如何设置SCNView摄像头节点,让它和ARFrame摄像头一样?我不想用ARSCNView。
解决方案
ARSession 可以作为独立实体运行(不一定要连接到视图)。使用以下代码来获得您所期望的:
import SceneKit
import ARKit
class ViewController: UIViewController {
@IBOutlet var sceneKitView: SCNView!
let session = ARSession()
var arCameraTransform: simd_float4x4?
let scnCamera = SCNNode()
override func viewDidLoad() {
super.viewDidLoad()
sceneKitView.scene = SCNScene()
sceneKitView.backgroundColor = .black
let cylinder = SCNCylinder(radius: 0.1, height: 1)
cylinder.firstMaterial?.diffuse.contents = UIColor.red
let node = SCNNode(geometry: cylinder)
node.position.z = -0.75
sceneKitView.scene?.rootNode.addChildNode(node)
scnCamera.camera = SCNCamera()
sceneKitView.scene?.rootNode.addChildNode(scnCamera)
self.session.delegate = self
self.session.run(ARWorldTrackingConfiguration())
}
}
...
extension ViewController: ARSessionDelegate {
func session(_ session: ARSession, didUpdate frame: ARFrame) {
self.arCameraTransform = frame.camera.transform
scnCamera.simdTransform = self.arCameraTransform!
print(sceneKitView.pointOfView?.simdTransform.columns.3 as Any)
}
}
附言
这适用于.landscape
方向...
推荐阅读
- vue.js - import Vue from 'vue' 报错了
- java - 为什么 Selenium 的 ExpectedConditions.elementToBeClickable(By.xpath(xPath))) 返回一个字符串?
- c# - 添加文本框值,保持高值
- c# - 如何获取和设置注释PDF itext c#的/BSIColumnData的值
- android - 视频录制 (expo) 不适用于生产/apk 文件
- c - 从应用程序 makefile 运行库 makefile
- python - 如何在 pandas 中传播数据?
- vba - 将邮件从文件系统移动到 Outlook 文件夹
- google-bigquery - 作为数据流运行器运行时,apache beam.io.BigQuerySource use_standard_sql 不起作用
- html - 表和行跨度