Resultados 1 al 68 de 68

Script en 3ds Max

  1. #1
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    3dsmax Script en max

    Bueno. Resulta que estoy haciendo un curso de scripting para max y ahora tengo que hacer un trabajo final, de lo que sea, yo lo quiero hacer relacionado con partículas, pero no se me ocurre nada,
    ¿Alguien me puede dar alguna idea? Gracias.
    Última edición por bealobo; 25-06-2006 a las 21:37
    E moet roeien met de riemen die je hebt.

  2. #2
    Fecha de ingreso
    Dec 2005
    Mensajes
    939

    Script en max

    Podrías hacer algo como el impact system de Slime.

  3. #3
    Fecha de ingreso
    Apr 2002
    Mensajes
    20,233

    Script en max

    A mí me dejó marcado un script de Slime en blur, que puedes ver en su demoreel.

    En un hilo relacionado Slime dejó un enlace donde se puede ver en acción un script simulando el de blur, donde además ayudó nuestro genial compañero:
    gunfire simulation script.

    El enlace directo es:
    http://www.alvinvfx.com/gunfirescript/gunfiresimulation.zip. Suerte guapísima.

    Edito: que raro, se me a adelantado alguien.
    Última edición por SHAZAM; 20-06-2006 a las 23:11
    Obtén enseñanza tradicional en arte y cine. Los ordenadores solo son herramientas. Ellos no pueden tomar decisiones creativas, y solo pueden crear trabajos tan buenos como tus conocimientos y tu experiencia les permita.
    Victor Navone


    Ser "animador" es un regalo que te ganas y un honor que deben adjudicarte los otros.
    Chuck Jones


    La tecnología no hace las pelí*culas, la gente las hace. No eres un animador sólo porque puedas mover un objeto del punto A al punto B. Eres alguien quien le da vida a un personaje, que es algo que el software y la tecnología no puede dar.
    John Lasseter

  4. #4
    Fecha de ingreso
    Dec 2005
    Mensajes
    939

    Script en max

    Al menos tu información es mucho más completa. Si haces alguno chulo, compártelo.

  5. #5
    Fecha de ingreso
    Jul 2005
    Mensajes
    1,768

    Script en max

    Pues en las mismas que Bea estoy yo. Cualquier idea es bien recibida.

  6. #6
    Fecha de ingreso
    Apr 2004
    Mensajes
    2,648

    Script en max

    Bueno y porque no hacen lo mismo, pero en el mar. Impac system en agua? Suerte si se me ocurre algo lo digo.

  7. #7
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,774

    Script en max

    ¿Y porque no un kisses simulation script? Es que, a mi las balas no me gustan nada de nada.
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

  8. #8
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Vaya. Kisses simulation script, imagínate nada más abrir daría un aviso con un slogan: tu script del sábado noche.

    Bueno, muchas gracias a todos, voy a mirar todo lo que me decís. Ya os comentaré que acabo haciendo.

    Y sí, intentaré hacer algo chulo y lo publico por aquí.
    E moet roeien met de riemen die je hebt.

  9. #9
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Bueno, ya he visto lo que me comentáis y yo no creo que tenga tiempo para hacer algo tan complejo. Suponiendo que lo supiese hacer, claro.

    Pero ya da ideas. Gracias.
    E moet roeien met de riemen die je hebt.

  10. #10
    Fecha de ingreso
    Apr 2004
    Mensajes
    2,648

    Script en max

    Vaya y un script de simulación de rayas en el suelo, es decir, los frenazos o acelerones de un coche, pues eso, que se pueda con un script meter un archivo (*.jpg) y con dicho script poder alargar, ensanchar, acortar, etc la marca, no se sigo pensando.

  11. #11
    Fecha de ingreso
    Jul 2005
    Mensajes
    146

    Script en max

    Hola Bealobo: que bueno mira, te recomiendo que te pases por esta web que hay muchos script, con el cual su autor dice que los podemos usar totalmente y que si acaso alguien crea un script con otro efecto basándose de los script de el, que no hay problema, antes que se lo envien, a mi me gustaría aprender un poco más de Maxscript, con eso así poder integrar alguno de estos script con Particle Flow en un operator y hacer algo chebre ok saludos ojalá te sirva. http://www.pxfactory.eu/pf.php?Cpage=scripts.

  12. #12
    Fecha de ingreso
    Jul 2005
    Mensajes
    762

    Script en max

    Seria bueno un script para girar el viewport como el ZBrush.

  13. #13
    Fecha de ingreso
    Jul 2005
    Mensajes
    1,768

    Script en max

    Oye, pues la idea del maestro Yeday de pegar tiros en el agua puede estar entretenida.

  14. #14
    Fecha de ingreso
    Mar 2003
    Mensajes
    3,104

    Script en max

    Yo haría un script para romper objetos de forma realista. De forma fractal se podrían generar pedazos simulando roca, cristal, plástico, etc. Puedes empezar por algo más sencillo y luego ir complicándolo cada vez más. Podría también romperse el objeto con un bitmap. El blanco simularia, por ejemplo, las grietas y el negro los pedazos resultantes. Esto sería muy útil y seguramente que se usaría en muchas producciones.
    Minor Bun engine made Benny Lava!

  15. #15
    Fecha de ingreso
    Jul 2005
    Mensajes
    146

    Script en max

    Podría también romperse el objeto con un bitmap. El blanco simularia, por ejemplo, las grietas y el negro los pedazos resultantes. Esto sería muy útil y seguramente que se usaría en muchas producciones.
    Vaya sería lo máximo como al estilo de Blast code megaton para Maya e probado el plugin y es muy bueno con eso, pero si en 3dsmax se pudiera uf seria super bueno, ojalá que si logras desarrollar lo compartas.

  16. #16
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Bueno, el problema que tengo con 3ds Max es que mi conocimiento general del programa es bastante limitado (sobre todo el área de modelado). Lo que conozco mejor es el Particle Flow.

    Pero bueno, yo me apaño muy rápido, así que, miraré a ver qué hago y cómo. Muchas gracias a todos de nuevo.
    E moet roeien met de riemen die je hebt.

  17. #17
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Jai. ¿Se puede acceder a la posición de las partículas de Particle Flow a través del scripting general? Es que por más que miro la ayuda no lo veo claro. Gracias.
    E moet roeien met de riemen die je hebt.

  18. #18
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Jai. ¿Se puede acceder a la posición de las partículas de Particle Flow a través del scripting general? Es que por más que miro la ayuda no lo veo claro.
    Hi.

    Creo que sí puedes. Mírate la interfaz particleobjectext.

    Aquí tienes un ejemplo que accede a la posición, rotación, escalado y tamaño de cada partícula.
    Código:
    pf = $PFSource 01.
    
    For I = 1 todo pf, numparticles() do (tpf, particleindex = i tformat particle #%\nI tformat particle position = %\nVaya, particleposition tformat particle rotation = %\nVaya, particletm.rotationpart tformat particle scale = %\nVaya, particlescalexyz tformat particle size = %\n\nVaya, particlescale.
    )
    Si no me equivocó es similar a la forma que se utiliza en los scripts internos de Particle Flow. A ver si es lo que buscas. Saludos.

  19. #19
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Gracias, que rapidez. Voy a hacer unas pruebas a ver.
    E moet roeien met de riemen die je hebt.

  20. #20
    Fecha de ingreso
    Mar 2003
    Mensajes
    3,104

    Script en max

    Ánimo, Bea.
    Minor Bun engine made Benny Lava!

  21. #21
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,774

    Script en max

    Y al final que estás haciendo? Se me ha ocurrido hacer, por ejemplo, a partir de geometría crear efectos. Con una esfera el kame-kame. Te creas una UI que controle de forma automática parámetros del sistema, y tal, yo que sé.

    Por cierto, me imagino que ya lo, pero bobo tienes algunos tutoriales de Particle Flow y Maxscript. http://www.scriptspot.com/bobo/. Suerte.
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

  22. #22
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Gracias por la sugerencia. Creo que haré un script parecido al de Slime, pero más básico y que se complemente. Habrá que crear una pistola y elegir el tipo (dardos, balas), animarla (intentaré que sea con un target). Decir que objetos son orgánicos y los impactos causaran un sangrado.

    Qué se yo, todo muy cutre y muy lento seguramente, pero es que, estoy aprendiendo poco a poco.
    E moet roeien met de riemen die je hebt.

  23. #23
    Fecha de ingreso
    Dec 2005
    Mensajes
    939

    Script en max

    Qué bien suena eso. Ánimo.

  24. #24
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    3dsmax Script en max

    Bueno, la cosa va yendo, de momento tengo semiacabada la UI. Sólo he puesto las opciones más básicas y si me da tiempo pondré alguna cosa más, os dejo una captura, en el trozo vacío quiero poner las instrucciones para usarlo, aunque aún no sé cómo se hace.

    Y bueno, el diseño es provisional, simplemente necesito algo para empezar a meter funciones y hacer que funcione.

    Me he dado cuenta de que todos los objetos van a ser internamente deflectores por si la sangre cae en alguno de ellos. Y estoy pensando que eso va a ser lento lento lento ¿no?

    -- IMÁGENES ADJUNTAS --
    Miniaturas adjuntas Miniaturas adjuntas Clic en la imagen para ver su versión completa. 

