Foros 3DPoder.  

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í. 3d





¿Te ayudo?
Retroceder   Foros 3DPoder. > :: Infografia y diseño grafico. > Script
Foro3D Galeria Privada Video3D Blueprints Software Blog3DPoder Buscar Empleo Donaciones

Diseño Web
google adsense


Respuesta
 
Herramientas
Antiguo 11 oct 2008   #1
Leandro Salerno
Miembro
 
Avatar de Leandro Salerno
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 31
Contactar con Leandro Salerno a través de MSN
3dsmax [MaxScript] - orientar objeto a normal de un vertice

Hola que tal, estoy trabajando en un script que estoy necesitando, en principio para linkear un objeto a un vertice de una malla.

utilizando dependsOn en un script controller en position transform
Cita:

dependsOn $box01
(
polyop.getvert $box01 1
)
funciona perfecto.

ahora el segundo paso es conseguir que este objeto este orientado a la normal de este vertice seleccionado pero no lo consigo,

se puede extraer la normal del vertice 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 quaternios, intente convertirlos pero no tuve exito....

la idea es que este objeto que ahora esta linkeado al vertice seleccionado, pueda rotar en funcion de la orientacion de este vertice o el objeto del que depende...

se les ocurre alguna idea para poder resolver esta cuestion?

muchas gracias por adelantado!!
saludos
__________________
Leandro Salerno
PostMedia
http://www.postmedia.com.ar/
Leandro Salerno is offline   Responder Con Cita
Enlaces patrocinados
Antiguo 11 oct 2008   #2
Cesar Saez
just another monkey
 
Avatar de Cesar Saez
 
Fecha de Ingreso: marzo-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 2,938
Contactar con Cesar Saez a través de MSN
Predeterminado Re: [MaxScript] - orientar objeto a normal de un vertice

Cita:
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 8 ) que averigues sobre los nodos porque entre otras cosas te permitirán independencia de nombres en el script

Cita:
-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

Cita:
- y el segundo problema es que tengo conflictos con euler vs quaternios, intente convertirlos pero no tuve exito....
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 como funciona el tema.

Salu2
__________________
Blog::Demo Reel '07
____________________
"Debes practicar hasta que lo dificil resulte fácil, luego practica hasta que lo fácil resulte hermoso"
Stephen Covey
Cesar Saez is offline   Responder Con Cita
Antiguo 11 oct 2008   #3
Leandro Salerno
Miembro
 
