【发布时间】:2020-01-30 20:35:12
【问题描述】:
我一直忙于制作一个应用程序,以在 swift4 中使用 ARKit 动态显示 OBJ 模型。当前的问题是每当我在应用程序中加载模型时,我都会得到错误的方向。一个模型是颠倒的,另一个是等等...... 以下是该问题的一个示例。如您所见,模型应该围绕 X 轴旋转 90 度,但正如我之前提到的,每个模型都有自己的问题。
有人可以帮我解决这个问题吗?
更新:我正在使用这个框架https://github.com/prolificinteractive/SamMitiAR-iOS 我这样加载模型:
let virtualObject = SamMitiVirtualObject(refferenceNode: SCNReferenceNode.init(url:modelUrl as URL)! , allowedAlignments: [.horizontal])
然后:
virtualObjectLoader.loadVirtualObject(virtualObject) { loadedObject in
loadedObject.scaleRange = (0.00001)...0.0002
self.sceneView.currentVirtualObject = loadedObject
self.sceneView.currentVirtualObject?.contentNode?.opacity = 0
SceneKitAnimator.animateWithDuration(duration: 0.35, animations: {
self.sceneView.currentVirtualObject?.contentNode?.opacity = 1
})
这就是 viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
sceneView.placingMode = .focusNode
sceneView.samMitiARDelegate = self
sceneView.isAutoFocusEnabled = false
sceneView.isLightingIntensityAutomaticallyUpdated = true
if #available(iOS 12.0, *) {
sceneView.environmentTexturing = .automatic
sceneView.lightingEnvironmentContent = nil
sceneView.baseLightingEnvironmentIntensity = 6
} else {
sceneView.environmentTexturing = .none
sceneView.lightingEnvironmentContent = "art.scnassets/hdr-room.jpg"
sceneView.baseLightingEnvironmentIntensity = 1.5
}
sceneView.initialPreviewObjectOpacity = 0.667
sceneView.initialPreviewObjectMaxSizeRatio = CGSize(width: 0.667, height: 0.667)
sceneView.allowedGestureTypes = [.tap, .pan, .rotation, .pinch]
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
initializeSamMiti()
}
override func viewDidAppear(_ animated: Bool) {
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Pause the view's AR session.
sceneView.session.pause()
}
@IBAction func crossButtonDidTouch(_ sender: Any) {
print("close button got touched")
dismiss(animated: true, completion: nil)
}
extension ARViewController: SamMitiARDelegate {
/// Example of using delegate for haptic feedback when object was placed
func samMitiViewDidPlace(_ virtualObject: SamMitiVirtualObject) {
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
}
/// Example of using delegate for haptic feedback when object scaling is snapped
@objc(samMitiVirtualObject:didSnapToScalingFactor:) func samMitiVirtualObject(_ virtualObject: SamMitiVirtualObject, didSnapToScalingFactor didSnappedToScalingFactor: Float) {
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
}
/// Example of using delegate for haptic feedback when scaling to bound
func samMitiVirtualObject(_ virtualObject: SamMitiVirtualObject, didScaleToBound: Float) {
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
}
【问题讨论】:
-
请编辑您的问题并发布相关代码
-
@Sia,对不起,这不是全部,它是代码 sn-ps。
config是什么?场景节点的层次结构在哪里? -
@ARGeo 冷你请让我知道你到底需要什么,然后我可以在平台上找到它。我只是将路径移交给平台,平台就会做它该做的事情。
-
@Sia,向我们展示您的所有代码:renderer() 方法的内容、viewWillAppear() 的内容等...您的代码是用 Xcode 编写的还是来自 Unity(包装 ARKit SDK在 C# 脚本中)?
-
@ArGeo 我刚刚更新了代码
标签: ios swift swift4 augmented-reality arkit