Nombre: ui_02.jpg 
Visitas: 169 
Tamaño: 43.1 KB 
ID: 32870  
    E moet roeien met de riemen die je hebt.

  25. #25
    Fecha de ingreso
    Dec 2004
    Mensajes
    866

    Script en max

    Tengo ganas de ver esos avances, lo que preguntas si utilizas todos los objetos como deflectores sí que va a ser lento, me acuerdo cuando vi la demoreel de Slime que me planteé esa misma pregunta, para personajes animados, creo que sería más rápido linkarles deflectores esféricos a las distintas partes del cuerpo que hacer que todo el cuerpo sea un deflector, ya que, calcular colisiones de partículas contra una malla que se deforma debe de costar lo suyo, pero vamos Slime te dirá que es el experto. Suerte con el script.
    _________________________________________________
    Reloj de pulsera /\ Marine Starcraft 2 WIP /\ Motorola L6 /\ Canon Ixus II /\ La vigilante /\ Dragon WIP ________________________________________________

  26. #26
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Es una movida sí, yo voy a seguir pensando a ver mientras voy haciendo más código.
    E moet roeien met de riemen die je hebt.

  27. #27
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Ante todo decir que sobre estos temas ando escaso. So kep that in mind. ¿Todos los tests de colisión los vas a llevar a cabo a través de Particle Flow o, por ejemplo, la colisión proyectil/objeto la realizaras utilizando alguna función tipo intersectray/intersectrayex/raymeshgridintersectí.

    Lo digo porque en ese último caso, las intersecciones proyectil/objeto se precalcularían, con lo cual te ahorrarías que Particle Flow averiguara la intersección en cada frame.

    Es decir, al pulsar el botón go, calcularías el punto de colisión de cada proyectil (dependiendo de la cadencia de disparo) y entonces crearías un PFSource en la posición de colisión, con una dirección igual a la normal de la superficie en el punto de colisión (esos datos te lo devuelven las funciones intersectray/intersectrayex/raymeshgridintersect). Ese PFSource sería el emisor de sangre.

    De hecho, con ese método creo que podrías hacer algo similar a lo que hace Slime en el impact system (aunque esto que lo confirme el que es el que lo programó), es decir, podrías utilizar esa misma posición y normal de colisión para meter un space Warp de tipo displace y así simular las hendiduras provocadas por los impactos del proyectil. Incluso tal y como hace él, meter teselación en las caras adyacentes al punto de colisión.

    Por otro lado, las colisiones sangre/objeto me imagino que sí se controlarían utilizando un test de colisión y deflectores en pf. En este caso, si hay muchos polígonos, me imagino que la simulación sí será lenta (ignoro cómo funciona Particle Flow y las optimizaciones internas que llevara a cabo).

    Pero hay que tener en cuenta que en una producción cinematográfica (y hablo desde la ignorancia en este caso) se maneja un entorno controlado por lo que se sabe que objetos tienen que formar parte de la simulación y cuáles no (al contrario que en un videojuego donde las posibilidades de interacción son casi infinitas). Eso quiere decir que no todos los objetos tienen por qué ser deflectores. Sólo aquellos que estén en el radio de acción de cada salpicadura de sangre. O sea, que en ese caso me imagino que es cosa del operador el marcar los objetos que formarían parte de la simulación. O incluso se podría automatizar utilizando algún tipo de heurística. Por ejemplo, sólo añadir como deflectores aquellos objetos que estén dentro de un cierto radio de acción (que dependerá de cosas como el tiempo de vida del sistema de partículas, la velocidad de las partículas, las fuerzas que le afecten, etc).

    Pero bueno, no tengo demasiados conocimientos en estos temas así que, invocamos a Slime. Saludos.
    Última edición por HalfVector; 27-06-2006 a las 15:41

  28. #28
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Cuanta cosa, que bien, la verdad es que en un principio lo quise hacer así, es decir colocando un emisor en cada impacto y estuve buscando y no encontré la manera (la ayuda de Maxscript es un infierno), lo quería hacer así porque el chorro de sangre no dependía del impacto de 1 bala y podía hacer más virguerías de manera más simple como simular el tamaño del agujero de la bala con el tamaño del emisor (el nodo collision y el colisión Spawn se me quedaban un poco cortos).

    Ahora que se el nombre de las funciones lo voy a volver a investigar. Bien.

    Y respecto a los deflectores, tal vez sea mejor que ponga un control para seleccionar los objetos sobre los que cae la sangre por aquello de que optimice quien quiera. A ver lo que puedo hacer. Muchas gracias a todos.
    E moet roeien met de riemen die je hebt.

  29. #29
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    La verdad es que en un principio lo quise hacer así, es decir colocando un emisor en cada impacto y estuve buscando y no encontré la manera (la ayuda de Maxscript es un infierno).
    Aunque en la ayuda encontraras más información y más completa, ahí van las posibilidades que tienes utilizando las funciones que he mencionado.
    intersectray.

    Te devuelve el punto de colisión y la normal en dicho punto. Funciona con cualquier tipo de geometría.
    intersectrayex.

    Te devuelve el punto de colisión, la normal en dicho punto, el índice del triángulo en el que se produjo la colisión y las coordenadas baricéntricas. Sólo funciona con editable Mesh.
    raymeshgridintersect.

    Seguramente es la mejor opción de todas, pero por alguna razón no tiene el comportamiento que yo esperaba de ella. Por ejemplo, yo pensaba que si añadías una serie de objetos con los que llevar a cabo el test de colisión, te devolvería el punto de colisión más cercano a la posición desde la que se lanzó el rayo, pero al parecer sólo devuelve la colisión con el primer objeto que se añadió a la lista de nodos. Realmente es un comportamiento muy extraño.

    Así que, teniendo en cuenta el problema aparente de raymeshgridintersect, la mejor opción sería intersectray si no necesitas saber el triángulo en el que se produjo la colisión o intersectrayex si necesitas saberlo (por ejemplo, para la teselación).

    Aquí te pongo un pequeño script que hice hace un tiempo que hace uso de intersectrayex:
    Código:
    Fn closestrayintersection r = (t- Inicializamos variables tlocal closestdist = 999999999 tlocal closestnode = undefined tlocal closestinfo = undefined t- Recorremos todos los objetos geométricos de la escena tfor n in $geometry do (t - Puesto que intersectrayex sólo funciona con editable meshes - Añadimos un modificador edit_mesh add modifier n (edit_mesh()) t - Calculamos la intersección local i = intersectrayex n r t - Eliminamos el modificador deletemodifier n 1 t - Si hubo colisión if i.= undefined do (t - Calculamos la distancia desde el origen del rayo - Al punto donde se produjo la colisión local Dist = distance r, pues i[1].pos t - Si dicha distancia es menor que la anterior - Distancia más cercana almacenada if Dist < closestdist do (t - Almacenamos la nueva distancia closestdist = Dist - El objeto donde se produjo la colisión closestnode = n - La información de la colisión closestinfo = i ) ) t) t- Si <closestnode> es distinto de undefined quiere decir que hubo t- Colisión, por lo que devolvemos la información de colisión tif closestnode.= undefined do - Devolvemos:
    - La distancia al punto de intersección - El nodo donde se produjo la intersección - La información de intersección de la función intersectrayex return #(closestdist, closestnode, closestinfo) t- Después de todo no hubo colisión treturn undefined).
    
    Probamos la función.
    
    Limpiamos el Listener.
    
    Clearlistener().
    
    Calculamos la posible intersección.
    
    I = closestrayintersection ($tape01 as ray).
    
    Si hubo intersección.
    
    If i.= undefined do (t- Eliminamos el anterior objeto point que pudiera existir ttry(deleete $point01) catch() t- Creamos un objeto point en el punto de colisión tpoint pos:i[3][1], pues wirecolor:red.
    )
    Para que funcione, tienes que crear una serie de objetos y un tape que es el que hace de apuntador (el rayo). Si se detecta colisión, se crea un nodo de tipo point en el punto de intersección. Saludos.

  30. #30
    Fecha de ingreso
    Dec 2005
    Mensajes
    939

    Script en max

    También podrías hacer que las partículas dejaran mancha en los objetos mediante una textura. Quedaría mucho más realista.

  31. #31
    Fecha de ingreso
    Jul 2005
    Mensajes
    146

    Script en max

    Hola que interesante Halfvector, yo estoy probando un método como el de smile de bullet impact system, pero con Particle Flow, ya por lo menos conseguí un método con script operator como deformar la malla para los impactos, lo de la sangre también se puede con un Particle Flow con Spawn test.

    Bueno: yo sé que lo que se quiere aquí es crear un script o más bien una herramienta como la de smile, pero eso requiere de mucho conocimiento de la materia, pero ánimo yo por mi parte segiere probando con Particle Flow, hasta que quede algo decente, ok saludos.

    Posdata: hola smile, te quería comentar que yo quede muy interesado con la creación de la herramienta que mencionaste de romper objetos por medio de un bitmap, ya por lo menos tengo dos script uno que es el típico script que rompe en pedazos los objetos polys y otro que crea desplazamientso por medio de un bitmap blanco y oscuro, solo quería saber dónde puedo encontrar más ayuda pues ya e postedado en otro sitios y no, y ya me estoy leyendo la ayuda de Maxscript que es bastante, ok saludos de nuevo.

  32. #32
    Fecha de ingreso
    Mar 2003
    Mensajes
    3,104

    Script en max

    []. Pero bueno, no tengo demasiados conocimientos en estos temas.
    Pues menos mal, porque lo has dicho prácticamente todo. Lo único que hay que tener en cuenta es cuando se tienen varios objetos en la escena que están en la trayectoria del arma. Yo hice un loop pasando por todos los objetos, detectando intersección con un rayo y midiendo las distancias. El objeto que intersecte cuya distancia es la mínima es el que hay que cargarse.
    Y respecto a los deflectores, tal vez sea mejor que ponga un control para seleccionar los objetos sobre los que cae la sangre por aquello de que optimice quien quiera. A ver lo que puedo hacer.
    Mucho mejor porque si no va a ser super lento. En cualquier caso, los deflectores de 3ds Max son malísimos y muchas opciones no están soportadas con Maxscript.

    Algo interesante para ir montando el sistema es empezar, por ejemplo, detectando cuando hay colisión del rayo, puedes pintar el objeto dependiendo de si existe o no. Luego ir más, allá generando algo en el punto de impacto y luego ya hacerlo con múltiples objetos. Suerte y ánimo. Sigue ensenando progresos.
    Posdata: hola smile, te quería comentar que yo quede muy interesado con la creación de la herramienta que mencionaste de romper objetos por medio de un bitmap.
    Hola andros. No he mirado nada sobre eso, pero pensándolo bien, no sé si sería posible hacerlo de manera sencilla con Maxscript, sería más interesante compilar una herramienta usando el SDK.
    Minor Bun engine made Benny Lava!

  33. #33
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Yo hice un loop pasando por todos los objetos, detectando intersección con un rayo y midiendo las distancias. El objeto que intersecte cuya distancia es la mínima es el que hay que cargarse.
    Exacto. Es justamente la función que he puesto en mí anterior mensaje. Recorre todos los objetos de la escena (en este caso sería solo objetos que seleccionara el usuario) y detecta la colisión con el más cercano.

    Pero hay algo que me llama la atención en el sistema que creaste y es que la teselación es bastante limpia. Pero esto sólo he podido ver en polymeshes y no en trimeshes:


    Y teniendo en cuenta que intersectrayex te devuelve el índice del triángulo (y no del polígono, ya que funciona sólo con edit_mesh) en el que se produce la intersección, es de suponer que la teselación hay que llevarla a cabo sobre un edit_mesh y no un edit_poly. En ese caso sólo se me ocurre crear una función propia para detectar la colisión con polígonos en vez de triángulos. O eso o es que se me escapa algo.

    Aunque ahora que lo veo con más calma, parece más un MeshSmooth. ¿es posible?:


    En fin, espero que no le importe a Bea que me haya ido un poco por las ramas, aunque lo cierto es que esto le puede venir bien para potenciar aún más su sistema. Gracias.

    -- IMÁGENES ADJUNTAS --

    Miniaturas adjuntas Miniaturas adjuntas Clic en la imagen para ver su versión completa. 

Nombre: tessellation.jpg 
Visitas: 260 
Tamaño: 25.6 KB 
ID: 32914   Clic en la imagen para ver su versión completa. 

Nombre: meshsmooth.jpg 
Visitas: 273 
Tamaño: 31.8 KB 
ID: 32917  

  34. #34
    Fecha de ingreso
    Mar 2003
    Mensajes
    3,104

    Script en max

    El tema de la subdivisión fue el más complicado porque el max se colgaba al seleccionar zonas de geometría en cadena (¿) y hubo que encontrar un hack para que la cosa funcionase. Ahora no me acuerdo de cómo lo hice, pero casi estoy seguro que hacia varias pasadas para recoger información, porque después de subdividir el cálculo de colisiones y el trazado de rayos podía ser muy lento.

    Creo que era algo así:
    A) detección de puntos de colisión en todo el rango, generación de sistemas de partículas y parámetros.

    B) subdivisión y atacheo de deformadores en geometría.

    El código no me lo lleve de blur. A ver si me hago una copia para el recuerdo.
    Minor Bun engine made Benny Lava!

  35. #35
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Ahora no me acuerdo de cómo lo hice, pero casi estoy seguro que hacia varias pasadas para recoger información, porque después de subdividir el cálculo de colisiones y el trazado de rayos podía ser muy lento.
    Pues sí, tienes razón, teselar antes de calcular los puntos de intersección haría que todo fuera más lento. Así que efectivamente lo mejor es hacer el proceso en varias pasadas.

    Incluso se me ocurre que una de las pasadas (después de haber creado las partículas) podría consistir en calcular los objetos que hay dentro del radio de acción de las salpicaduras de sangre. Sería cuestión de calcular el bbox del sistema en el punto de máximo alcance de las partículas y entonces llevar a cabo una comprobación bbox vs bbox con los objetos de la escena. De esta forma la elección de los deflectores sería automática. No sé, habría que pensar mejor eso. Saludos.
    Última edición por HalfVector; 28-06-2006 a las 01:29

  36. #36
    Fecha de ingreso
    Dec 2004
    Mensajes
    866

    Script en max

    Este mensaje para adheridos ya que se está poniendo la mar de interesante, vosotros seguid disertando que yo escucho atentamente.
    _________________________________________________
    Reloj de pulsera /\ Marine Starcraft 2 WIP /\ Motorola L6 /\ Canon Ixus II /\ La vigilante /\ Dragon WIP ________________________________________________

  37. #37
    Fecha de ingreso
    Mar 2003
    Mensajes
    3,104

    Script en max

    Sería cuestión de calcular el bbox del sistema en el punto de máximo alcance de las partículas y entonces llevar a cabo una comprobación bbox vs bbox con los objetos de la escena. De esta forma la elección de los deflectores sería automática. No sé, habría que pensar mejor eso.
    Muy buena idea, lo único que se necesitaría ahora es la posibilidad de asignar geometría a deflectores con Maxscript. En la versión 7 no se podía. Si cargas el código de los deflectores, es del año de la pera.
    Minor Bun engine made Benny Lava!

  38. #38
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Muy buena idea. Lo único que se necesitaría ahora es la posibilidad de asignar geometría a deflectores con Maxscript. En la versión 7 no se podía. Si cargas el código de los deflectores, es del año de la pera.
    Sí, me acuerdo que una vez me mencionaste ese problema cuando discutiamos sobre los puntos flacos de Maxscript. Pues va a ser que con 3ds Max 8 sigue sin poderse.

    saludos.

    -- IMÁGENES ADJUNTAS --
    Miniaturas adjuntas Miniaturas adjuntas Clic en la imagen para ver su versión completa. 

