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

Oferta de trabajo en Decathlon
google adsense


Respuesta
 
Herramientas
Antiguo 09 oct 2006   #1
shenmue
Senior Member
 
Fecha de Ingreso: febrero-2005
Ubicación: politecnico/3D,3D/politecnico
Mensajes: 1,970
Predeterminado Alienar en rotacion 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 tonteria 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 rotacion 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
shenmue is offline   Responder Con Cita
Enlaces patrocinados
Antiguo 09 oct 2006   #2
HalfVector
H = E + L
 
Fecha de Ingreso: marzo-2004
Ubicación: Entre dos vectores
Mensajes: 877
Predeterminado Re: Alienar en rotacion 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} = (
	local x = objA.transform.row1
	local y = objA.transform.row2
	local z = objA.transform.row3
	local w = objA.transform.row4

	if axes.numberSet == 2 or axes.numberSet == 3 do (
		if axes[1] do x = objB.transform.row1
		if axes[2] do y = objB.transform.row2
		if axes[3] do z = objB.transform.row3
	
		if axes.numberSet == 2 do (
			if axes[1] and axes[2] then (
				z = normalize (cross x y)
			)
			else if axes[1] and axes[3] then (
				y = normalize (cross z x)
			)
			else if axes[2] and axes[3] do (
				x = normalize (cross y z)
			)
		)
	)
	
	local mat = Matrix3 x y z w
	
	objA.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é qué 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 heredará. 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 fecha: 09 oct 2006 a las 13:17.
HalfVector is offline   Responder Con Cita
Antiguo 09 oct 2006   #3
Nessito
Senior Member
 
Fecha de Ingreso: abril-2005
Ubicación: Madrid
Mensajes: 674
Predeterminado Re: Alienar en rotacion objetos

probad algo como esto:
Código:
kk=$box02.pos 
$box02.rotation=$box01.rotation 
$box02.pos=kk 
__________________
Aquel que pregunta, es tonto un rato. Aquel que no pregunta, es tonto toda la vida.
Nessito is offline   Responder Con Cita
Antiguo 09 oct 2006   #4
HalfVector
H = E + L
 
Fecha de Ingreso: marzo-2004
Ubicación: Entre dos vectores
Mensajes: 877
Predeterminado Re: Alienar en rotacion 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.
HalfVector is offline   Responder Con Cita
Antiguo 09 oct 2006   #5
shenmue
Senior Member
 
Fecha de Ingreso: febrero-2005
Ubicación: politecnico/3D,3D/politecnico
Mensajes: 1,970
Predeterminado Re: Alienar en rotacion objetos

Muchas gracias a los 2.Voy probarlo ahora mismo.
shenmue is offline   Responder Con Cita
Antiguo 09 oct 2006   #6
Crazy
Miembro
 
Fecha de Ingreso: agosto-2005
Mensajes: 72
Wink Re: Alienar en rotacion 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
Crazy is offline   Responder Con Cita
Antiguo 09 oct 2006   #7
shenmue
Senior Member
 
Fecha de Ingreso: febrero-2005
Ubicación: politecnico/3D,3D/politecnico
Mensajes: 1,970
Predeterminado Re: Alienar en rotacion objetos

Cita:
Escritos por Crazy
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 ...tambien funciona.Gracias.No se como no se me ha ocurrido
Me siento un poco pardillo

Half voy a tener que mirarme mejor el script que has puesto porque asi de entrada me cuesta pillarlo.Gracias.
shenmue is offline   Responder Con Cita
Antiguo 10 oct 2006   #8
Nessito
Senior Member
 
Fecha de Ingreso: abril-2005
Ubicación: Madrid
Mensajes: 674
Predeterminado Re: Alienar en rotacion objetos

El problema que veo con la funcion, Half, es que reconstruye la matriz a base de Xproduct, lo cual esta muy bien, pero no es muy general. ¿Y si la matriz original del objeto no es ortogonal? Por lo demas, creo que en la ayuda de MAXScript viene un ejemplo para hacer eso y es practicamente calcado de lo que tu 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 coords. 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.
Nessito is offline   Responder Con Cita
Antiguo 10 oct 2006   #9
HalfVector
H = E + L
 
Fecha de Ingreso: marzo-2004
Ubicación: Entre dos vectores
Mensajes: 877
Predeterminado Re: Alienar en rotacion objetos

La verdad es que siempre dí por hecho que las matrices de transformación en MAX 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 MAX 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 fecha: 10 oct 2006 a las 08:50.
HalfVector is offline   Responder Con Cita
Antiguo 10 oct 2006   #10
Klópes
12 meses, 12 pagas
 
Avatar de Klópes
 
Fecha de Ingreso: julio-2005
Ubicación: Bajo el sol monegrino
Mensajes: 5,093
Predeterminado Re: Alienar en rotacion 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...
__________________
La clave es coger la vida por los cojones, apurar cada día como si fuera el último.

Hubert Farnsworth
esta ahora conectado.   Responder Con Cita
Antiguo 10 oct 2006   #11
HalfVector
H = E + L
 
Fecha de Ingreso: marzo-2004
Ubicación: Entre dos vectores
Mensajes: 877
Predeterminado Re: Alienar en rotacion objetos

Cita:
Escritos por Klópes
(no ortonormal, demos oportunidad al escalado )
Exacto.
HalfVector is offline   Responder Con Cita
Antiguo 10 oct 2006   #12
juako
Miembro
 
Fecha de Ingreso: septiembre-2006
Ubicación: Uruguay
Mensajes: 72
Predeterminado Re: Alienar en rotacion objetos

si usara :
$box02.rotation=$box01.rotation
pero cuando lo uso se me gira 90 grados en el eje local Y como se hace para contrarrestar eso, y que queden bien alineados.
Estoy trabajando en un match ik/fk logre hacer que se pongan en posición pero quedan alineados como estaban y lo que quiero es realinearlos para que los controles queden bien orientados.
saludos
juako is offline   Responder Con Cita
Antiguo 11 oct 2006   #13
Nessito
Senior Member
 
Fecha de Ingreso: abril-2005
Ubicación: Madrid
Mensajes: 674
Predeterminado Re: Alienar en rotacion objetos

Un ejemplo:
Creamos una caja, en la vista top.
Rotamos la caja, digamos 30 grados en el eje Z.
Escalamos la caja, usando como sistema de coords.=View, sobre el eje X.
Ya tienes una caja con una matriz no ortogonal.
Comprobar con "$.transform" en el listener.

Ya sé que no es lo normal, y que estas cosas se deben evitar. Pero conste que digo "deben", nadie obliga.
__________________
Aquel que pregunta, es tonto un rato. Aquel que no pregunta, es tonto toda la vida.
Nessito is offline   Responder Con Cita
Antiguo 11 oct 2006   #14
promineo
reBorn
 
Avatar de promineo
 
Fecha de Ingreso: diciembre-2004
Ubicación: Tenerife
Mensajes: 2,949
Predeterminado Re: Alienar en rotacion objetos

Alinear objetos en orientacion es bastante sencillo, hace tiempo me tope con un problema que me llevo varios dias, alinear solo el punto de pivote en orientacion e un objeto a otro, telita...
__________________
PromineoStudios
Cocoe

Sin riesgos en la lucha, no hay gloria en la victoria
promineo is offline   Responder Con Cita
Antiguo 11 oct 2006   #15
HalfVector
H = E + L
 
Fecha de Ingreso: marzo-2004
Ubicación: Entre dos vectores
Mensajes: 877
Predeterminado Re: Alienar en rotacion objetos

No lo he dicho antes pero eliminar la escala de una matriz de transformación en MAX es muy sencillo ya que MAX nos da la escala codificada en un vector. Es tan simple como multiplicar la inversa de la escala por la diagonal principal de la matriz de transformación:

Código:
fn removeScale mat scale = (

	local invsx = 1.0/scale.x
	local invsy = 1.0/scale.y
	local invsz = 1.0/scale.z
	
	invScaleMat = scaleMatrix [invsx, invsy, invsz]
	
	return (invScaleMat * mat)
)
Y luego, modificamos la función que puse unos mensajes mas arriba para que la escala no afecte la operación:

Código:
fn alignOrientation objA objB axes:#{1,2,3} = (

	-- Eliminamos la escala de ambos objetos
	local matA = removeScale objA.transform objA.scale
	local matB = removeScale objB.transform objB.scale

	local x = matA.row1
	local y = matA.row2
	local z = matA.row3
	local w = matA.row4

	if axes.numberSet == 2 or axes.numberSet == 3 do (
		if axes[1] do x = matB.row1
		if axes[2] do y = matB.row2
		if axes[3] do z = matB.row3
	
		if axes.numberSet == 2 do (
			if axes[1] and axes[2] then (
				z = normalize (cross x y)
			)
			else if axes[1] and axes[3] then (
				y = normalize (cross z x)
			)
			else if axes[2] and axes[3] do (
				x = normalize (cross y z)
			)
		)
	)
	
	local mat = Matrix3 x y z w
	
	-- Volvemos a aplicar la escala
	mat = (scaleMatrix objA.scale) * mat
	
	objA.transform = mat
)
Pero evidentemente, si queremos alinear en dos o tres ejes y siempre dando por hecho que la matriz es ortogonal, lo mejor es utilizar el método que ha puesto Nessito o juako (aunque éste en concreto me imagino que se ciñe a controladores de rotación de tipo Euler, ¿no?).

Saludos.

Última edición por HalfVector fecha: 11 oct 2006 a las 10:22.
HalfVector is offline   Responder Con Cita
Respuesta

Etiquetas Identificativas
alienar, objetos, rotacion


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
Trucos y Tips sobre Blender Mars Attacks Infografía General 60 20 jun 2008 14:45
Ayuda para crear Objetos en Java 3D luquini13 Problemas con Programas 1 01 jun 2006 11:48
Vray y animación con objetos en movimiento sssjosue Render, Iluminación y Cámaras 1 15 mar 2006 06:28
canviar eje de rotacion en la animacion cuaresma Animación y Rigging 0 14 ene 2006 17:42
Manual 3dsMax 3dpoder 3DStudio Max 0 13 ago 2005 09:45

google adsense



La franja horaria es GMT. Ahora son las 21:05.


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.
Electricity Suppliers | Credit Cards | Auto Loans | Credit Cards | Image Hosting
Content Relevant URLs by vBSEO 3.2.0