Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda Matemática Sobre D3dxvec3transformcoord

Iniciado por Haddd, 04 de Mayo de 2004, 10:37:34 PM

« anterior - próximo »

Haddd

 Qué diferencia hay entre usar

D3DXVec3Transform

y

D3DXVec3TransformCoord


La primera devulve un vector4 y la segunda un vector3, pero no entiendo lo siguiente de su explicación:
CitarThis function transforms the vector, pV (x, y, z, 1), by the matrix, pM, projecting the result back into w=1.

Qué es exactamente esto de que proyecta el resultado en w=1?

Schaffer

 Parece que multiplica pV por pM y luego multiplica cada coordenada por 1/w, asi puedes asumir que w=1.

Supongo que por eso el sufijo Coord de la funcion, porque para coordenadas querras los valores con w=1.

Igual ya has encontrado la solucion por ahi, pero por si acaso espero que te sirva.

Thenend

 Haddd, la respuesta a lo que preguntas puede ser una explicación muy larga. Busca en el google, coordenadas homogeneas o notación homogenea. Es un poco complicado de explicar pero básicamente sirve para operar en el espacio con puntos (coordenadas) y vectores (que no tienen posición, solo dirección). Al usar vectores de 4 elementos y matrices de 4x4 solucionas las cuestiones matemáticas referentes a la translación (que afecta a puntos pero no a vectores). El caso es que, después de hacer las transformaciones, la componente homogenea debe de ser 1 para que todas las coordenadas estén en el mismo espacio triedimensional por lo que como dice Shaffer, las coordenadas son multiplicadas por 1/w. Vamos que si usas D3DXVec3Transform te da el vector de 4 elementos con su coordenada homogenea que puede ser o no 1 pero con D3DXVec3TransformCoord te da las coordenadas tal y como quedan en el espacio tridimensional w=1. (Hay madre, que lio esto de pensar en 4D)

Dice de proyectar en w=1 porque de verdad proyecta un espacio tetradimensional en un espacio tridimensional. Imaginate que tienes un objeto 3D y coges todos sus vertices y les pones la coordenada Z a 1. Estarán todos en el mismo plano y podras representarlos a partir de ese momento en un plano bidimensional con las coordenadas X e Y. Eso es una proyección y funciona también desde las 4D a las 3D como ves... No se si me explico   :blink:

Bueno, si no necesitas un vector de 4 dimensiones mejor usa D3DXVec3TransformCoord. Lo siento si es dificil entenderme  (nooo)

PD. Cuando hablo de vectores me refiero a los vectores matemáticos de verdad no a los de DirectX, que tembién microsoft no ayuda mucho confundiendo terminos como vector, punto y coordenada  (grrr)  

_Grey

 Añadiendome a la discusion y quiza, complicandola algo mas.

Creo, y si corregirme por favor, que las NORMALES tienen la coordenada w=0, para que cuando la transformes por la misma matriz con la que transformas los vertices del objeto no les afecte el valor de traslacion......

Saludos.

Haddd

 Muchas gracias. Lo he entendido, lo habeis explicado muy bien!

Thenend

 
CitarCreo, y si corregirme por favor, que las NORMALES tienen la coordenada w=0, para que cuando la transformes por la misma matriz con la que transformas los vertices del objeto no les afecte el valor de traslacion......

Claro, porque las normales son vectores y no puntos, de ahi lo del postdata. DirectX llama vectores a todo pero en realidad (x,y,z,1) es un punto y (x,y,z,0) es un vector y por lo tanto se puede rotar, escalar o lo que quieras pero no se traslada en una transformación.







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.