Nombre: deflector.jpg 
Visitas: 422 
Tamaño: 7.6 KB 
ID: 32928  
    Última edición por HalfVector; 28-06-2006 a las 02:24

  39. #39
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Bueno, pues como decía Slime y confirma la referencia de Maxscript, no se puede asociar un objeto a un deflector a través de Maxscript.

    Evidentemente esto es del todo inaceptable y me imagino que, por ejemplo, Bea lo necesitara si decide meter deflectores para que la sangre colisione con los objetos.

    Así que sólo se me ha ocurrido una solución para este problema, y es programar unas extensiones para Maxscript a través de C++, utilizando el SDK.

    Pues nada, dicho y hecho. He creado un gup (global utility plug-in) que implementa dos métodos. Uno para recoger el objeto asociado a un udeflector y otro para asociar un objeto al udeflector.

    Pongo un ejemplo.

    Si tenemos un udeflector llamado udeflector01 y una esfera llamada sphere01 y queremos que la esfera esté asociada al deflector, lo que tenemos que hacer es escribir:
    Código:
    udeflectorhelper, setnode $udeflector01 $sphere01
    Este método devuelve true si el objeto se asignó correctamente. De lo contrario devolverá false.

    Por otra parte, si lo que queremos es recoger el objeto asociado al deflector udeflector01, escribimos:
    Código:
    udeflectorhelper, getnode $udeflector01
    Este método devuelve un nodo que apunta al objeto asociado con el deflector. Si el deflector no tiene ningún objeto asociado, devuelve undefined.

    Para instalar el plugin no hay más que copiar el archivo udeflectorhelper, gup al directorio de plugins de 3ds Max. descargar udeflectorhelper.

    El plugin lo he compilado para 3dsMax 8 pero me imagino que si hiciera falta podría compilarlo para max 7. Saludos.

    -- IMÁGENES ADJUNTAS --
    Archivos adjuntados Archivos adjuntados
    Última edición por HalfVector; 28-06-2006 a las 14:21

  40. #40
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Bueno, yo iré poco a poco y por partes, porque, aunque se algo de programación acabo de empezar con el script de 3ds Max. De momento lo de la geometría me parece complicado. Así que lo primero que haré será lo de los rayos, los impactos y el sangrado. Veremos cómo me va.

    Os lo estáis trabajando un montón, me ayudan mucho estas conversaciones. Gracias.
    E moet roeien met de riemen die je hebt.

  41. #41
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    De momento lo de la geometría me parece complicado. Así que lo primero que haré será lo de los rayos, los impactos y el sangrado. Veremos cómo me va.
    Si, lo mejor en estos casos es ir muy poco a poco. Incluso si es necesario, crear pequeños tests al margen de la aplicación principal. De esta forma te será más fácil aislar los problemas que te puedas encontrar. Sobre todo, teniendo en cuenta que la depuración es uno de los puntos flacos de Maxscript (a pesar de que pusieron un debugger con la versión . Saludos.
    Última edición por HalfVector; 28-06-2006 a las 13:51

  42. #42
    Fecha de ingreso
    Mar 2003
    Mensajes
    3,104

    Script en max

    Fantástico, Halfvector. Ese plugin me habría ayudado un montón, una pena que ya no trabaje con max.
    Minor Bun engine made Benny Lava!

  43. #43
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Fantástico, Halfvector. Ese plugin me habría ayudado un montón, una pena que ya no trabaje con max.
    La verdad es que este hilo me está viniendo bastante bien para profundizar un poco más con el SDK, que hacía bastante tiempo que lo tenía abandonado.

    Y pasando a otra cosa, estaba yo tirando unas líneas para la serie de tutoriales de Maxscript cuya primera parte espero que no se retrase demasiado, () y de pronto me he planteado una cuestión.

    En uno de los mensajes dije que la dirección que debían tener los emisores de partículas era la normal de la superficie en el punto de intersección. Pero de pronto he caído que seguramente no es la mejor dirección.

    Así que he montado una prueba con Maxscript que orienta unas flechas en ciertas direcciones de interés:


    Por una lado tenemos el incident Vector (i) que es el Vector director del proyectil y luego tenemos el normal Vector (n) (la normal de la superficie en el punto de intersección, datos que nos devuelve la función intersectionrayex). Pero cómo se puede ver, parece que el Vector normal no es el más indicado para emitir las partículas.

    Así que luego he pensado que tal vez el mejor Vector sería el reflection Vector (r) que es el Vector incident reflejado sobre la normal:
    Código:
    r = i - 2 * n * (Dot n i)
    Pero aun así no me convencía, me parecía una dirección demasiado forzada. Así que finalmente he pensado que tal vez, la mejor dirección de emisión sería un Vector a medio camino entre la normal y el Vector reflexión, al cual he denominado half-way Vector (h):
    Código:
    h = n + r
    Eso, sumado a un cono de emisión con una cierta apertura, podría quedar bien. Las partículas serían emitidas en direcciones comprendidas entre el Vector normal y el Vector reflexión.
    ¿Qué opináis? Saludos.

    -- IMÁGENES ADJUNTAS --
    Miniaturas adjuntas Miniaturas adjuntas Clic en la imagen para ver su versión completa. 

Nombre: vectors.jpg 
Visitas: 222 
Tamaño: 27.3 KB 
ID: 33007  
    Última edición por HalfVector; 29-06-2006 a las 13:12

  44. #44
    Fecha de ingreso
    Jul 2005
    Mensajes
    1,768

    Script en max

    Si el desprendimiento de partículas se corresponde a una reacción producida por un impacto, la mayoría de partículas deberían desplazarse en torno a la misma dirección del impacto y en sentido opuesto (por algo el principio de acción-reacción, no), quizá con algunas partículas díscolas que vayan en alguno de los vectores que indicas. Pero el grueso debería ir en la misma dirección que el impacto, pero en sentido contrario.
    ¿No?
    Última edición por Chaman; 29-06-2006 a las 13:16

  45. #45
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    La verdad es que me imagino que esto variara en función de la composición de la superficie. Porque, por ejemplo, si disparamos a una superficie de tierra en una dirección similar a la que muestro en la imagen, es posible que gran parte de los trozos desprendidos vayan en una dirección similar al Vector reflexión.

    También hay que tener en cuenta que conforme el Vector incidente sea más perpendicular a la superficie, más coincidirá con el Vector reflexión, por lo que más se cumplirá el principio de acción-reacción. Saludos.

  46. #46
    Fecha de ingreso
    Apr 2002
    Mensajes
    10,774

    Script en max

    Vaya, half eres un maldito gúru, te odio.
    Aqui quiero poner una imagen bonita de mi pagina, pero no puedo...ojete.

  47. #47
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Cuando vi esto ayer lo leí rápido y pensé, lo habré leído mal, que cutrerío, menos mal que te lo curras de lo bonito y haz hecho el plugin este half, porque si es por el Maxscript, la verdad es que eso me va a ayudar muchísimo. Supongo que no le importara al profesor. Mil gracias.

    Sobre lo de la dirección de salida de las partículas, el halfway Vector parece chulo, pero, lo que va a salir del impacto es un borbotón de sangre que deslizara por la superficie rápidamente o en caso de estar en el aire, rápidamente caerá por efecto de la gravedad, toreo más que película gore. Me parece que quedará más realista. Por lo que realmente la dirección no importa tanto, creo yo.
    ¿Qué opináis?
    Yo lo veo desde mi punto de vista, claro. Tengo que hacer el script y me voy a fijar primero en lo básico y principal y luego añadir chuladas de este tipo, si me da tiempo. O quizás las intente añadir después de la entrega si no me da tiempo.

    Tengo un lío en el trabajo difícil de imaginar, y con todo lo que se bien aquí y lo que estoy mirando, tengo unas ganas de pillar el script gracias a todos.
    E moet roeien met de riemen die je hebt.

  48. #48
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    La verdad es que eso me va a ayudar muchísimo. Supongo que no le importara al profesor. Mil gracias.
    No creo. Eso es sólo una muy parte de lo que tienes pensado hacer. Además, si Maxscript tiene estas lagunas, no es culpa de uno.
    Sobre lo de la dirección de salida de las partículas, el halfway Vector parece chulo, pero, lo que va a salir del impacto es un borbotón de sangre que deslizara por la superficie rápidamente o en caso de estar en el aire, rápidamente caerá por efecto de la gravedad, toreo más que película gore. Me parece que quedará más realista. Por lo que realmente la dirección no importa tanto, creo yo.
    ¿Qué opináisí.
    Es cierto que en el caso de la sangre podría estar bien el Vector normal, aunque bien es cierto que podrían saltar despojos de carne, pero tampoco es plan de tirarse al gore.

    Esto más que nada ha sido en plan quisquilloso y además, yo creo que en una secuencia de acción rápida poco se notarían estas cosas. Saludos.

    Posdata: incluso en el caso de la sangre, el Vector de emisión podría ser el Vector incidente, invertido, tal y como ha dicho Chamanman.
    Última edición por HalfVector; 29-06-2006 a las 17:08

  49. #49
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Bueno, que sepáis que sigo con esto, lo estoy flipando. Cuanto más lo intento y lo pienso y lo remiro, para que tenga algo de flexibilidad acabara siendo más parecido al de Slime de lo que me gustaría. Pero es que el presets que tenía pensado es muy molón, pero al final no sirve nada más que para 3 escenas.

    A ver si puedo poner algún avance próximamente, que lo que se está viviendo en el editor de scripts hoy por hoy es una batalla campal.
    E moet roeien met de riemen die je hebt.

  50. #50
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Cuanto más lo intento y lo pienso y lo remiro, para que tenga algo de flexibilidad acabara siendo más parecido al de Slime de lo que me gustaría.
    Es que el proyecto se prestaba a ello.
    A ver si puedo poner algún avance próximamente, que lo que se está viviendo en el editor de scripts hoy por hoy es una batalla campal.
    Hablando del editor de scripts de 3ds Max, mira que es malo. Lo más grave de todo es que sólo tiene un nivel de undo. Y el editor de uis también deja bastante que desear. A ver si mejoran todo eso y también hacen más potente el debugger. Yo la verdad es que, si el script tiene muchas líneas de código, acabo programando en el ultraedit. Además, le metí coloreado de sintaxis que siempre resulta más cómodo.

    Ale, ánimo.

  51. #51
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Hola. Tengo una duda muy concreta, no encuentro nada al respecto y mi profesor pasa de mi cara, a ver si alguien me puede decir, tengo esto en algún lugar de la interfaz:
    Items: (for h in helpers collect h, name).

    Pero yo lo que quiero en realidad es que pille todos los tapes, no cualquier tipo de helper, y me invento cosas, pero no se las cree. Gracias.
    E moet roeien met de riemen die je hebt.

  52. #52
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Hola. Esto debería bastar:
    Código:
    for h in helpers where (classof h) == tape collect h, name
    Antes de representar el nombre del helper en la colección, se asegura que sea del tipo tape. Saludos.
    Última edición por HalfVector; 08-07-2006 a las 16:50

  53. #53
    Fecha de ingreso
    Oct 2002
    Mensajes
    8,617

    Script en max

    Sé que está mal invadir mensaje ajenos, espero que me perdonéis, y esto le puede valer a más gente, explico rápidamente, mis conocimiento de Maxscript son limitados, por otra parte los que tengo sobre max no lo son tanto, el problema es que tengo que elimimar dos layer y su contenido, no solo a un archivo, a un montón de ellos y además añadir muevos objetos a todas las escenas, para ello he creado un script donde seleccione el contenido de una carpeta con archivos max y después seleccione un archivo max que contiene objetos a hacer mergeen todos los archivos de la carpeta anteriormente citada esto funciona correctamente.

    Mi problema está en que tengo que eliminar todos los objetos contenidos en dos layers, y no he encontrado forma de seleccionar las capas, sí el contenido de estas y una vez seleccionado eliminarlo, lo malo es que para que eso funcione la capa tiene que estar activa y una vez más no encuentro la forma de hacer eso a través de Maxscript.

    Resumiendo, seleccionar un layer, marcarlo como activo y después borrar su contenido, que se borre o no el layer da igual ya que se mergeara de nuevo, el contenido es un bípedo con algún hueso de sobra, no es idéntico en todo los archivos, sé que podría seleccionar el bip y toda su jerarquía, pero me sería más seguro eliminar el contenido de la capa. Saludos y si puedes echar una mano te lo agradecería, ya sabes mi hermana aún esta de buen ver y mi novia no sé, es jovencilla y eso.

  54. #54
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Mi problema está en que tengo que eliminar todos los objetos contenidos en dos layers, y no he encontrado forma de seleccionar las capas, sí el contenido de estas y una vez seleccionado eliminarlo, lo malo es que para que eso funcione la capa tiene que estar activa y una vez más no encuentro la forma de hacer eso a través de Maxscript.
    Prueba con esto, debería funcionar.
    Código:
    Fn deletenodesinlayer layername = (tlocal layer = layermanager, getlayerfromname layername tif layer.= undefined do (t local nodeslist = undefined local success = layer, nodes &nodeslist if success do (t deleete nodeslist return true ) t) treturn false.
    )
    Modo de uso:
    Código:
    resultado = deletenodesinlayer mi_capa
    A la función le tienes que pasar el nombre de la capa que quieres vaciar. Y luego, cuando sale de la función, si resultado vale true es que los nodos de la capa se eliminaron correctamente. De lo contrario devolverá false (porque tal vez se haya puesto mal el nombre de la capa).
    Saludos y si puedes echar una mano te lo agradecería, ya sabes mi hermana aún esta de buen ver y mi novia no sé, es jovencilla y eso.
    Saludos.

    Posdata: he editado el código, que había un pequeño fallo.
    Última edición por HalfVector; 08-07-2006 a las 22:32

  55. #55
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Te vamos a hacer un monumento half. Gracias.
    E moet roeien met de riemen die je hebt.

  56. #56
    Fecha de ingreso
    Oct 2002
    Mensajes
    8,617

    Script en max

    Uno solo, que dices, en cada cuidad de España una calle con su nombre y una estatua para el. El script funciona de pu, genial, eres un crack, ese tutorial de max script que bien vendría.

    Venga tío saludos y gracias.

  57. #57
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    De nada, me alegro que os funcione lo que he puesto a los dos. En cuanto a los tutoriales, pues nada, espero que no se retrasen demasiado, pero es que, para ir terminándolos tengo que coger una buena racha de motivación. Saludos.

  58. #58
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Hola, tengo otra duda, la verdad es que entre que la ayuda es más mala que yo qué sé y que soy una torpe, a ver:
    multilistbox bledingobj bleding objects: items for g in geometry collect g, name)
    On bledingobj selectionend do.
    (
    Bledinglist = bledingobj, selection.

    Print bledinglist.
    )
    Esto me da una lista con los índices del array que están seleccionados, pero lo que yo necesito son los string. Necesito pillar los nombres de los objetos seleccionados, he probado mil cosas, pero nada y no encuentro una función equivalente a.selection que en lugar de coger enteros coja string. Gracias.
    E moet roeien met de riemen die je hebt.

  59. #59
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Ok. La he liado bastante gorda, pero ya lo he solucionado. Gracias de todas formas.
    E moet roeien met de riemen die je hebt.

  60. #60
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    La cosa sería así:
    Código:
    for sel in bledingobj, selection do (tformat item #% = \%\\nSel bledingobj, items[sel].
    )
    Como ves, la propiedad Items es un array que contiene el nombre de todos los elementos de la lista. Saludos.

    Posdata: bueno, ya lo has solucionado. En cualquier caso, por si le sirve a alguien.
    Última edición por HalfVector; 09-07-2006 a las 18:19

  61. #61
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Yo lo estaba haciendo mucho más complicado. Basándome en esto: Bledingobjs = bledingobj, items. Bledinglist = (bledingobj, selection as array).

    Indexbled = bledinglist[1].

    Print bledingobjs[indexbled].

    Y ahora me disponía a sustituir las dos últimas líneas por expresiones para recorrer las listas auténticas.

    Lo que es saber.

    Me postro ante tí de nuevo Halfvector, no me queda otra.
    E moet roeien met de riemen die je hebt.

  62. #62
    Fecha de ingreso
    Oct 2002
    Mensajes
    8,617

    Script en max

    A mí siempre me pasa, hago una tontería, 10 líneas de código, viene un programador del Studio yy hace lo mismo con una sola línea y en menos de 30 se, g, vamos sin sentarse. Saludos.

  63. #63
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Hola de nuevo. Bueno, el curso ya terminó con mi script a mitad (no me extraña, para un primer script me he metido en una buena).

    Estoy muy liada con mil cosas, pero lo voy a terminar. No se cuando, pero bueno.

    He estado pensando un poco y una de las cosas nuevas que no había pensado es que el sistema de partículas debe estar enlazado al objeto que sangra, por el tema de que se pueda mover. Imagino que tendré que enlazarlo al polígono más cercano, manteniendo la normal como dirección de sangrado.

    Los hachas del Maxscript, ¿se podría conseguir o hay alguna limitación del lenguaje?
    Otro de los problemas más gordos que tengo ahora mismo es que no sé cómo hacer para leer un input escrito por el usuario (¿eso se llama parsing?) y sobre todo hacer control de errores.

    Cualquier tutorial o referencia me vendría bien, yo voy a ir mirando código de aquí y, allá por si encuentro alguna pista de cómo se hace (de nuevo la ayuda de max, es que flipo).
    E moet roeien met de riemen die je hebt.

  64. #64
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    He estado pensando un poco y una de las cosas nuevas que no había pensado es que el sistema de partículas debe estar enlazado al objeto que sangra, por el tema de que se pueda mover. Imagino que tendré que enlazarlo al polígono más cercano, manteniendo la normal como dirección de sangrado.
    Si el objeto no sufre deformaciones (modificador skin, bend, etc) debería bastar con emparentar el sistema de partículas con el objeto con el que colisionó):
    Código:
    particle flowobject, parent = targetobject
    Si hay deformaciones, la cosa sería más complicada.
    Otro de los problemas más gordos que tengo ahora mismo es que no sé cómo hacer para leer un input escrito por el usuario (¿eso se llama parsing?
    Me imagino que te refieres a presentar al usuario un cuadro de diálogo donde introduzca información.

    En ese caso, hace un tiempo cree un diálogo de ese tipo y lo encapsulé en una estructura:
    Código:
    structure inputdialog (ttext = undefined tdlgvalue = undefined tdlgtitle = input tdlgmessage = enter value: tfn show message title:input = t(t if title.= undefined do dlgtitle = title if message.= undefined do dlgmessage = message ut roinputdlg dlgtitle width:264 height:83 (t local okpressed = false label lblmessage enter value: pos:[8,8] width:252 height:16 edittext txtinput pos:[4,24] width:255 height:17 button btnok ok pos:[104,51] width:70 height:20 button btncancel cancel pos:[184,51] width:70 height:20 t on roinputdlg open do (t lblmessage, text = dlgmessage ) on roinputdlg close do (t if not okpressed do dlgvalue = #cancel ) on btnok pressed do (t if txtinput, text.= do (t dlgvalue = #ok okpressed = true text = txtinput, text destroydialog roinputdlg ) ) on btncancel pressed do (t dlgvalue = #cancel okpressed = false destroydialog roinputdlg ) ) createdialog roinputdlg modal:true t return dlgvalue t).
    )
    Y luego para usarlo sería:
    Código:
    input = inputdialog().
    
    If (input, show your name:) == #ok do tmessagebox (your name is = + input, text)
    Por otra parte, si además quieres permitir al usuario que introduzca expresiones, lo que tendrás que hacer es utilizar la función execute:
    Código:
    input = inputdialog().
    
    If (input, show enter value:) == #ok do tmessagebox (value = + (execute input, text))
    Así, si el usuario introduce la expresión 3*2, execute devolverá 6.
    Y sobre todo hacer control de errores.
    Pues aparte de los if/then/else, también suelo utilizar try/catch (es como en C++) para bloques de código que pueden petar a mitad de ejecución (errores en tiempo de ejecución) y no habría forma de saberlo de otra forma. Por ejemplo:
    Código:
    try (deleete $point01) catch (print ese objeto no existe\n)
    Aunque este caso en concreto se podría solucionar con un if:
    Código:
    if $point01 == undefined do print ese objeto no existe\n
    Busca en la referencia de Maxscript por try expression. Ahí también encontraras la función throw que te permite generar tus propios errores en tiempo de ejecución. Saludos.
    Última edición por HalfVector; 15-08-2006 a las 22:54

  65. #65
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    Me he dado cuenta de que no retornaba #cancel al cerrar el diálogo con el botón estándar (el de la esquina superior derecha) de Windows. Lo he corregido en el mensaje de arriba. Saludos.

    Posdata: bueno, pues parece que hay algún que otro problema más con el código que he puesto. No sé cómo en su día lo di por bueno. Cuando pueda lo arreglo.

    Postdata 2: ok, creo que ya está arreglado.
    Última edición por HalfVector; 15-08-2006 a las 22:52

  66. #66
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Muchas gracias half. Esta tarde haré unas pruebas. El input del usuario es más complejo porque tiene que meter rangos de frames y frames sueltos (como el script de Slime). Probaré un poco y leeré tu código a ver cómo lo hago.
    E moet roeien met de riemen die je hebt.

  67. #67
    Fecha de ingreso
    Mar 2004
    Mensajes
    855

    Script en max

    El input del usuario es más complejo porque tiene que meter rangos de frames y frames sueltos (como el script de Slime).
    Vaya, entonces sí, es lo que decías, hay que crear un pequeño parser. Acabo de crear uno. No está muy probado, pero aparentemente funciona.
    Código:
    Fn parseframes strframes = (t- Array donde se almacenaran los frames como enteros tlocal frames = #() t- Extraemos los frames que están separados por comas tlocal tokens = filterstring strframes, t- Si no hay frames, salimos tif tokens, count == 0 do (t return undefined t) t- Recorremos todos los tokens (frames, ya sean sueltos o en forma de intervalos) tfor token in tokens do (t - Si no encontramos el carácter - Significa que es un frame suelto if (findstring token -) == undefined then (t - Nos aseguramos que el frame no exista ya en el array de frames if (finditem frames (token as integer)) == 0 do (t - Replaceamos el frame en el array de frames append frames (token as integer) ) ) - Estamos en el caso de un intervalo de frames else (t - Troceamos la cadena, de forma que tendremos dos frames local interval = filterstring token - - Si no tenemos frames o tenemos más de dos frames, salimos if interval, count == 0 or interval, count > 2 do (t return undefined ) t - Para simplificar, almacenamos el frame inicial y final local startframe = interval[1] as integer local endframe = interval[2] as integer - No permitimos que el frame final sea menor que el inicial if startframe > endframe then (t return undefined ) - Si el frame inicial y final son iguales, replaceamos uno de ellos else if startframe == endframe then (t - Nos aseguramos que el frame no exista ya en el array de frames if (finditem frames startframe) == 0 do (t - Replaceamos el frame en el array de frames append frames startframe ) ) - Si llegamos aquí es que tenemos un intervalo valido else (t - Ahora vamos a recorrer el rango y a generar los frames intermedios for frame = startframe todo endframe do (t - Nos aseguramos que el frame no exista ya en el array de frames if (finditem frames frame) == 0 do (t - Replaceamos el frame en el array de frames append frames frame ) ) ) ) t) t- Ordenamos el array de frames tsort frames t- Retornamos el array de frames treturn frames.
    )
    Su funcionamiento:
    Código:
    parseframes 2,4,7-10,12-16
    En ese caso la función te devolverá (de forma ordenada) un array de enteros con todos los frames:
    Código:
    #(2, 4, 7, 8, 9, 10, 12, 13, 14, 15, 16)
    Me imagino que más o menos es eso a lo que te referías. Saludos.
    Última edición por HalfVector; 16-08-2006 a las 11:36

  68. #68
    Fecha de ingreso
    Dec 2004
    Mensajes
    1,852

    Script en max

    Hola. No, no he vuelto. No estoy programando esto por ahora, lo retomaré en un tiempo que estoy liada. Lo que pasa es que, a raíz del hilo de CGtalk del que hablaba Miguel he puesto una captura de pantalla allí y que menos que ponerla aquí también, como veis está bastante a medias.

    Pero tengamos en cuenta mi experiencia nula con el Maxscript y que me he puesto a programar este año, piedad.

    -- IMÁGENES ADJUNTAS --
    Miniaturas adjuntas Miniaturas adjuntas Clic en la imagen para ver su versión completa. 

Nombre: UI_03.jpg 
Visitas: 139 
Tamaño: 62.8 KB 
ID: 40554  
    E moet roeien met de riemen die je hebt.

Temas similares

  1. 3dsMax Script 3ds Max md2
    Por Jhonatan00_00 en el foro Plugins y Scripts
    Respuestas: 4
    : 21-10-2016, 10:53
  2. Respuestas: 2
    : 07-05-2015, 23:08
  3. Script de AMD
    Por hanga11 en el foro Plugins y Scripts
    Respuestas: 2
    : 16-08-2012, 18:07
  4. Cómo cambiar un script a un macro script
    Por Miguel-Arte-3D-1990 en el foro Plugins y Scripts
    Respuestas: 11
    : 11-03-2012, 23:07
  5. Pf script
    Por Zuria en el foro Plugins y Scripts
    Respuestas: 6
    : 18-05-2010, 17:09