Huesos elásticos - script corregido

Moderadores: David, Tutores

ikerJ
Miembro Vip
Miembro Vip
Mensajes: 212
Registrado: Mar Jun 15, 2010 9:21 pm

Huesos elásticos - script corregido

Mensajepor ikerJ » Mié Jun 27, 2012 2:01 pm

Buenas,

A raíz de un aviso de Juan, me he dado cuenta de que el script sólo funciona bien cuando tenemos más de dos puntos seleccionados. Ésta es la versión que funciona también cuando la selección consiste únicamente en dos puntos:

Código: Seleccionar todo

--select two points or more points and run the code below for creating a 'stretchy' bone or a 'stretchy' chain fn makeNubBone lastBone = ( local pos = lastBone.transform[4] -- get the position of the last bone. local xDir = lastBone.transform[1] -- get the vector of the X point. local startPoint = pos + xDir * lastBone.length local endPoint = startPoint + xDir * lastBone.width local nubBone = boneSys.createBone startPoint endPoint lastBone.transform[3] -- create the bone. nubBone.width = lastBone.width nubBone.height = lastBone.height nubBone.wireColor = lastBone.wireColor nubBone.parent = lastBone nubBone.name = lastBone.name + "_Nub" return nubBone ) fn createElasticBones pointList = ( if selection.count == 2 do ( if classof pointList[1] == Point and classof pointList[2] == Point then ( oBone = boneSys.createBone pointList[1].pos pointList[2].pos pointList[1].transform[3] theNub = makeNubBone oBone oBone.position.controller = Position_Constraint() oBone.position.controller.appendTarget pointList[1] 100 theNub.position.controller = Position_Constraint() theNub.position.controller.appendTarget pointList[2] 100 oBone.rotation.controller = LookAt_Constraint() oBone.rotation.controller.appendTarget pointList[2] 100 oBone.rotation.controller.viewline_length_abs = false oBone.rotation.controller.upnode_world = false oBone.rotation.controller.pickUpnode = pointList[1] oBone.rotation.controller.upnodeAxis = 2 oBone.rotation.controller.stoUpAxis = 2 ) else messageBox "Selected objects must be points" ) if selection.count > 2 do ( theBones = #() for i = 1 to (selection.count-1) do ( theBone = boneSys.createBone pointList[i].pos pointList[i+1].pos pointList[i].transform[3] append theBones theBone ) theNub = makeNubBone theBones[theBones.count] append theBones theNub theNub.position.controller = Position_Constraint() theNub.position.controller.appendTarget pointList[pointList.count] 100 for i = 1 to theBones.count-1 do ( theBones[i].position.controller = Position_Constraint() theBones[i].position.controller.appendTarget pointList[i] 100 theBones[i].rotation.controller = LookAt_Constraint() theBones[i].rotation.controller.appendTarget pointList[i+1] 100 theBones[i].rotation.controller.viewline_length_abs = false theBones[i].rotation.controller.upnode_world = false theBones[i].rotation.controller.pickUpnode = pointList[i] theBones[i].rotation.controller.upnodeAxis = 2 theBones[i].rotation.controller.stoUpAxis = 2 ) for i = 2 to theBones.count do ( theBones[i].parent = theBones[i-1] ) ) ) createElasticBones selection
El problema era una variable mal escrita ^_^

¡Saludos!

miguelbr
Iniciado
Iniciado
Mensajes: 24
Registrado: Mar Oct 04, 2011 8:37 pm

Re: Huesos elásticos - script corregido

Mensajepor miguelbr » Mié Jun 27, 2012 4:41 pm

Pues muchisimas gracias Iker y Juan, porque llevaba unos dias volviéndome loco !!!!

miguelbr
Iniciado
Iniciado
Mensajes: 24
Registrado: Mar Oct 04, 2011 8:37 pm

Re: Huesos elásticos - script corregido

Mensajepor miguelbr » Mié Jul 04, 2012 3:10 pm

Hola Iker

Estaba yo echándole un vistazo "con zoom" a este script que te has marcao, y me han surgido algunas dudillas:

en la función createElasticBones, en el segundo if (selection.count > 2), pones esta líneas que me parecen importantes porque si no voy mal, es donde decides la gestión del hueso Nub en la cadena:

theNub = makeNubBone theBones[theBones.count]
append theBones theNub
theNub.position.controller = Position_Constraint()
theNub.position.controller.appendTarget pointList[pointList.count] 100


En la 1ª y 4ª línea que quieres decir cuando utilizas [theBones.count], y [pointList.count] ? estás llamando a todos los elementos de la lista ? igual soy un poco burro pero porqué para crear el Nub, parece que llamas a toda la lista?


Y luego otra cosilla más: cuando yo voy metiendo elementos en una lista por medio de un bucle, tengo más o menos claro el orden en que estará cada elemento dentro de la lista, pero cuando no, cómo puedo yo controlar el orden que tendrá cada elemento dentro de la lista?

Graciassss


Volver a “Rig de Personajes”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado