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

Tema: Maxscript orientar objeto a normal de un vértice

  1. #1
    Usuario Senior
    Fecha de ingreso
    Apr 2007
    Mensajes
    39
    Gracias (Dadas)
    1
    Gracias (Recibidas)
    1

    3dsmax [maxscript] orientar objeto a normal de un vertice

    Hola qué tal, estoy trabajando en un script que estoy necesitando, en principio para linkear un objeto a un vértice de una malla.

    Utilizando DependsOn en un script controller en position transform.
    .
    DependsOn $box01.

    Polyop, getvert $box01 1.
    )
    .
    Funciona perfecto.

    Ahora el segundo paso es conseguir que este objeto este orientado a la normal de este vértice seleccionado, pero no lo consigo.

    Se puede extraer la normal del vértice con getnormal pero tengo dos problemas.
    -el primero es que getnormal funciona con editable_mesh y no con editable_poly.
    - y el segundo problema es que tengo conflictos con Euler vs Quaternions, intente convertirlos, pero no tuve éxito.

    La idea es que este objeto que ahora está enlazando al vértice seleccionado, pueda rotar en función de la orientación de este vértice o el objeto del que depende.

    Se les ocurre alguna idea para poder resolver esta cuestión?
    Muchas gracias por adelantado. Saludos.

  2. #2
    pythonized...
    Fecha de ingreso
    Mar 2004
    Mensajes
    3,762
    Gracias (Dadas)
    73
    Gracias (Recibidas)
    188

    [maxscript] orientar objeto a normal de un vertice

    Utilizando DependsOn en un script controller en position transform funciona perfecto.
    Yo te recomendaría (si trabajas con un max superior a la versión que averigües sobre los nodos porque entre otras cosas te permitirán independencia de nombres en el script.
    -el primero es que getnormal funciona con editable_mesh y no con editable_poly.
    Puedes acceder a la trimesh en lugar del nodo agregando un, Mesh, de esta forma debería funcionar también con editable poly.

    Ejemplo:
    Getnormal $.Mesh 6 -retorna el Vector normal del vértice 6 en el objeto seleccionado.
    - y el segundo problema es que tengo conflictos con Euler vs Quaternions, intente convertirlos, pero no tuve éxito.
    Lo que pasa es que getnormal te retorna el Vector de la normal del vértice, pero no directamente el ángulo. Yo en tu lugar reconstruiría directamente toda la matriz de transformación, seguramente este tutorial te sirva mucho para hacerte una mejor idea de cómo funciona el tema. Saludos.

  3. #3
    Usuario Senior
    Fecha de ingreso
    Apr 2007
    Mensajes
    39
    Gracias (Dadas)
    1
    Gracias (Recibidas)
    1

    3dsmax [maxscript] orientar objeto a normal de un vertice

    Bien getnormal $.Mesh funciona perfecto, ya no hay problemas entre editable poly y editable Mesh. Con respecto a la orientación, sigo sin poder solucionarlo.

    Ahora comprendo que getnormal devuelve el Vector y no el ángulo, por lo tanto no se puede tan sencillamente.

    Entonces lo que hay que hacer con el Vector que devuelve getnormal es calcular el ángulo para poder asignarlo al objeto.

    Aquí está el problema, leí la explicación varias veces, hice algunas cuantas pruebas, pero sigo sin comprenderlo del todo.

    Hice un intento de reconstruir la matrix3 algo, así como.
    DependsOn $box01.

    Pos= polyop, getvert $box01 1.

    Rot=getnormal $box01.Mesh 1.

    Matrix3 [1,0,0] [0,1,0] [0,0,1] pos).
    Pero no hay caso, lógicamente me falta calcular el ángulo. Gracias por todo cesar.
    Última edición por Leandro Salerno; 12-10-2008 a las 05:00

  4. #4
    pythonized...
    Fecha de ingreso
    Mar 2004
    Mensajes
    3,762
    Gracias (Dadas)
    73
    Gracias (Recibidas)
    188

    [maxscript] orientar objeto a normal de un vertice

    Aunque tuvieras la normal te hace falta un Vector que te indique la tangente y luego mediante un producto cruz de las matrices sacar un tercer Vector perpendicular a los anteriores para generar los 3 vectores necesarios en tu matriz de transformación, 3d implica 3 ejes.

    Leete el tutorial que te mencionaba en el mensaje anterior que te va a ayudar mucho a entender qué es y cómo funcionan las matrices de transformación, a mí me fue muy útil.

  5. #5
    Usuario Senior
    Fecha de ingreso
    Apr 2007
    Mensajes
    39
    Gracias (Dadas)
    1
    Gracias (Recibidas)
    1

    [maxscript] orientar objeto a normal de un vertice

    Como te comentaba leí el tutorial varias veces y creo comprender que son las matrices de transformación, pero según me decís, para conseguir la orientación hay que realizar varios cálculos matemáticos con ciertas fórmulas que por ahora desconozco.

    Supongo que, de alguna manera lo resolveré. Gracias por todo. Saludos.

  6. #6
    Usuario Senior
    Fecha de ingreso
    Apr 2007
    Mensajes
    39
    Gracias (Dadas)
    1
    Gracias (Recibidas)
    1

    [maxscript] orientar objeto a normal de un vertice

    Bueno luego de leer bastante llegue a un resultado que funciona parcialmente bien. Primero en lugar de intentar alinear a un vértice, lo hago con una cara.

    Por ejemplo, un scriptcontroller en transform, para la cara 76 de la sphere02.
    DependsOn $sphere02.

    Pos= polyop, getfacecenter $sphere02 76.

    Norm = (polyop, getfacenormal $sphere02 76).
    Worldupvector = [0,0,1].

    Rightvector = normalize(cross worldupvector Norm).

    Upvector = normalize(cross RightVector Norm).

    Matrix3 RightVector upvector Norm pos).
    El objeto queda alineado a la normal y rota también, a primera vista perfecto, pero en determinadas circunstancias el objeto alineado rota en un eje.

    Estoy cerca, pero falta.

  7. #7
    pythonized...
    Fecha de ingreso
    Mar 2004
    Mensajes
    3,762
    Gracias (Dadas)
    73
    Gracias (Recibidas)
    188

    [maxscript] orientar objeto a normal de un vertice

    Ahora sí, el código tiene mucho más sentido. Yo creo que el problema es que tomas como base para calcular la matriz un worldupvector que no viene a nada, simplemente es un Vector que apunta hacia arriba, pero no tiene relación con la orientación del componente en particular al que quieres pegarle el helper. Yo cuando hice un script parecido en lugar de usar un worldupvector usé un Vector entre el componente seleccionado y su vecino (en el fondo la tangente de la superficie), de esta forma puedes calcular los 3 vectores y siempre tendrán relación con la orientación del componente. Saludos.

  8. #8
    Usuario Senior
    Fecha de ingreso
    Apr 2007
    Mensajes
    39
    Gracias (Dadas)
    1
    Gracias (Recibidas)
    1

    [maxscript] orientar objeto a normal de un vertice

    Pero la tangente de la superficie no sería el RightVector? ¿Y el RightVector no lo tengo que calcular con el worldupvector?
    No comprendo bien.

    Probé usando:
    Código:
    worldupvector = normalize (cross pues Norm)
    Funciona perfecto cuando el objeto lo muevo o roto, pero si lo que se mueven son los vértices, o uso algún modificador, nuevamente aparecen errores en la rotación local del point pegado, obviamente tampoco es la solución.

    Creo que ya se me está escapando el tema. Saludos.

  9. #9
    pythonized...
    Fecha de ingreso
    Mar 2004
    Mensajes
    3,762
    Gracias (Dadas)
    73
    Gracias (Recibidas)
    188

    [maxscript] orientar objeto a normal de un vertice

    Pero la tangente de la superficie no sería el RightVector? ¿Y el RightVector no lo tengo que calcular con el worldupvector?
    No comprendo bien.
    Me preguntas por el nombre de la variable o lo que realmente estas calculando? Si es por el nombre de tus variables tiene sentido que la tangente a la superficie se llame RightVector.

    Yo a lo que me refería antes es que con esa solución cuando gires la esfera el dummie no va a quedar fijo ya que depende de un Vector inventado que simplemente apunta hacia arriba del mundo, haz la prueba y gira tu esfera hacia abajo (verás cómo mientras la giras la esfera va cambiando la rotación en z de tu dummie). Es lo mismo que cuando usas un constraint y tienes que establecer tu propio upnode (o upvector o cómo se llame en max). Yo te recomendaría que en lugar de usar un Vector inventado apuntando hacia arriba del mundo uses un Vector que apunte hacia el polígono/componente vecino.
    Probé usando:
    Código:
    worldupvector = normalize(cross pues Norm)
    No quiero parecer rudo, pero ¿sabes que estás haciendo exactamente con esa línea? Estas normalizando el producto cruz entre el Vector de la normal y la posición. Es un poco como mezclar peras con manzanas.

  10. #10
    Usuario Senior
    Fecha de ingreso
    Apr 2007
    Mensajes
    39
    Gracias (Dadas)
    1
    Gracias (Recibidas)
    1

    [maxscript] orientar objeto a normal de un vertice

    No te preocupes, eso no es ser rudo, no me molesta mezclar peras con manzanas o bananas, equivocarse y seguir equivocándose hace que se encuentre el camino y se aprenda, así que, no pasa nada, saludos y gracias por tu tiempo.

Página 1 de 2 12 ÚltimoÚltimo

Temas similares

  1. Respuestas: 6
    Último mensaje: 09-11-2018, 00:15
  2. Maya Extruir vértice normal fusión de objetos mirror
    Por Koprokid en el foro Modelado
    Respuestas: 1
    Último mensaje: 04-01-2013, 13:14
  3. Houdini Cómo orientar un objeto con otro
    Por mundo 3d en el foro Animación y Rigging
    Respuestas: 4
    Último mensaje: 22-03-2011, 17:05
  4. Vincular vértice de spline a objeto
    Por luis_cuvi en el foro Animación y Rigging
    Respuestas: 1
    Último mensaje: 25-03-2010, 09:23
  5. Linkear objeto a vértice de spline
    Por r-l-a-v en el foro Programación y Scripts
    Respuestas: 1
    Último mensaje: 04-03-2010, 15:31