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

360 degrees spinnable object from a photographed real object

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

类似于西奥多·格雷的应用程序元素。

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

https://youtu.be/6T0hE0jGiYY

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

https://youtu.be/qjzeewpVN9o

我希望使用 Swift 并且可能会使用 SpriteKit。

  1. 我怎样才能从现实生活中的物品变成高质量的东西 功能?我有 Mac 尼康 D810 和绿屏。

    也就是说,我猜一系列定格电影是解决问题的方法 去...但我觉得可能不够流畅。

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

    注意:捕获软件和摄影技术会有所帮助 信息,因为我对该部门一无所知。但是,我明白我 可以在 https://photo.stackexchange.com/ .

  2. 上提问

  1. 对于这个对象,我的代码的基本逻辑是什么?在以下方面:

一个。设置对象的动画或视频的功能或任何准备图像以供在我的代码中使用的最佳方式。

乙。 spin() 函数和

摄氏度。 stopSpin() 函数。

不需要整个项目示例(尽管我想它会很好)。但是,这 3 个功能足以让我继续前进。


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

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

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)
  }
}

现在您只需单击/松开即可左右交替。

下一个草稿待办事项:
- 为速度实施手势识别器
- 如果需要实施衰减(因此它会随着时间的推移而减慢)

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

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