Buenash! Quiero rescatar un viejo plataformas que tengo y le veo mucho potencial. Era en 2D simulando 3D con unos malabares increíbles, y quiero pasarlo a verdadero 3D, que me ahorrará muchos problemas. Ejemplo:
(http://screenshots.en.sftcdn.net/en/scrn/73000/73905/oddworld-abes-oddysee-1.jpg)
En ese caso el entorno es totalmente en 3D, pero la VISTA es IGUAL que lo que verías en la room. Es decir, hacer el juego en 3D, pero misma jugabilidad 2D, mis personajes serían sprites 2D igualmente, pero fondos 3D. Podría seguir usando la posición del ratón sobre la room? Es fundamental...
Como dice el manual, las funciones mouse_x y mouse_y desaparecen en el modo 3D, pero aun tienes las funciones display_mouse_get_x y display_mouse_get_y para obtener las coordenadas del cursor en el computador, pero tienes que restarle las coordenadas de la ventana del juego (window_get_x y window_get_y) y por último sumarle las posiciones de la cámara (pero como si la cámara fuera una vista) Esta es la parte mas "compleja" porque depende de la distancia a la que se encuentre la cámara del escenario.
Sería algo como esto:
[gml]
var xx, yy;
xx = display_mouse_get_x() - window_get_x() + objCamara.x - 320; //El 320 es un valor con el que tienes que jugar hasta allar la proporción correcta (o hacer un calculo para automatizarlo)
yy = display_mouse_get_x() - window_get_x() + objCamara.y - 240;
[/gml]
En este caso hice una suposición de que la proyección fuera algo como esto:
[gml]
//objCamara
d3d_set_projection(x,y,z,x,y,0,0,-1,0); //Es una proyeccion similar al 2D, el eje y es el eje vertical
[/gml]
Espero que me hayas captado al menos la idea.
Saludos. 8)
Muchas gracias! Acabo de inicializar el 3D y se ve hermoso, de aquí saldrá algo grande!
sí, tenía casi exactamente la misma cámara, excepto que mi vector de up era 0, 1, 0, obviamente un error (nunca entiendo en que sentido van las y's en el 3D de game maker así que voy por prueba y error).
EDITO: PERFECTO! Tenía problemas sin sentido, hasta que cambié donde tenía y por un 720-y, iba perfecto, pero todo estaba invertido, quité todos los 720... Y VA PERFECTO!! Es raro pero se solucionó todo! Muchas gracias, tema totalmente solucionado! Si esque las y's del 3D de game maker me confunden...
pd. como curiosidad, me va perfecto con:
x = display_mouse_get_x() - window_get_x() - 32*0;
y = display_mouse_get_y() - window_get_y() - 24*0;
tanto si la altura de la camara es 1000 (perfecta) como 2000, la precision es exacta... seguro que es necesario restar un numero?