Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: romon_28 en Enero 31, 2014, 02:26:26 AM

Título: Rotacion en 3D
Publicado por: romon_28 en Enero 31, 2014, 02:26:26 AM
Tengo una esfera y quiero "girarlo" con el museo. Como el mouse solo se mueve en la coordenada X e Y lo que quiero hacer es rotal el plante solo en 2 coordenadas para ello use este código:


if mouse_check_button(mb_left)
{
RotX=x-mouse_x;
RotY=y-mouse_y;
}

draw_set_color(c_white);
d3d_transform_set_identity();

d3d_transform_add_rotation_x(RotX);
d3d_transform_add_rotation_x(RotY);

d3d_transform_add_translation(x,y,z);

d3d_draw_ellipsoid(-100,-100,-100,100,100,100, background_get_texture(background0) ,1,1,30);

d3d_transform_set_identity();


Esto no me da el resultado que quiero.

Se entiende lo que quiero hacer y lo que esta saliendo mal?
Título: Re:Rotacion en 3D
Publicado por: Haseo en Enero 31, 2014, 02:36:53 AM
Si quieres que gire como la tierra solo debes girarlo sobre el eje Z, y si quieres que gire segun la posicion del mouse, solo de deja asi: Rotx=mouse_x, Roty=mouse_y, tambien puedes jugar con las variables: Rotz=mouse_x o Rotz=mouse_y.

espero te sirva de algo.
Título: Re:Rotacion en 3D
Publicado por: romon_28 en Enero 31, 2014, 03:49:27 AM
Gracias por la respuesta pero no es lo que busco.

Supongamos que tengo una figura cualquiera y quiero rotarla en X 90º y en Y otros 90º
ahora quiero que en vace al modelo rotado se vuelva a rotar sin alterar la previa rotación del modelo
En la imagen que subí muestra gráficamente lo que quiero hacer. [Espero que se entienda  :o]
Título: Re:Rotacion en 3D
Publicado por: DarkKRuleR en Enero 31, 2014, 03:29:05 PM
[gml] d3d_transform_add_rotation_x(RotX);
d3d_transform_add_rotation_x(RotY)[/gml]

Supongo que estará mal puesto, ambos rotas sobre x xDDD el segundo debería ser sobre y o sobre z.

[gml]if mouse_check_button(mb_left)
{
RotX=x-mouse_x;
RotY=y-mouse_y;
}

[/gml]

Primero, RotX y RotY son creadas en Create, no? Segundo, por qué haces x-mouse_x? Has probado...

[gml]RotX += mouse_x - previous_mouse_x;
RotY += mouse_y-previous_mouse_y;[/gml]

la idea es aumentar los ángulos respecto al anterior, si antes el ratón estaba en mouse_x = 50, y ahora en 70, pues rota. Deberás crear las variables previous_mouse para cada una e irlas actualizando (por ejemplo, asignarles las coordenadas del ratón al final del evento Draw, antes de usarlas en esta fórmula para rotar)
Título: Re:Rotacion en 3D
Publicado por: romon_28 en Febrero 15, 2014, 03:21:25 PM
Esto es lo que he logrado.. es lo que necesitaba pero no del todo.
He creado una lista que a medida que el juego trascurre se volveria cada vez mas y mas grande.

¿Como puedo hacer para reducir el proceso?