来自拍摄的真实物体的360度可旋转物体

时间:2017-06-23 16:09:18

标签: ios swift sprite-kit photography

我想创建将拍摄对象旋转360度的能力。

  • 它根据您的速度无限旋转"轻弹"
  • 通过向左或向右轻拂对象,向左或向右旋转。
  • 触摸时停止旋转,如果它旋转则停止旋转。

enter image description here

类似于西奥多·格雷的应用程序The Elements。

这是我试图重新创建的应用程序部分的视频。 (即3D微调器)

https://youtu.be/6T0hE0jGiYY

这是我手指与之互动的视频。

https://youtu.be/qjzeewpVN9o

我希望使用Swift和可能的SpriteKit。

  1. 我怎样才能从现实生活中获得高质量的物品 功能?我配备了Mac,尼康D810和绿屏。

    我猜测一系列定格动画就是这样的 去......但我觉得这可能不够流畅。

    出于这个问题的目的,我想弄清楚编程最有意义的是什么。例如。一个视频我正在倒带和快进 命令或停止运动帧的纹理图集等

    注意:捕获软件和摄影技术会很有帮助 信息,因为我在该部门无能为力。但是,我理解我 可以在https://photo.stackexchange.com/上询问。

    1. 我的代码的基本逻辑对于这个对象会是什么样的?在:
    2. 一个。设置对象动画或视频的功能或其他是准备好在我的代码中使用的图像的最佳方式。

      B中。 spin()函数和

      ℃。 stopSpin()函数。

      不需要整个项目样本(虽然我猜它很好)。但是,这3个功能足以让我继续前进。

      1. SpriteKit是最明智的选择吗?

1 个答案:

答案 0 :(得分:2)

以下是我的答案的第二稿,展示了简单精灵动画的基本功能:

class GameScene: SKScene {

  // Left spin is ascending indices, right spin is descending indices.
  var initialTextures = [SKTexture]()

  // Reset then reload this from 0-6 with the correct image sequences from initialTextures:
  var nextTextures = [SKTexture]()

  var sprite = SKSpriteNode()

  // Use gesture recognizer or other means to set how fast the spin should be.
  var velocity = TimeInterval(0.1)

  enum Direction { case left, right }

  func spin(direction: Direction, timePerFrame: TimeInterval) {

    nextTextures = []
    for _ in 0...6 {

      var index = initialTextures.index(of: sprite.texture!)

      // Left is ascending, right is descending:
      switch direction {
      case .left:
        if index == (initialTextures.count - 1) { index = 0 } else { index! += 1 }
      case .right:
        if index == 0 { index = (initialTextures.count - 1) } else { index! -= 1 }
      }

      let nextTexture = initialTextures[index!]
      nextTextures.append(nextTexture)
      sprite.texture = nextTexture
    }

    let action = SKAction.repeatForever(.animate(with: nextTextures, timePerFrame: timePerFrame))
    sprite.run(action)
  }

  override func didMove(to view: SKView) {
    removeAllChildren()

    // Make our textures for spinning:
    for i in 0...6 {
      initialTextures.append(SKTexture(imageNamed: "img_\(i)"))
    }
    nextTextures = initialTextures

    sprite.texture = nextTextures.first!
    sprite.size = nextTextures.first!.size()
    addChild(sprite)
    spin(direction: .left, timePerFrame: 0.10)
  }

  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    spin(direction: .right, timePerFrame: velocity)
  }

  override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    spin(direction: .left, timePerFrame: velocity)
  }
}

现在你只需点击/释放左右交替。

Todo下一次选秀:
  - 为速度实施手势识别器   - 如果需要实施衰减(因此随着时间的推移会减慢)

(旧视频,新代码不会将帧重置为0):

enter image description here

此处可以找到动画的图像资源: https://drive.google.com/open?id=0B3OoSBYuhlkgaGRtbERfbHVWb28