ios - Objeto spinnable de 360 grados de un objeto real fotografiado
swift sprite-kit (1)
Quiero crear la capacidad de girar un objeto fotografiado 360 grados.
- Gira infinitamente según la velocidad que "flick".
- Gírelo hacia la izquierda o derecha moviendo el objeto hacia la izquierda o hacia la derecha.
- Usted detiene el giro cuando lo toca para detenerlo si está girando.
Similar a la aplicación The Elements de Theodore Gray.
Aquí hay un video de la parte de la aplicación que intento recrear. (es decir, el spinner 3D)
Aquí hay un video de mi dedo interactuando con él.
Estoy buscando usar Swift y probablemente SpriteKit.
¿Cómo puedo pasar de un objeto de la vida real a algo de alta calidad y funcional? Estoy armado con una Mac, Nikon D810 y una pantalla verde.
Es decir, supongo que una serie de imágenes stop motion es el camino a seguir ... pero siento que quizás no sea lo suficientemente fluido.
A los efectos de esta pregunta, quiero averiguar qué tendría más sentido programar. Por ejemplo, un video que estoy rebobinado y un avance rápido en el comando o un atlas de textura de cuadros de stop motion, etc.
Nota: la captura de software y técnicas de fotografía sería información útil ya que no tengo ni idea en ese departamento. Pero, entiendo que puedo preguntar eso en https://photo.stackexchange.com/ .
- ¿Cómo sería la lógica básica de mi código para este objeto? En términos de:
R. La función de configuración de la animación o video del objeto o lo que sea es la mejor manera de tener las imágenes preparadas para su uso en mi código.
B. La función spin () y
C. La función stopSpin ().
No se necesita una muestra completa del proyecto (aunque supongo que sería bueno). Pero, esas 3 funciones serían suficientes para ponerme en marcha.
- ¿SpriteKit es la elección más sabia?
Aquí está el segundo borrador de mi respuesta que muestra la funcionalidad básica de una simple animación de sprites:
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)
}
}
En este momento, solo tiene que hacer clic / soltar para alternar a la izquierda.
Todo para el próximo borrador:
- Implementar el reconocedor de gestos para la velocidad
- Implementar la descomposición si se desea (por lo que se ralentizará con el tiempo)
(El video anterior, el nuevo código no restablece el fotograma a 0):
Los elementos de imagen se encuentran aquí para la animación: https://drive.google.com/open?id=0B3OoSBYuhlkgaGRtbERfbHVWb28