如何在不使用相机的情况下使用带有自定义背景视图的 ARKit iOS 11 放置 3D 模型?
How to place 3D model using ARKit iOS 11 with some custom background view without using camera?
我正在开发一个增强现实 iOS 应用程序,我正在为此使用 iOS 11 beta 的 ARKIT。我正在使用 ARSCNView(SceneKit) 渲染我的 .scn 对象。我按照苹果给出的示例创建了一个 ARSession(https://developer.apple.com/sample-code/wwdc/2017/PlacingObjects.zip)。是否可以放置带有自定义背景而不是相机的 3D 模型?
喜欢的用户可以select背景颜色或者可以提供自定义2D照片作为背景吗?
您的视图有一个 scene
属性,您可以在其中将 background
设置为颜色或图像:
view.scene.background.contents = UIColor.red
let myImage: UIImage = ...
view.scene.background.contents = myImage
我使用 UIKit
的摇动回调来更改背景内容。正如@yaali 所说, CameraContents
用于存储相机内容。请注意,如果相机尚未启动,例如在 viewWillAppear
上,我们将无法获得 background.contents
。我想 ARKit
将 AVCaptureVideoPreviewLayer
设置为 ARSCNView.scene.background.cocntents
。
override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {
if CameraContents == nil {
CameraContents = sceneView.scene.background.contents;
return
}
if cameraBackGround == true {
sceneView.scene.background.contents = "Background_sky.png"
}else{
sceneView.scene.background.contents = CameraContents
}
cameraBackGround = !cameraBackGround
}
我正在开发一个增强现实 iOS 应用程序,我正在为此使用 iOS 11 beta 的 ARKIT。我正在使用 ARSCNView(SceneKit) 渲染我的 .scn 对象。我按照苹果给出的示例创建了一个 ARSession(https://developer.apple.com/sample-code/wwdc/2017/PlacingObjects.zip)。是否可以放置带有自定义背景而不是相机的 3D 模型?
喜欢的用户可以select背景颜色或者可以提供自定义2D照片作为背景吗?
您的视图有一个 scene
属性,您可以在其中将 background
设置为颜色或图像:
view.scene.background.contents = UIColor.red
let myImage: UIImage = ...
view.scene.background.contents = myImage
我使用 UIKit
的摇动回调来更改背景内容。正如@yaali 所说, CameraContents
用于存储相机内容。请注意,如果相机尚未启动,例如在 viewWillAppear
上,我们将无法获得 background.contents
。我想 ARKit
将 AVCaptureVideoPreviewLayer
设置为 ARSCNView.scene.background.cocntents
。
override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {
if CameraContents == nil {
CameraContents = sceneView.scene.background.contents;
return
}
if cameraBackGround == true {
sceneView.scene.background.contents = "Background_sky.png"
}else{
sceneView.scene.background.contents = CameraContents
}
cameraBackGround = !cameraBackGround
}