Animación en base a lista de coordenadas
Buenos días chic@s:
Me han hecho una pregunta bastante curiosa e interesante. Os la cito:
Tengo un archivo de texto con una lista de coordenadas x e y. En una columna tengo los valores de x y en otra los valores de y. ¿Se puede hacer que Blender, o cualquier otro programa, lea el archivo de texto y que haga la animación de un objeto de acuerdo a estas coordenadas? Cada renglón del archivo de texto sería un fotograma.
¿Qué opináis vosotros?
Un saludo.
1 Archivos adjunto(s)
Animación en base a lista de coordenadas
Cita:
Iniciado por
3J Kernel
Buenos días chic@s:
Me han hecho una pregunta bastante curiosa e interesante. Os la cito:
Tengo un archivo de texto con una lista de coordenadas x y y. En una columna tengo los valores de x y en otra los valores de y. ¿Se puede hacer que Blender, o cualquier otro programa, lea el archivo de texto y que haga la animación de un objeto de acuerdo a estas coordenadas? Cada renglón del archivo de texto sería un fotograma.
¿Qué opináis vosotros? Un saludo.
A ver, con Python se puede hacer casi todo, aunque de la forma qué explicas, tal vez no; sería un poco más complicado.
Algún programador te puede responder.
Y en último caso, lo puedes poner a mano. (a no ser que sea una lista muy larga, claro).
Archivo adjunto 218920
Animación en base a lista de coordenadas
Mira este script, el cual te genera una esfera con una animación según las coordenadas que tiene puestas.
http://Blenderscripting, blogspot, c...t-just-so.html.
.
2 Archivos adjunto(s)
Animación en base a lista de coordenadas
Si se puede, aprovechando el script que ha dejado Solimán para la inserción de los fotograma clave para la animación, he hecho un blend el cual toma las coordenadas de.
Mi archivo, pero no de texto, es un csv, es más cómodo para mí porque Python tiene un módulo que se llama csv para leer y manipular este tipo de archivos, en archivos de texto hay que transformar más cosas, a la hora de leerlo no hay problema, pero a la hora de usar los datos es más tedioso, en los archivos csv los campos que están separados por coma son leídos por Python como valores independientes dentro de una lista. Si tienes un archivo texto solo tienes que, abrirlo y guardarlo con extensión.csv. Dejo el Blend y el archivo csv para que lo pruebes, en la escena solo hay una cámara y una luz, la puedes seleccionar y hacer correr el script y te hará la animación. Si quieres puedes añadir cualquier objeto y ejecutar el script, este hará una animación a cualquier objeto que este seleccionado.
Insertará tantos keyframes como líneas de texto haya en el archivo, en este ejemplo hay 5 líneas y el script insertará un fotograma clave cada 10 frames hasta 5 en total.
Vaya, el archivo csv como el de texto tiene que estar en el mismo directorio desde dónde abras este blend, si no habría que hacerlo de otra manera, especificando rutas y eso. Un saludo.
Posdata: No puedo subir el archivo en csv lo he subido en txt, lo tienes que cambiar, solo abres y lo guardas como csv.
Animación en base a lista de coordenadas
Algo nuevo que aprendemos.
Por cierto, si no te deja subirlo como CSV lo que se puede hacer es comprimirlo en ZIP.
Los archivos (*.zip) sí que los permite la página, vale para cualquier tipo de archivo, ya sea texto o ejecutables.
Animación en base a lista de coordenadas
Por cierto, solo funciona con dos coordenadas o se puede poner la tercera coordenada también?
Código:
import bpyimport csv.
Ob = bpy, context, active_object.
Frame_num = 0.
with open(LerConBlender, csv) as csvarchivo:
Entrada = csv, reader(csvarchivo).
For reg in entrada:
x = reg[0].
Y = reg[1].
Z = 2.0.
Positions = [(float(x), float(y), z)].
For position in positions:
Bpy, context, scene, frame_set(frame_num).
Ob, location = position.
Ob.keyframe_insert(data_path=location, index=-1).
Frame_num += 10
.
Editado :
Lo acabo de probar y con este script me funciona en tres coordenadas.
Código:
import bpyimport csv.
Ob = bpy, context, active_object.
Frame_num = 0.
with open(LerConBlender, csv) as csvarchivo:
Entrada = csv, reader(csvarchivo).
For reg in entrada:
x = reg[0].
Y = reg[1].
Z = reg[2].
Positions = [(float(x), float(y), float(z))].
For position in positions:
Bpy, context, scene, frame_set(frame_num).
Ob, location = position.
Ob.keyframe_insert(data_path=location, index=-1).
Frame_num += 10
.
Y este texto.
Código:
.
1,1,2.
5,3,8.
8,-1,3.
4,4,5.
2,9,0.
9,1,-4.
.
Animación en base a lista de coordenadas
Claro Solimán, no me ha dado tiempo a responderte y ya lo habías visto, te estás haciendo un crack de los script. Puse las dos coordenadas por no liar la cosa, puedes poner los campos que quieras lo que tienes que saber es para qué los vas a usar. Un saludo.
Animación en base a lista de coordenadas
Muchas gracias a los dos por resolver la duda. Un saludo.