Alinear huesos y piel

Elune - 10/03/2008 18:12
Hola a todos, bueno, no sé si mi duda va por aquí. Que montón de mensajes, creo que me va a llevar un par de semanas leérmelo todo.

Tengo una duda muy tonta, pero que llevo dos días dándome contra las paredes. Necesito alinear un objeto con un hueso.

Imaginemos un ejemplo muy tonto: tengo un script que a partir de la selección de un hueso (bone) y una piel (un tubo, por ejemplo) alinea y posiciona la piel con el hueso.

Con el posicionado y la selección no tengo problema, pero no consigo alinear el hueso con el tubo. He intentado eliminar escalas, normalizar, matrices inversas, asignar rotaciones de forma directa, pero nada. Creo que el problema está en los vectores de dirección que no apuntan a donde yo quiero, pero no tengo ni idea de cómo solucionarlo.

A ver si alguien alguna vez lo ha hecho y puede ayudarme, me vendría muy bien. Gracias.
ikerCLoN - 10/03/2008 21:33
Si quieres alinear los pivotes de un objeto, ve a la pestaña Hierarchy y escoge la opción affect pivot only. Modifica la orientación del pivote, y listo.
¿Es eso lo que buscas?
Elune - 11/03/2008 20:27
Pues a ver, es una cosa muy sencilla: Creo un hueso, solo uno, en 3d maxstudio 9. Y creo un tubo y me gustaría asignarle la posición y la alineación del hueso de forma automática con el lenguaje Maxscript, o sea, a partir de un script, sin usar la interfaz. La posición no me da problema, pero en cuanto a alinearlos aún no ha habido suerte y he probado con todo:
-Tubo, rotation = bone, rotation.

About bone, pivot rotate tubo bone, rotation.

Tubo, rotation = in cordsys local bone, rotation.

Hasta con un script que pillé por el foro sobre alinear.

Y muchas cosas más, es que ya ni me acuerdo.

Consigo alinear, por ejemplo, dos tubos. Pero un hueso y un tubo no lo consigo. Espero haberme explicado mejor. Gracias. Saludos.
ikerCLoN - 11/03/2008 22:08
El problema es que, por defecto, el valor height de las primitivas suele corresponder con el eje Z local. Con los huesos, es el eje por el que apunta en su dirección longitudinal. Prueba con esto a ver qué tal funciona:
[code]$tube01.transform = $bone01.transform.
$tube01.objectoffsetrot = (eulerangles 0 90 0)[/code]
phew_in - 11/03/2008 22:09
Intenta esto:
$tubo, transform = $bone, transform.
ikerCLoN - 11/03/2008 22:29
Phew_in, eso alinea los pivotes de los objetos, pero el tubo, por sus coordenadas locales, sigue estando perpendicular al hueso. Necesitas rotar el objeto (sin el pivote) 90 grados para completar el proceso.
phew_in - 11/03/2008 22:42
Ah, juraría que con asignar la transformación era suficiente, como no tengo un max por aquí supongo que, estas en lo correcto, gracias por la aclaración.