3d 镜头跟踪

3d 镜头跟踪,3d,swift3,camera,physics,scenekit,3d,Swift3,Camera,Physics,Scenekit,我将球作为球员的主要物理身体: setup_Player () { playerGeometry = SCNSphere(radius: CGFloat(radius)) playerGeometry.segmentCount = 64 player = SCNNode(geometry: playerGeometry) player.geometry?.materials = [playerMaterial]; player.position = S

我将球作为球员的主要物理身体:

setup_Player () {

    playerGeometry = SCNSphere(radius: CGFloat(radius))
    playerGeometry.segmentCount = 64

    player = SCNNode(geometry: playerGeometry)
    player.geometry?.materials = [playerMaterial];
    player.position = SCNVector3(x: 1, y: 15, z:  0.5)

    let playerShape = SCNPhysicsShape(geometry: playerGeometry, options: nil)
    let playerBody = SCNPhysicsBody(type: .dynamic, shape: playerShape)

    player.physicsBody?.categoryBitMask = collisionRollingBall
    player.physicsBody?.collisionBitMask = collsionTarget
    player.physicsBody?.mass = 10
    player.physicsBody = playerBody

    scene.rootNode.addChildNode(player)

    }
func setupCamera () {

    //create a main camera
    cameraNode = SCNNode()
    cameraNode.camera = SCNCamera()
    cameraNode.camera?.zFar = 100;
    cameraNode.position = SCNVector3Make(0, 0, 0)
    cameraNode.eulerAngles = SCNVector3Make(0, 0, 0)
    cameraNode.rotation  = SCNVector4Make(0, 1, 0, Float(-M_PI_4*0.75))
    scene.rootNode.addChildNode(cameraNode)

    //add a secondary camera to the player
    let frontCameraNode = SCNNode()
    frontCameraNode.position = SCNVector3Make(0, 15, 0)
    frontCameraNode.rotation  = SCNVector4Make(1, 0, 0, Float(-M_PI_4*2.2))

    frontCameraNode.camera = SCNCamera()
    frontCameraNode.camera?.zFar = 100

    player.addChildNode(frontCameraNode)

}
编写代码以固定我的播放机旁边的摄像头位置:

setup_Player () {

    playerGeometry = SCNSphere(radius: CGFloat(radius))
    playerGeometry.segmentCount = 64

    player = SCNNode(geometry: playerGeometry)
    player.geometry?.materials = [playerMaterial];
    player.position = SCNVector3(x: 1, y: 15, z:  0.5)

    let playerShape = SCNPhysicsShape(geometry: playerGeometry, options: nil)
    let playerBody = SCNPhysicsBody(type: .dynamic, shape: playerShape)

    player.physicsBody?.categoryBitMask = collisionRollingBall
    player.physicsBody?.collisionBitMask = collsionTarget
    player.physicsBody?.mass = 10
    player.physicsBody = playerBody

    scene.rootNode.addChildNode(player)

    }
func setupCamera () {

    //create a main camera
    cameraNode = SCNNode()
    cameraNode.camera = SCNCamera()
    cameraNode.camera?.zFar = 100;
    cameraNode.position = SCNVector3Make(0, 0, 0)
    cameraNode.eulerAngles = SCNVector3Make(0, 0, 0)
    cameraNode.rotation  = SCNVector4Make(0, 1, 0, Float(-M_PI_4*0.75))
    scene.rootNode.addChildNode(cameraNode)

    //add a secondary camera to the player
    let frontCameraNode = SCNNode()
    frontCameraNode.position = SCNVector3Make(0, 15, 0)
    frontCameraNode.rotation  = SCNVector4Make(1, 0, 0, Float(-M_PI_4*2.2))

    frontCameraNode.camera = SCNCamera()
    frontCameraNode.camera?.zFar = 100

    player.addChildNode(frontCameraNode)

}
我只需要将相机的位置冻结在一定的距离,就像在游戏中的第三人称一样

在这种情况下,摄影机获取球的物理特性并随球旋转。但我需要跟随球员和所有人,而不是以巨大的速度旋转球

如何在不继承其属性的情况下修复播放器旁边的相机?你知道如何忽略身体的旋转吗


提前感谢。

您只需更新相机的位置,然后将其添加到场景中,而不是播放器中。您应该在
渲染器中的每一帧执行此操作(\ux:​更新​在​时间:​)

我认为还需要做更多的工作,比如摄像机的旋转等等,但这可能会给你指明正确的方向