Febrero 28, 2016, 01:15:26 AM Ultima modificación: Febrero 28, 2016, 01:48:41 AM por DarkKRuleR
Buenas! Pues veréis, yo tengo un objeto con coordenadas x, y, vrZ. Originalmente, tras hacer ciertas transformaciones desde el centro del objeto, es decir, el objeto NO SE MUEVE, hago esto:

d3d_transform_add_translation( x, y, vrZ );

Es decir, dibujo el objeto en el centro de coordenadas, hago transformaciones, y luego lo devuelvo a sus coordenadas originales. Entonces cambié esa línea por ésta:

d3d_transform_add_translation( x - obUnk.x, y - obUnk.y, vrZ - obUnk.vrZ );
d3d_transform_add_rotation_z( -obUnk.vrAngAgarre );
d3d_transform_add_rotation_y( obCtrl.vrEscalaAng );
d3d_transform_add_rotation_z( obUnk.vrAngAgarre )
d3d_transform_add_translation( obUnk.x, obUnk.y, obUnk.vrZ );


Como véis es casi lo mismo, sólo que hago ciertas rotaciones entre medio... eso no devuelve el objeto a su posición real actual, sino que lo mueve un poco según las rotaciones.

El problema es, que tengo un script que calcula su depth, que utiliza su x, y, vrZ. Antes iba bien, pero AHORA que sus coordenadas REALES son diferentes a las coordenadas dónde se dibuja (debido a que en el segundo caso le hago rotaciones cuando el objeto NO ESTÁ en el 0,0,0, lo cual lo desplaza), funciona mal. Necesito SABER las coordenadas exactas del objeto. Es decir, las resultantes de aplicar esas transformaciones. Debo saber DÓNDE está dibujando el objeto.

Antes el objeto se dibujaba en 0,0,0, se hacían rotaciones, y luego lo trasladaba a x,y,vrZ, así que el objeto estaba situado en la misma posición en la cual se dibujaba, TODO CORRECTO. Ahora, antes del final, hago una rotación al objeto mientras éste está ALEJADO de x,y,z, por lo tanto la rotación LO DESPLAZA, así que aunque lo envíe de nuevo a x,y,vrZ, se dibuja en una posición DISTINTA a su posición real. El problema es saber en qué posición está, es decir, saber la x,y,vrZ después de aplicar las transformaciones del segundo código.

Es muy fácil, sólo debes usar esto después de establecer las transformaciones
[gml]
coords = d3d_transform_vertex(x,y,vrZ);
[/gml]
coords se convierte en un vector con las coordenadas transformadas.

Gracias! Funciona genial. Qué función más hermosa, casi tanto como point_direction T_T

Al principio me rallé, pero me di cuenta que tenía que hacer:

vrCoord = d3d_transform_vertex( 0, 0, 0 );

Ya que las x,y,vrZ están incluidas en la propia translación, y mis dibujos están centrados en 0,0,0. Qué cabeza xD Pues tema resuelto