gpt4 book ai didi

swift - 围绕特定节点环绕 Scenekit 相机

转载 作者:行者123 更新时间:2023-11-28 07:31:36 43 4
gpt4 key购买 nike

我很难弄清楚如何让我的 SceneKit 相机围绕我游戏中的特定节点运行。

如果我的场景中只有一个节点(一艘船)和一个相机,一切正常。如果我添加一个额外的节点(一个行星),相机枢轴点似乎从我的船变为我的船和行星之间的空间。

我尝试过的事情:

  • 在我的相机上设置注视约束(设置到船上)
  • 将相机位置设置到我的船上(它会移动但枢轴点似乎仍然在两个物体之间)
  • 改变相机枢轴点

    例子:

    class TestSceneViewController: UIViewController, SCNSceneRendererDelegate {

    var scnView: SCNView = SCNView()
    var scnScene: SCNScene!
    var cameraNode: SCNNode!
    var ship: SCNNode!

    override func viewDidLoad() {
    super.viewDidLoad()

    setupView()
    setupScene()
    setupCamera()

    ...

    func setupView() {
    // scnView = self.view as! SCNView

    // retrieve the SCNView
    scnView = SCNView(frame: view.frame)
    scnView.showsStatistics = true
    view.addSubview(scnView)

    scnView.allowsCameraControl = true
    scnView.defaultCameraController.interactionMode = .orbitTurntable
    scnView.defaultCameraController.inertiaEnabled = true

    scnView.delegate = self
    scnView.isPlaying = true
    scnView.loops = true
    }


    func setupScene () {
    scnScene = SCNScene()
    scnView.scene = scnScene

    let ships = SCNScene(named: "art.scnassets/simpleshuttle3.scn")

    ship = ships!.rootNode.childNode(withName: "ship", recursively: true)
    ship?.position = SCNVector3(x: 0, y: 0, z: 0)
    scnScene.rootNode.addChildNode(ship!)

    let planets = SCNScene(named: "art.scnassets/sphere.scn")!
    if let planet = planets.rootNode.childNode(withName: "Ball", recursively: true){
    planet.position = SCNVector3(x: 0, y: 0, z: 40)
    scnScene.rootNode.addChildNode(planet)
    }
    }

    func setupCamera() {
    cameraNode = SCNNode()
    cameraNode.camera = SCNCamera()
    cameraNode.position = SCNVector3(x: ship.position.x, y: ship.position.y, z: 80)
    cameraNode.camera?.motionBlurIntensity = 1.0
    cameraNode.camera?.automaticallyAdjustsZRange = true
    scnScene.rootNode.addChildNode(cameraNode)
    }

最佳答案

您正在启用手动相机控制。

scnView.allowsCameraControl = true

如果你想使用例如SCNLookAtConstraint 你必须禁用它。否则你有冲突。相机不应该指向某个位置,同时被用户旋转。

如果您想保留默认相机 Controller ,您可以创建一个额外的 SCNNode 作为您的星球和飞船的父级。现在可以移动此父节点,以便枢轴点位于您想要的位置。

关于swift - 围绕特定节点环绕 Scenekit 相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54505013/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com