Resultados 1 al 2 de 2

Rotación en los huesos

  1. #1
    Fecha de ingreso
    Dec 2008
    Mensajes
    293

    Rotacion en los huesos

    Estoy haciendo ejercicios de crear huesos, pero me he encontrado con el problema siguiente, si un punto de referencia tiene un valor negativo en el eje Z me crea el hueso con una rotación. ¿sabéis cómo puedo corregir este problemas para que me cree los huesos con un mismo sentido de rotación?
    Este es el código, a ver si me podéis indicar el buen camino a seguir.
    Código:
    Refpoint05 = point pos:[0,0,65] size:3 wirecolor:[246,255,0] name:refpoint05.
    
    Refpoint04 = point pos:[0,0,60] size:3 wirecolor:[246,255,0] name:refpoint04.
    
    Refpoint03 = point pos:[0,0,40] size:3 wirecolor:[246,255,0] name:refpoint03.
    
    Refpoint02 = point pos:[0,-1,20] size:3 wirecolor:[246,255,0] name:refpoint02.
    
    Refpoint01 = point pos:[0,0,0] size:3 wirecolor:[246,255,0] name:refpoint01.
    
    Refarray = #(refpoint01, refpoint02, refpoint03, refpoint04, refpoint05).
    
    Bonesarray = #().
    
    For I = 1 todo 4 do.
    (Tb = bonesys, createbone refarray[i], pues refarray[i+1], pues refarray[i]. Transform[3] tappend bonesarray b tif i>1 then b, parent=bonesarray[i-1] Tb, frontfin=true Tb, taper = -90 Tb.width = 3.0 Tb, height = 3.0 Tb.wirecolor = color 253 255 111 Tb, name = uniquename bone).
    /* Jmpinero3D Blog´s */ | "Hasta el mas sabio se puede sentar encima de un hormiguero, pero solo el necio se queda sentado"

  2. #2
    Fecha de ingreso
    Dec 2025
    Mensajes
    0
    El problema ocurre porque el sistema de huesos en 3ds Max calcula automáticamente la rotación del hueso basándose en la alineación de los ejes entre el punto inicial y el punto final. Cuando la coordenada Z del punto final es menor que la del punto inicial (es decir, hay un valor negativo relativo en la dirección), el hueso intenta orientarse correctamente, lo que puede resultar en una rotación inesperada.

    La solución es normalizar la orientación de los huesos durante su creación. Debes forzar una alineación consistente del eje Z del hueso. Puedes hacer esto ajustando la transformación del hueso después de crearlo o utilizando un vector de alineación específico en la función createbone.

    Modifica tu bucle de creación de huesos. En lugar de usar solo las posiciones, define explícitamente un eje para la alineación del hueso. El parámetro "boneAxis" en createbone controla esto. Establece el eje de alineación principal del hueso, por ejemplo, al eje Z positivo global [0,0,1], para asegurar una orientación consistente.

    Aquí está el código corregido. Presta atención a la línea donde se crea el hueso.

    Refpoint05 = point pos:[0,0,65] size:3 wirecolor:[246,255,0] name:refpoint05.
    Refpoint04 = point pos:[0,0,60] size:3 wirecolor:[246,255,0] name:refpoint04.
    Refpoint03 = point pos:[0,0,40] size:3 wirecolor:[246,255,0] name:refpoint03.
    Refpoint02 = point pos:[0,-1,20] size:3 wirecolor:[246,255,0] name:refpoint02.
    Refpoint01 = point pos:[0,0,0] size:3 wirecolor:[246,255,0] name:refpoint01.

    Refarray = #(refpoint01, refpoint02, refpoint03, refpoint04, refpoint05).
    Bonesarray = #().

    For i = 1 to 4 do
    (
    local startPos = Refarray[i].pos
    local endPos = Refarray[i+1].pos
    local upVector = [0, 0, 1]
    local b = bonesys.createbone startPos endPos upVector
    b.transform = Refarray[i].transform
    b.frontfin = true
    b.taper = -90
    b.width = 3.0
    b.height = 3.0
    b.wirecolor = color 253 255 111
    b.name = uniquename "bone"
    append Bonesarray b
    if i > 1 then
    (
    b.parent = Bonesarray[i-1]
    )
    )

    La clave es el tercer argumento en bonesys.createbone, que es el vector "boneAxis". Al establecerlo en [0,0,1], estás forzando a que el eje de alineación del hueso sea el eje Z global positivo. Esto anula el cálculo automático que causaba la rotación no deseada cuando las coordenadas Z eran negativas.

    Además, se asigna la transformación del punto de referencia inicial al hueso para mantener su posición y rotación base. Esto debería crear todos los huesos con el mismo sentido de rotación, independientemente de los valores negativos en el eje Z.

    Si aún persisten problemas de orientación, puedes resetear la transformación del hueso después de crearlo y luego alinearlo manualmente. Puedes usar la función alignTo para alinear el eje Z del hueso a un vector específico, como la dirección normalizada del hueso mismo o un vector global.

Temas similares

  1. Autodesk Maya Por qué cambian de rotación los huesos al activar IK en un rig de Maya
    Por 3DIER en el foro Animación y Rigging
    Respuestas: 1
    : 19-06-2025, 11:19
  2. 3ds Max Problema limitando rotación en los huesos de un IK
    Por Vil en el foro Animación y Rigging
    Respuestas: 1
    : 13-06-2025, 23:50
  3. Respuestas: 1
    : 20-07-2021, 06:12
  4. Simetría huesos y juntar huesos sueltos
    Por blenderman1 en el foro Animación y Rigging
    Respuestas: 4
    : 04-03-2014, 16:36
  5. 3ds Max Rotación extraña con huesos
    Por @lbert en el foro Animación y Rigging
    Respuestas: 2
    : 26-08-2003, 13:51