Avatar de Leandro Salerno
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 31
Contactar con Leandro Salerno a través de MSN
3dsmax Re: [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 orientacion, sigo sin poder solucionarlo....

ahora comprendo que getNormal devuelve el vector y no el angulo, por lo tanto no se puede tan sencillamente....

entonces lo que hay que hacer con el vector que devuelve getNormal es calcular el angulo para poder asignarlo al objeto......

aca esta el problema..... lei la explicacion varias veces, hice algunas cuantas pruebas pero sigo sin comprenderlo del todo.....

hice un intento de reconstruir la matrix3 algo asi como:

Cita:
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, logicamente me falta calcular el angulo....

gracias por todo Cesar!
__________________
Leandro Salerno
PostMedia
http://www.postmedia.com.ar/

Última edición por Leandro Salerno fecha: 11 oct 2008 a las 22:00.
Leandro Salerno is offline   Responder Con Cita
Antiguo 11 oct 2008   #4
Cesar Saez
just another monkey
 
Avatar de Cesar Saez
 
Fecha de Ingreso: marzo-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 2,938
Contactar con Cesar Saez a través de MSN
Predeterminado Re: [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 que es y como funcionan las matrices de transformación, a mi me fue muy muy útil.
__________________
Blog::Demo Reel '07
____________________
"Debes practicar hasta que lo dificil resulte fácil, luego practica hasta que lo fácil resulte hermoso"
Stephen Covey
Cesar Saez is offline   Responder Con Cita
Antiguo 11 oct 2008   #5
Leandro Salerno
Miembro
 
Avatar de Leandro Salerno
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 31
Contactar con Leandro Salerno a través de MSN
Predeterminado Re: [MaxScript] - orientar objeto a normal de un vertice

como te comentaba lei el tutorial varias veces y creo comprender que son las matrices de transformacion.... pero segun me decis..... para conseguir la orientacion hay que relizar varios calculos matematicos con ciertas formulas que por ahora desconozco.....

supongo que de alguna manera lo resolvere

gracias por todo
saludos!
__________________
Leandro Salerno
PostMedia
http://www.postmedia.com.ar/
Leandro Salerno is offline   Responder Con Cita
Antiguo 12 oct 2008   #6
Leandro Salerno
Miembro
 
Avatar de Leandro Salerno
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 31
Contactar con Leandro Salerno a través de MSN
Predeterminado Re: [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 vertice, lo hago con una cara....

por ejemplo un ScriptController en transform, para la cara 76 de la sphere02

Cita:
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 tambien...... a primera vista perfecto.... pero en determinadas circunstancias el objeto alineado rota en un eje......
estoy cerca pero falta....
__________________
Leandro Salerno
PostMedia
http://www.postmedia.com.ar/
Leandro Salerno is offline   Responder Con Cita
Antiguo 13 oct 2008   #7
Cesar Saez
just another monkey
 
Avatar de Cesar Saez
 
Fecha de Ingreso: marzo-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 2,938
Contactar con Cesar Saez a través de MSN
Predeterminado Re: [MaxScript] - orientar objeto a normal de un vertice

Ahora si! 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.

Salu2
__________________
Blog::Demo Reel '07
____________________
"Debes practicar hasta que lo dificil resulte fácil, luego practica hasta que lo fácil resulte hermoso"
Stephen Covey
Cesar Saez is offline   Responder Con Cita
Antiguo 13 oct 2008   #8
Leandro Salerno
Miembro
 
Avatar de Leandro Salerno
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 31
Contactar con Leandro Salerno a través de MSN
Predeterminado Re: [MaxScript] - orientar objeto a normal de un vertice

pero la tangente de la superficie no seria el rightVector? y el rightVector no lo tengo que calcular con el worldUpVector?

no comprendo bien.....

probe usando:

Código:
worldUpVector = normalize(cross pos Norm)
funciona perfecto cuando el objeto lo muevo o roto.... pero si lo que se mueven son los vertices..... o uso algun modificador.... nuevamente aparecen errores en la rotacion local del "point" pegado .... obviamente tampoco es la solucion....

creo que ya se me esta escapando el tema......

saludos
__________________
Leandro Salerno
PostMedia
http://www.postmedia.com.ar/
Leandro Salerno is offline   Responder Con Cita
Antiguo 13 oct 2008   #9
Cesar Saez
just another monkey
 
Avatar de Cesar Saez
 
Fecha de Ingreso: marzo-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 2,938
Contactar con Cesar Saez a través de MSN
Predeterminado Re: [MaxScript] - orientar objeto a normal de un vertice

Cita:
Escritos por Leandro Salerno Ver Mensaje
pero la tangente de la superficie no seria 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 estás 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 dummy 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 como mientras la giras la esfera va cambiando la rotación en Z de tu dummy). Es lo mismo que cuando usas un constraint y tienes que establecer tu propio upNode (o upVector o como 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.

Cita:
probe usando:
Código:
worldUpVector = normalize(cross pos Norm)
No quiero parecer rudo pero sabes que estás haciendo exactamente con esa linea? estas normalizando el producto cruz entre el vector de la normal y la posición. Es un poco como mezclar peras con manzanas.
__________________
Blog::Demo Reel '07
____________________
"Debes practicar hasta que lo dificil resulte fácil, luego practica hasta que lo fácil resulte hermoso"
Stephen Covey
Cesar Saez is offline   Responder Con Cita
Antiguo 13 oct 2008   #10
Leandro Salerno
Miembro
 
Avatar de Leandro Salerno
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 31
Contactar con Leandro Salerno a través de MSN
Predeterminado Re: [MaxScript] - orientar objeto a normal de un vertice

no te preocupes, eso no es ser rudo.... no me molesta mezlcar peras con manzanas o bananas.... equivocarse y seguir equivocandose hace que se encuentre el camino y se aprenda..... asi que no pasa nada. saludos y gracias por tu tiempo!
__________________
Leandro Salerno
PostMedia
http://www.postmedia.com.ar/
Leandro Salerno is offline   Responder Con Cita
Antiguo 13 oct 2008   #11
Leandro Salerno
Miembro
 
Avatar de Leandro Salerno
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 31
Contactar con Leandro Salerno a través de MSN
Predeterminado Re: [MaxScript] - orientar objeto a normal de un vertice

bueno seguramente me siga equivocando pero ahora llegue a esto....
aparentemente lo veo funcionar muy bien... pero no se si me estoy engañando...

Código:
dependsOn $Teapot01
(
Pos= polyop.getFaceCenter $Teapot01 858
Pos2= polyop.getFaceCenter $Teapot01 844
Norm =  (polyop.getFaceNormal  $Teapot01 858)

worldUpVector = pos - pos2

rightVector = normalize(cross worldUpVector Norm)
upVector = normalize(cross rightVector Norm)         
matrix3 rightVector upVector Norm Pos
)
Cesar gracias por tu orientacion, comentarios y tu tiempo..... me hiciste pensar mucho! abrazo grande!
__________________
Leandro Salerno
PostMedia
http://www.postmedia.com.ar/
Leandro Salerno is offline   Responder Con Cita
Antiguo 13 oct 2008   #12
Cesar Saez
just another monkey
 
Avatar de Cesar Saez
 
Fecha de Ingreso: marzo-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 2,938
Contactar con Cesar Saez a través de MSN
Thumbs up Re: [MaxScript] - orientar objeto a normal de un vertice

Está muy bien!

Lo único que creo te faltaría es normalizar el vector entre los 2 componentes, procurar de hacer locales tus variables para evitar problemas de evaluación cuando tengas varios objetos con el script de forma simultanea y en lugar de usar directamente el $teapot01 usar un nodo que te permitirá no amarrarte a nombres y va a evaluar un poco más rápido.

Código:
-- forma de calcular el vector normalizado entre 2 puntos
-- y guardarlo en una variable local:

local worldUpVector = (pos - pos2)/Length(pos - pos2)
Por casualidad estás usando max 8? si es así probablemente el script no te tomará los modificadores sobre el editable poly (en versiones posteriores funciona bien), si quieres hacerlo más compatible yo te recomendaría seguir el mismo criterio que llevas hasta ahora pero usando comandos que funcionen sobre trimesh (como el primer mensaje), el concepto es exactamente el mismo. Casi lo tienes!

Felicidades!
__________________
Blog::Demo Reel '07
____________________
"Debes practicar hasta que lo dificil resulte fácil, luego practica hasta que lo fácil resulte hermoso"
Stephen Covey
Cesar Saez is offline   Responder Con Cita
Antiguo 13 oct 2008   #13
Leandro Salerno
Miembro
 
Avatar de Leandro Salerno
 
Fecha de Ingreso: abril-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 31
Contactar con Leandro Salerno a través de MSN
Predeterminado Re: [MaxScript] - orientar objeto a normal de un vertice

Excelente!
Si estoy con la version 2009 asi que no hay problema.....
Es cierto, tengo pendiente el tema de los nodos, pero tengo que leer un poco sobre ese tema, no lo tengo muy claro todavia.... lo importante ahora es que en principio el codigo funciona genial....
Por lo que estuve probando tambien, surge un pequeño problema y es que si a la geometria le sumas un modificador como el meshsmooth o un turbosmooth el orden de las caras cambia... entonces el dummy cambia de posicion....
Pero bueno por ahora esto me sirve, hasta que tenga que poner un TurboSmooth jeje....

gracias!
__________________
Leandro Salerno
PostMedia
http://www.postmedia.com.ar/
Leandro Salerno is offline   Responder Con Cita
Respuesta

Etiquetas Identificativas
maxscript, normal, objeto, orientar, vertice


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas

Normas de Publicación
Usted no puede publicar nuevos mensajes.
Usted no puede responder mensajes
Usted no puede publicar archivos adjuntos
Usted no puede editar sus mensajes

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are deshabilitado
Pingbacks are deshabilitado
Refbacks are deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Guía rápida de blender 3D, creada por Javier Belanche 3dpoder Blender 13 01 sep 2008 16:02
Manual de Blender - PARTE XIII - HERRAMIENTAS ESPECIALES DE MODELADO 3dpoder Blender 0 12 mar 2008 18:11
Manual de Blender - PARTE IV - TEXTURAS 3dpoder Blender 0 10 mar 2008 16:39
Manual de Blender - PARTE II - MODELADO 3dpoder Blender 0 08 mar 2008 17:03
Manual 3dsMax 3dpoder 3DStudio Max 0 13 ago 2005 09:45

google adsense



La franja horaria es GMT. Ahora son las 20:29.


Powered by: vBulletin, para 3DPoder.com Versión 3.7.4
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.
3DPoder.com Foro3d.com © Al servicio de la infografia y el 3D desde 1997.
Zappos Coupons |