Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Haddd en 04 de Mayo de 2004, 10:37:34 PM

Título: Duda Matemática Sobre D3dxvec3transformcoord
Publicado por: Haddd en 04 de Mayo de 2004, 10:37:34 PM
 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?
Título: Duda Matemática Sobre D3dxvec3transformcoord
Publicado por: Schaffer en 05 de Mayo de 2004, 02:34:05 PM
 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.
Título: Duda Matemática Sobre D3dxvec3transformcoord
Publicado por: Thenend en 05 de Mayo de 2004, 05:27:53 PM
 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)  
Título: Duda Matemática Sobre D3dxvec3transformcoord
Publicado por: _Grey en 05 de Mayo de 2004, 08:24:12 PM
 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.
Título: Duda Matemática Sobre D3dxvec3transformcoord
Publicado por: Haddd en 05 de Mayo de 2004, 08:54:00 PM
 Muchas gracias. Lo he entendido, lo habeis explicado muy bien!
Título: Duda Matemática Sobre D3dxvec3transformcoord
Publicado por: Thenend en 05 de Mayo de 2004, 09:00:01 PM
 
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.