Agosto 09, 2015, 12:29:59 AM Ultima modificación: Agosto 09, 2015, 02:31:26 AM por DarkKRuleR
Buenash! Pues quiero simular un draw_sprite_ext para el 3D, siendo la cámara mirando desde arriba, del eje z positivo hacia el negativo, y hacer una primitiva cuadrada con el sprite. Pero quiero que simule lo anterior. O sea, que tenga en cuenta image_xscale e image_yscale, y el ORIGEN del sprite. Que si pongo la cruceta en un lado, al cambiar el image_xscale e yscale, mueva los vértices. He hecho esto:

// sc3DDrawSprite(txText, vrX, vrY, vrZ, vrWidth, vrHeight, vrXScale, vrYScale, vrAngle, vrXO, vrYO);
var txText, vrX, vrY, vrZ, vrWidth, vrheight, vrXScale, vrYScale, vrAngle;
txText = argument0;
vrX = argument1;
vrY = argument2;
vrZ = argument3;
vrWidth = argument4; // tamaño real del sprite en el juego
vrHeight = argument5;
vrXScale = argument6;
vrYScale = argument7;
vrAngle = argument8;
vrXO = argument9; // Respecto a width y height, NO al tamaño del sprite - potencia de 2
vrYO = argument10;

d3d_transform_set_identity();
d3d_transform_add_rotation_z(vrAngle);
d3d_transform_add_translation(vrX, vrY, vrZ);

d3d_primitive_begin_texture(pr_trianglestrip, txText);
    if (image_xscale == 1)  d3d_vertex_texture(-vrXO*vrXScale,             +(vrHeight-vrYO)*vrYScale,     0, 0, 1); // UL
                            d3d_vertex_texture(-vrXO*vrXScale,             -vrYO*vrYScale,                0, 0, 0); // DL
    if (image_xscale == -1) d3d_vertex_texture(-vrXO*vrXScale,             +(vrHeight-vrYO)*vrYScale,     0, 0, 1); // UL
                            d3d_vertex_texture(+(vrWidth-vrXO)*vrXScale,   +(vrHeight-vrYO)*vrYScale,     0, 1, 1); // UR
                            d3d_vertex_texture(+(vrWidth-vrXO)*vrXScale,   -vrYO*vrYScale,                0, 1, 0); // DR
d3d_primitive_end();

d3d_transform_set_identity();


Como os podéis fijar... en cierto modo he intentado que tenga en cuenta el origen del sprite, pero me ha salido mal. Es decir, los vértices no se mueven del sitio. He logrado que la ROTACIÓN respecto al eje z tenga en cuenta este origen, pero no el xscale y el yscale.

Ejemplo: si tengo un sprite 100x100, y el origen está en 10, 50, al hacer image_xscale = -1, los dos vértices de la izquierda se moverán 20 píxeles a la derecha, y los dos de la derecha 180 hacia la izquierda (90x2), se hará el MIRROR respecto a eso. Es lo que no he logrado. También debe aceptar decimales, ejemplo image_xscale = 0.6.

El problema del que he puesto es que, si reduzco la xscale de 1 a 0 GRADUALMENTE, se ve cómo se encoge hacia el centro del sprite, y no hacia el centro de coordenadas (cruceta) elegida, y eso lo estropea todo

Alguien sabría cómo? T_T me tiene frito

EDITO: podéis cerrar o borrar, ya lo he resuelto. He pegado la versión "final". Con el culling(true) sí funciona para image_xscale = -1, pero se corta, ya lo resolveré