Animar un objeto con un archivo externo de coordenadas y ángulos

Salced0x - 27/03/2009 11:51
Hola. Me encuentro con un problema a la hora de importar coordenadas x y, z y los tres ángulos. Tengo un script, pero tiene un error en el x.value y no sé cómo seguir.

This script Will reset your scene, so save before running it.

Resetmaxfile #noprompt.

S = sphere ().

Spaz =, pues, controller.

Function definition.

Fn addkeysfromfile Control file =
(.

Local f = openfile file.

T=0.
While (not eof f) do.

Local x = addnewkey Control t.

Local a = [readvalue f, readvalue f, readvalue f].

X.value = a.

Te += 10).

Close f).

Evaluate function.

Addkeysfromfile spaz infiniti, dat.

Con el archivo infiniti.
-15.7436,9.4353,-11.2804.
96.011, -150.876, 138.0289.
-5.2103, -230.7725, 122.3503.
29.9328, -212.5843, 9.2386.
92.5178, -120.9492, -57.7814.
-0.5455, 1.8896, 11.4197.
-91.7734, 124.0946, 122.0455.
-28.3564, 213.9283, 164.8463.
4.4424, 231.2096, 84.569.
-102.4511, 155.1786, -55.0066.
-15.7436, 9.4353, -11.2804.

Me gustaría saber que error tengo y como añadir también las rotaciones. Muchas gracias.
Cesar Saez - 27/03/2009 18:29
El problema es que estas tratando de darle un valor a una key entregando un Vector de 3 valores. Si animas algo manualmente veras que cada componente de la posición tiene su propio controlador y por ende su propia colección de keys.

Una forma de resolverlo sería usar la opción animate, prueba con esto.
[code]Fn addkeysfromfile Control file =
(.

F = openfile file.

T=0.
While not eof f do.

Animate on.

At time te Control, value = [readvalue f, readvalue f, readvalue f]).

Te += 10).

Close f).

S = sphere ().

Addkeysfromfile, pues, controller infinity, dat.
)[/code]
Salced0x - 27/03/2009 19:01
Muchas gracias por tu rápida contestación. Pero he probado lo que me has dicho y no me funciona, y no sé qué pasa. Si puedes ver qué pasa, muchas gracias.

Hasta lueo.
Cesar Saez - 27/03/2009 20:01
Guardaste el script en la misma carpeta que el archivo infinity, datí quizás es eso.
Ruramuq - 27/03/2009 20:40
Ahí mismo en cgtalk dan la respuesta a este script y varias opciones más. El error está en la variable x que retorna ok en lugar del key como lo indica zeboxx2. [url]http://forums.cgsociety.org/showthread.php?f=98&t=736065&highlight=addkeysfromfile[/url].

La respuesta de bobo es muy buena:

[code]- This script Will reset your scene, so save before running it.

Resetmaxfile #noprompt.

S = sphere ().

Function definition.

Fn animateobject spaz file=
(tlocal f = openfile file tt=0 while (not eof f) do t(t with animate on at time te spaz, pues = [readvalue f, readvalue f, readvalue f] te += 10 t).

Close f.
).

Evaluate function.

Animateobject s test, dat[/code]

Cesar Saez - 27/03/2009 21:02
Que coincidencia, sugerí exactamente lo mismo que bobo, vaya honor.
Salced0x - 28/03/2009 20:39
Muchas gracias. Ya para marear un poco la perdiz estoy intentando aparte de mover la esfera hacer que rote en sus tres ángulos de giro.
¿Cómo podría hacerlo?
Muchas gracias de adelantado.
Cesar Saez - 29/03/2009 04:35
Depende cómo tengas la información en tu archivo.dat, suponiendo que tengas la información intercalada (una línea para posición y la siguiente rotación) podrías hacerlo así:
[code]Fn addkeysfromfile obj file =
(.

F = openfile file.

T=0.
While (not eof f) do.

Animate on.

At time t.

Obj, position = [readvalue f, readvalue f, readvalue f].

Obj, rotation = eulerangles (readvalue f) (readvalue f) (readvalue f)).
).

Te += 10).

Close f).

S = sphere ().

Addkeysfromfile s infinity, dat).
[/code]

Ojo, el número de líneas con información de posición debe ser igual al de rotación.