Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 16

Tema: Alienar en rotación objetos

  1. #1
    Usuario Legendario
    Fecha de ingreso
    Feb 2005
    Mensajes
    2,236
    Gracias (Dadas)
    3
    Gracias (Recibidas)
    38

    Alienar en rotación objetos

    Hola. Lo primero decir que tener un foro de script nos va ayudar mucho a la gente que estamos empezando. Al fin dejara de ser un misterio y poco a poco los que tenemos poca idea nos iremos familiarizando con Maxscript y eso es algo muy bueno.

    Bien, os cuento. Estoy intentando hacer esta tontería y no me sale porque no doy con las ordener adecuadas:
    Lo que quiero hacer es bien simple. Tengo 2 cajas boxa y boxb. Bien pues quiero que boxa este alineado solo en rotación con boxb en los x y z por ejemplo.

    He probado con angleaxis, pero no lo consigo y me sale humo de la cabeza ya. Gracias.

  2. #2
    H = E + L
    Fecha de ingreso
    Mar 2004
    Mensajes
    870
    Gracias (Dadas)
    0
    Gracias (Recibidas)
    10

    Alienar en rotación objetos

    Me imagino que te refieres a algo similar a lo que hace la herramienta alinear (alinear orientación), ¿no? En ese caso puedes utilizar una función como ésta:
    Código:
    Fn alignorientation obja objb axes:#{1,2,3} = (tlocal x = obja.transform, row1 tlocal y = obja.transform, row2 tlocal z = obja.transform, row3 tlocal w = obja.transform, row4 tif axes, numberset == 2 or axes, numberset == 3 do (t if axes[1] do x = objb.transform, row1 if axes[2] do y = objb.transform, row2 if axes[3] do z = objb.transform, row3 t if axes, numberset == 2 do (t if axes[1] and axes[2] then (t z = normalize (cross x y) ) else if axes[1] and axes[3] then (t y = normalize (cross z x) ) else if axes[2] and axes[3] do (t x = normalize (cross y z) ) ) t) tlocal (*.mat) = matrix3 x y z w tobja.transform = mat.
    )
    Por defecto alinea los 3 ejes del objeto a con el objeto b:
    Código:
    alignorientation $boxa $boxb
    Pero puedes alinear con dos ejes sólo (aunque se podría ampliar y hacerlo para 1 sólo eje):
    Código:
    alignorientation $boxa $boxb axes:#{1,3}
    En este caso alinea los ejes x (1) y z (3).

    Lo que pasa es que no sé que diferencia hay exactamente entre alinear con 2 o 3 ejes porque al fin y al cabo, los 3 ejes acaban siendo los mismos.

    De todas formas, la función tiene un inconveniente y es que, si el objeto b tiene escala, el objeto a también la heredara. Para evitar esto habría que utilizar algún otro método. Incluso se podría utilizar éste mismo, pero descomponiendo la matriz para de esta forma aislar la rotación de la escala. Lo que pasa es que descomponer una matriz no es algo trivial (y no parece que Maxscript tenga esa función).

    Para más información sobre matrices de transformación, puedes echarle un vistazo al tutorial que escribí hace un tiempo. Saludos.
    Última edición por HalfVector; 09-10-2006 a las 20:17

  3. #3
    Usuario Legendario
    Fecha de ingreso
    Apr 2005
    Mensajes
    1,637
    Gracias (Dadas)
    40
    Gracias (Recibidas)
    190

    Alienar en rotación objetos

    Probad algo como esto:
    Código:
    k=$box02, pues 
    $box02.rotation=$box01.rotation 
    $box02, pues 
    .
    Aquel que pregunta, es tonto un rato. Aquel que no pregunta, es tonto toda la vida.

  4. #4
    H = E + L
    Fecha de ingreso
    Mar 2004
    Mensajes
    870
    Gracias (Dadas)
    0
    Gracias (Recibidas)
    10

    Alienar en rotación objetos

    Efectivamente, si se quiere alinear en dos o tres ejes (como dije, me parece que alinear en dos o tres ejes es lo mismo) ese método es mejor, puesto que te evita el problema de la escala. Pero si se quiere alinear en un solo eje habría que utilizar un método similar al que he puesto (aunque puede que existan más métodos). Saludos.

  5. #5
    Usuario Legendario
    Fecha de ingreso
    Feb 2005
    Mensajes
    2,236
    Gracias (Dadas)
    3
    Gracias (Recibidas)
    38

    Alienar en rotación objetos

    Muchas gracias a los 2. Voy probarlo ahora mismo.

  6. #6
    Usuario Avanzado
    Fecha de ingreso
    Aug 2005
    Mensajes
    170
    Gracias (Dadas)
    0
    Gracias (Recibidas)
    28

    Wink Alienar en rotación objetos

    Porque no pruebas esto.
    $a.rotation, controller[1].value = $b.rotation, controller[1].value.
    $a.rotation, controller[3].value = $b.rotation, controller[3].value.

  7. #7
    Usuario Legendario
    Fecha de ingreso
    Feb 2005
    Mensajes
    2,236
    Gracias (Dadas)
    3
    Gracias (Recibidas)
    38

    Alienar en rotación objetos

    Porque no pruebas esto.
    $a.rotation, controller[1].value = $b.rotation, controller[1].value.
    $a.rotation, controller[3].value = $b.rotation, controller[3].value.
    Probado, también funciona. Gracias. No sé cómo no se me ha ocurrido.

    Me siento un poco pardillo.

    Half voy a tener que mirarme mejor el script que has puesto porque así de entrada me cuesta pillarlo. Gracias.

  8. #8
    Usuario Legendario
    Fecha de ingreso
    Apr 2005
    Mensajes
    1,637
    Gracias (Dadas)
    40
    Gracias (Recibidas)
    190

    Alienar en rotación objetos

    El problema que veo con la función, half, es que reconstruye la matriz a base de xproduct, lo cual está muy bien, pero no es muy general. ¿y si la matriz original del objeto no es ortogonal? Por lo demás, creo que en la ayuda de Maxscript viene un ejemplo para hacer eso y es prácticamente calcado de lo que tú has puesto.

    Generalidades:
    En matrices ortogonales alinear 2 o 3 ejes es exactamente lo mismo, siempre que ambas tengan el mismo signo en el determinante.

    En matrices no ortogonales se pueden alinear 2 ejes si forman 90 grados, si no, solo uno, a menos que la matriz de referencia defina el mismo sistema de cords. Entonces o alineas 1 eje o los 3.

    Que alguien me corrija si me equivoco, por favor.
    Aquel que pregunta, es tonto un rato. Aquel que no pregunta, es tonto toda la vida.

  9. #9
    H = E + L
    Fecha de ingreso
    Mar 2004
    Mensajes
    870
    Gracias (Dadas)
    0
    Gracias (Recibidas)
    10

    Alienar en rotación objetos

    La verdad es que, siempre di por hecho que las matrices de transformación en 3dsmax formaban una base ortogonal. ¿en qué casos eso no ocurre?
    Por ejemplo, aplicar un skew a través de una matriz sí que generaría una matriz degenerada, pero en 3dsmax el skew se aplica a través de un modificador, por lo que no se altera la matriz de transformación.

    Lo digo porque en todos los exporters de escena que he hecho, nunca se me pasó por la cabeza comprobar que la matriz de transformación de un objeto no fuera ortogonal. Y claro, si eso es así, para la próxima debería llevar más cuidado. Saludos.

    Editado: corregido ortonormal por ortogonal. Gracias Klópes.
    Última edición por HalfVector; 10-10-2006 a las 15:50

  10. #10
    Moderador
    Fecha de ingreso
    Jul 2005
    Mensajes
    8,059
    Gracias (Dadas)
    523
    Gracias (Recibidas)
    903

    Alienar en rotación objetos

    No me parece serio que la matriz de un objeto no sea ortogonal, (no ortonormal, demos oportunidad al escalado), eso se carga la posibilidad de exportar una escena correctamente, al menos aprovechando el uso de instancias.
    ...y estaba superbueno.
    Y miré su perfil. Y vi que era amigo de Daniela. Puaf.


    Dos niñas en el parque

    no se elevará, nunca más

Página 1 de 2 12 ÚltimoÚltimo

Temas similares

  1. Blender Objetos no conservan su rotación
    Por blendernauta en el foro Problemas con Programas
    Respuestas: 2
    Último mensaje: 30-08-2015, 20:37
  2. Problema rotación objetos
    Por Cova_Q en el foro Animación y Rigging
    Respuestas: 2
    Último mensaje: 19-03-2013, 17:38
  3. Problema para rotación de objetos en 3ds Max
    Por WushuShaolin en el foro Problemas con Programas
    Respuestas: 4
    Último mensaje: 31-05-2010, 09:18
  4. Posicionar pivot y rotación de objetos
    Por Pacorson en el foro Modelado
    Respuestas: 8
    Último mensaje: 28-09-2009, 18:54
  5. Cómo acelerar la rotación de los objetos
    Por Maulen en el foro Infografía General
    Respuestas: 4
    Último mensaje: 14-01-2003, 13:28