У меня есть 3d-объект, который при сканировании я бы хотел закрепить плоскостью или видео чуть выше 3d-объекта.
Когда я сканирую объект, плоскость показывает, но когда я перемещаю объект, закрепленная плоскость отстает и медленно перемещается в свое положение над объектом.
Я бы хотел, чтобы мой самолет двигался мгновенно, когда я перемещаю 3-й объект (фиксированный якорь).
Я не использую сторонние приложения и не собираюсь. Будем весьма благодарны за любые предложения, которые помогут решить мою проблему.
Использование xcode
Я пытался изменить свой код разными способами, но без радости.
//
// ViewController.swift
// FlowerShop
import UIKit
import SceneKit
import ARKit
class ViewController: UIViewController, ARSCNViewDelegate
{
@IBOutlet var sceneView: ARSCNView!
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
let configuration = ARWorldTrackingConfiguration()
// Object Detection
configuration.detectionObjects =
ARReferenceObject.referenceObjects (inGroupNamed: "cokecan", bundle:
Bundle.main)!
// Run the view's session
sceneView.session.run(configuration)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Pause the view's session
sceneView.session.pause()
}
// MARK: - ARSCNViewDelegate
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor:
ARAnchor) -> SCNNode? {
let node = SCNNode()
if let objectAnchor = anchor as? ARObjectAnchor {
let plane = SCNPlane(width:
CGFloat(objectAnchor.referenceObject.extent.x * 0.8), height:
CGFloat(objectAnchor.referenceObject.extent.y * 0.5))
plane.cornerRadius = plane.width / 8
let spriteKitScene = SKScene(fileNamed: "ProductInfo")
plane.firstMaterial?.diffuse.contents = spriteKitScene
plane.firstMaterial?.isDoubleSided = true
plane.firstMaterial?.diffuse.contentsTransform =
SCNMatrix4Translate(SCNMatrix4MakeScale(1, -1, 1), 0, 1, 0)
let planeNode = SCNNode(geometry: plane)
planeNode.position =
SCNVector3Make(objectAnchor.referenceObject.center.x,
objectAnchor.referenceObject.center.y + 0.15
, objectAnchor.referenceObject.center.z)
node.addChildNode(planeNode)
}
return node
}
func session(_ session: ARSession, didFailWithError error: Error) {
// Present an error message to the user
}
func sessionWasInterrupted(_ session: ARSession) {
// Inform the user that the session has been interrupted, for example, by presenting an overlay
}
func sessionInterruptionEnded(_ session: ARSession) {
// Reset tracking and/or remove existing anchors if consistent tracking is required
}
}
Я бы хотел, чтобы плоскость или видео имели сплошную и фиксированную привязку, поэтому при перемещении трехмерного объекта плоскость или видео перемещается вместе с трехмерным объектом в реальном времени. Введите код здесь