![]() |
|
Bienvenido a Foros 3DPoder.. Usted esta viendo este foro como invitado, no esta registrado todavía, lo que limita su visión del foro. Si quiere unirse gratis a la mayor comunidad del diseño gráfico de habla hispana, tener acceso a publicar y responder mensajes, tener mensajes privados con otros miembros(PM), responder encuestas, publicar sus imágenes para que las vea el resto del mundo, tener acceso a los video_tutoriales, y muchas cosas más, no lo dude. Registrarse es rápido, simple y gratuito, agregate hoy a la mayor comunidad 3D de habla hispana! ! Si usted tiene algún problema con su registro, por favor , díganoslo aquí.
|
![]() |
|
|||||||
|
|
#1 |
|
reBorn
Fecha de Ingreso: diciembre-2004
Ubicación: Tenerife
Mensajes: 2,842
|
Bueno, tengo una duda muy garnde llevo todo el santo dia intentando hacerme un pequeño script sencillito, tengo la manera d ehacerlo peor no la manera de aplicarlo a maxscript.
Lo que quiero conseguir no es facil de explicar, tengo dos objetos situados a diferentes alturas, quiero que el más alto se mueva hacia arriba cierta cantidad el otro le acompañe, pero que cuando baje no lo haga. Vereis tengo dos objetos(obj1 y obj2) en max, obj2 está colocado en z=0 por ejemplo y obj1 en z=90, luego tengo una variable que es la distancia entre ellos inicial es decir v=90,luego tengo un dummy colocado en el 0,0,0, y dos variables mas dist1 que es la distancia del obj1 a el dummy y luego tengo dist2 que es la distancia del obj2 al dummy. mejor os dejo un esquema echo en papel y a ver si alguien me puede echar una mano con maxscript. Iker, larry Help!! |
|
|
|
| Enlaces patrocinados |
|
|
#2 |
|
como siempre...
Fecha de Ingreso: julio-2005
Ubicación: vila-real
Mensajes: 359
|
si lo que quieres lo he entendido bien solo tienes que hacer que al moverlo hacia arriba (alejarse del dummy, (la distancia al mismo será mayor)) obj1 y obj2 se muevan y obj2 conserve la distancia ocn obj1, y que al bajar obj1 sólo baje obj1, y obj2 no se mueva...
yo intentaría plantearlo de la forma que he dicho yo, al alejarse del dummy hacer que puedan moverse y que se guarde esta distancia (sólo se moveran los dos cuando la distancia al dummy aumente) y que en el momento en que disminuya la distancia (cuando lo bajes) este movimiento sólo afecte al obj1 y no al obj2 y que este se quede donde estaba... no se la forma de hacerlo con maxscript pq no he probado a hacer nada nunca yo solo se programar en C, basic y algo de python, no he probado en maxscript pq supongo que será orientado a objetos y de eso no he dado nada por el momento así que sólo puedo decir la forma en que lo plantearía yo... espero que te sirva de algo y suerte ;P. |
|
|
|
|
|
#3 |
|
reBorn
Fecha de Ingreso: diciembre-2004
Ubicación: Tenerife
Mensajes: 2,842
|
exavi muchas gracias, pero si no te he entendido mal, me parece que lo tenemos planteado de la misma manera, para eso he puesto el dummy. Asi se la diferencia de distancia con este.
Solo me queda aplicarlo a Maxscript, o quiza sea más facil utilizar un float expression. |
|
|
|
|
|
#4 | |
|
como siempre...
Fecha de Ingreso: julio-2005
Ubicación: vila-real
Mensajes: 359
|
Cita:
|
|
|
|
|
|
|
#5 |
|
Método Polaco
Fecha de Ingreso: abril-2004
Mensajes: 3,174
|
Yo en Maya hice una vez algo parecido, pero lo planteé de otra manera (te lo cuento por si te sirve... estoy recién formateado y no lo tengo instalado, mñn en el curro lo hago otra vez y te posteo el código).
Dos objetos, Cubo1 y Cubo2, queremos que cuando suba Cubo1 , Cubo2 suba con él, y cuando baje Cubo1, no afecte a Cubo2. - $vertAnterior: almacenando el valor de posición en Y de Cubo1 en el frame Anterior al actual. - $vertActual: variable con el valor en Y actual de Cubo1. - Parent Constraint en el eje Y de Cubo2 a Cubo1. Aquí hacemos una variable $vertConst , que sea el Weight de la constraint (con 0 Cubo2 queda libre, y con 1 queda atado a Cubo1) if ($vertAct > $vertAnt) { $vertConst = 1; } else { $vertConst = 0; } Esa es la idea, fijo que la expresión tiene algún error porque hace ya algo que no toco MEL, pero la idea se pilla. Son distintas formas de hacerlo... yo veo la mia más "sencilla" porque no hay que andar metiendo distancias, seguro que se puede hacer de muchas otras también... ahí está la gracia del scripting jeje Saludos! |
|
|
|
|
|
#6 |
|
reBorn
Fecha de Ingreso: diciembre-2004
Ubicación: Tenerife
Mensajes: 2,842
|
vale parece mucho mas sencillo, intentare pasarlo a maxscript y te cuento...
gracias stewie!! |
|
|
|
|
|
#7 |
|
Método Polaco
Fecha de Ingreso: abril-2004
Mensajes: 3,174
|
Vale, olvídate de la solución anterior porque obviamente está mal (en el momento en que el constraint valga 0, el cubo volverá a su posición inicial, no mantendrá la que tiene, vamos que "salta" al orígen cuando Weight = 0).
Otra solución, hacer que cuando Cubo1 sube, la distancia que sube del frame anterior al frame actual, se le sume al Cubo2, y cuando Cubo1 baja, no pase nada. La pega: que no ves el resultado al mover el objeto, sólo al darle a Play y al mover la barra de tiempos, y luego no puedes ponerlo a "0" porque está controlado por la expresión. Voy a ver si encuentro alguna manera, que tiene que ser sencillo pero estoy algo oxidado... pero funcionar funciona! Ahí va el código: // variable con el nº de frame anterior al actual $timAnt = (`currentTime -q` -1); // posición vertical en el frame anterior de Cubo1 $posAnt = `getAttr -t $timAnt Cubo1.ty`; // posición actual de Cubo1 $posAct = `getAttr Cubo1.ty`; // variación de posición del frame anterior al actual $varPos = $posAct - $posAnt; // expresión, si la posición vertical actual de Cubo1 es mayor que la posición anterior, // sumamos a la posición Y de Cubo2, la variación de posición de Cubo1 if ($posAct > $posAnt) { Cubo2.translateY = Cubo2.translateY + $varPos; } Saludos! |
|
|
|
|
|
#8 |
|
reBorn
Fecha de Ingreso: diciembre-2004
Ubicación: Tenerife
Mensajes: 2,842
|
ey stewie muchas gracias por molestarte, la verdad es que estoy investigando bastante, alguien me dijo que se puede hacer, pero no como... de todas maneras me cojo tu script. jejeje
muchas gracias |
|
|
|
|
|
#9 |
|
Miembro
Fecha de Ingreso: noviembre-2003
Ubicación: 3d
Mensajes: 72
|
stewie haber sinos recomendais algunos links. :-)
|
|
|
|
|
|
#10 |
|
Senior Member
Fecha de Ingreso: octubre-2004
Ubicación: salamanca
Mensajes: 690
|
tambien lo puedes hacer mirando el valor de la curva de animacion en Y en el fotograma anterior y comparandolo con el valor actual, no se cual sera la instruccion en maxscript pero fijo que la tiene.
stewie, mejor que almacenar los valores en variables te recomiendo que crees un atributo nuevo en el transform del objeto y lo vayas almacenando alli, te da menos problemas. habria otros modos de hacerlo, como crear una curva de animacion nueva e ir sumando valores que creo que podria dar mejores resultados ya que una expresion dependiente de valores temporales puede engañar muchas veces. |
|
|
|
|
|
#11 |
|
Método Polaco
Fecha de Ingreso: abril-2004
Mensajes: 3,174
|
Gracias por los consejos larry
A ver si luego tengo un rato y busco algún link sobre maxscript, aunque seguro que Promineo conoce bastantes más, que yo soy mayero jeje |
|
|
|
|
|
#12 |
|
El cabreador
Fecha de Ingreso: octubre-2002
Mensajes: 4,387
|
A mi se me ha ocurrido esto, soy un inexperto en esto del maxsript pero bueno.
if a < $box02.pos.z do ($box01.pos.z =$box02.pos.z) a = $box01.pos.z Creo que no hace falta explicarlo, puesto que es simple con ganas. Es una tonteria, solo funciona como script como es logico da fallos si lo pones como expresión, sería cuestión de adaptarlo, y como no, si lo pones como wire te casca por todos los lados, ahora no tengo tiempo pero esta noche si eso le echaré un ojo a ver que se puede hacer... Saluditos.. P.D mira que es vicioso esto de los scripts eh?¿a ver si me pongo en serio con ellos. |
|
|
|
|
|
#13 |
|
reBorn
Fecha de Ingreso: diciembre-2004
Ubicación: Tenerife
Mensajes: 2,842
|
Gracias, Gracias, seguire probando cosillas a ver si doy con la solución, Fiz3d, esto se ajusta más a lo que buscaba .
Gracias otra vez. |
|
|
|
|
|
#14 |
|
H = E + L
Fecha de Ingreso: marzo-2004
Ubicación: Entre dos vectores
Mensajes: 877
|
Ya sé que han pasado casi 4 meses desde el último mensaje de este hilo pero estaba revisando mensajes referentes a MAXScript y éste me ha llamado la atención. Así que he intentado hacer algo similar a lo que se pedía.
En concreto he creado una utilidad que permite especificar dos nodos. Uno será el nodo "maestro" y el otro el "esclavo". Entonces lo que hace el script es crear un "script controller" para la posición del nodo "esclavo", de forma que si el nodo "maestro" sube, el esclavo le seguirá pasada una distancia máxima (que también se puede especificar en el cuadro de diálogo de la utilidad), mientras que si el nodo "maestro" baja, el "esclavo" no lo hará salvo que el nodo "maestro" llegue a su altura, en cuyo caso ambos nodos descenderán conjuntamente. Si os fijáis, también se crea un dummy que "envuelve" al nodo "esclavo". Esto lo he hecho así porque necesitaba una forma de recoger la posición del nodo "esclavo", pero como dentro del script del controlador no se puede hacer referencia al nodo que tiene aplicado dicho controlador, pues me he creado el dummy. Por si os estáis preguntando por qué no he "linkado" el dummy al nodo "esclavo", la razón es que en dicho caso, el "script controller" consideraría al dummy como si fuera el nodo mismo ya que dependen el uno del otro. Lo mismo ocurre si al dummy se le asigna un "Position Constraint" apuntando al nodo "esclavo". En fin, he adjuntado un video para que veáis el funcionamiento. Es bastante simple. El código también va incluído. Espero que lo encontréis, al menos, interesante. A mí me ha servido para aprender cosas nuevas. Saludos. ACTUALIZACIÓN: he actualizado una cosilla del código... Última edición por HalfVector fecha: 25 dic 2005 a las 01:13. |
|
|
|
|
|
#15 |
|
Senior Member
Fecha de Ingreso: julio-2004
Mensajes: 362
|
Bastante interesante el comportamiento...que bien se ve....muy buen trabajo..
Saludos.
__________________
""Todo lo que existe, no existe más que en dependencia de causas"" |
|
|
|
![]() |
| Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes) | |
| Herramientas | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| MAXScript | 3dpoder | 3DStudio Max | 0 | 13 ago 2005 15:28 |
| urbansimulations :: character studio - maxscript experto | lrivero | Ofertas de Empleo | 0 | 16 ago 2004 12:16 |
| fisica y rv | dreamaker | Hardware | 2 | 18 jun 2004 11:09 |
| Maxscript | rummi | Tutoriales, Libros y Manuales. | 2 | 08 jun 2002 13:38 |
| Maxscript | rummi | Infografía General | 4 | 11 may 2002 08:28 |
|
|