我试图使一个实体悬停在同一地点的相机前,无论我如何移动设备,我没有成功。我想,我想围绕y(横向移动-偏航)和x(垂直平移-螺距)旋转。
我从ARCamera得到相机的旋转:
let distance: Float = 2 // distance in front of camera
let euler = camera.eulerAngles
let yaw = euler.y + .pi
let x = sin(yaw) * distance
let z = cos(yaw) * distance
let translation = SIMD3<Float>(x, 1, z)
let transform = Transform(scale: .one,
rotation: simd_quatf(),
translation: translation)
entity.transform = transform首先,我不清楚为什么我需要通过.pi旋转,将实体保持在摄像机前面。我是否正确地认为相机的转换被初始化到相机最初指向的位置,因此如果相机没有移动,实体就应该在摄像机前面吗?
其次,如果我尝试在x轴周围执行类似的操作,这一切都失败了:
let pitch = euler.x + .pi
let y = sin(pitch) * distance
let z = cos(pitch) * distance
let translation = SIMD3<Float>(1, y, z)很明显我对我在这里做什么感到困惑。有人能把我弄直吗?谢谢
发布于 2022-07-23 16:19:36
轨道三角学
试试这段代码来实现一个永恒的轨道:
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
var timer: Timer? = nil
var count: CGFloat = 0.0
var translate: SIMD3<Float>? = nil
var box = ModelEntity()
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 0.05,
target: self,
selector: #selector(updateSmoothly),
userInfo: nil,
repeats: true)
self.box = ModelEntity(mesh: .generateBox(size: 0.4))
let anchor = AnchorEntity(.camera)
anchor.position.z = -0.5
anchor.addChild(box)
self.box.position.z = -1.0
arView.scene.anchors.append(anchor)
}
@objc func updateSmoothly() {
self.count += 0.05
let h = Float(sin(count))
let v = Float(cos(count))
self.translate = [h, v, 0] + [h, 0, v] // orbiting around Z + Y axis
box.position = self.translate!
}
}这是一个围绕Z轴的立方体。
self.translate = [h, v, 0]

提示:
您可以很容易地在实际编写器中应用轨道行为。
https://stackoverflow.com/questions/73013224
复制相似问题