Como esta la comunidad, mi duda es como posicionar un objeto en la posicion del mouse que esta en pantalla lo intente con display_mouse_x y va mal no se como calcular o si hay una funcion para esto, si mas rapido responden me harian un favor ;)
http://www.comunidadgm.org/preguntas-y-respuestas/coordenadas-3d-del-mouse/ (http://www.comunidadgm.org/preguntas-y-respuestas/coordenadas-3d-del-mouse/) ahí hay un ejemplo, pero creo que es un poco complicado.
Da más información sobre tu juego, ¿sólo quieres mover los objetos en un plano?, ¿la cámara gira?, con la infrormación podemos encontrar el mejor sistema para tu juego.
Disculpa que no defini el juego bien, el juego es uno isometrico en el cual quiero hacerlo tipo commandos pero en 3D pero al colocar la coordenada del mouse se mueve invertidamente y solo toma las coordenadas dentro de una cuadricula no entiendo, arrastra el mouse a otro lugar y lo toma en 2d pero en otra direccion ademas aparte en otro lugar que no es donde estoy.
La camara la hice rotativa ya que es un juego 3D y se nesesita ver diferentes sitios en diferentes direcciones y no quiero quitar la inspiracion de busqueda asi que no hallo como calcular las coordenadas primero el mouse_x/y es invertido y no se si se puede calcular con el cos, sin xD yo tampoco se como explicarme pero si me entendiste me puedes ayudar me ayudaria mucho :)
Podemos empezar con elgir cómo se orienta la cámara. Se usan dos métodos:
1. Indicar la posición (xfrom,yfrom,zfrom) y el punto al que mira (xto,yto,zto).
2. Indicar la posición y dos ángulos; uno de los ángulos es la dirección de la cámara en el plano horizontal y el otro ángulo es la inclinación en un plano vertical. Esos ángulos tienen muchos nombres, pero podemos usar los de la imagen (pitch y jaw). De todas formas se debe calcular el punto (xto,yto,zto) para usarlo en la función de proyección.
(https://support.pix4d.com/hc/article_attachments/115006921423/yaw_pitch_roll.png)
Después se debe encontrar un sistema de coordenadas locales de la cámara, luego convertir las coordenadas del mouse en un vector en el espacio de la cámara, ese vector se debe convertir a un vector en coordenadas de la escena y por último proyectar el vector en los objetos o en el piso. Agregaré esa información en futuros mensajes.
Bien gracias Clamud por responder, no entendi lo de las axis pero por las imagenes veo que en un ejemplo solo tengo que calcular (x) (y) con length_dir o algo asi y me saldria como en 2D pero gracias a esa funcion la haria rotativa con la camara aparte de la z que tendria que ser una projeccion de altura con la altura del mouse y vendria luego con una calculacion sumando el punto (x) y el punto (y) y un (z) con la funcion min comparo quien esta mas cerca del mouse y a quien fue el que seleccione :), pero :-[, aun no logro entender como acomodar el mouse_x y el mouse_y invertido no entiendo si son las mismas coordenadas en 2D o me equivoco y se invierten las direcciones x,y ¿¿??, gracias por contestar, si me respondes esto me harias un gran favor pues si no logro entender a alguien le servira
No has elegido el método para posicionar la cámara. Mañana continuaré con la explicación, creo que primero necesito unos dibujos.
Deberías subir una captura de tu juego, para ver mejor lo que quieres lograr.
Si se elige el primer método, primero se definen los puntos from y to. A partir de esos puntos se calcula un sistema de coordenadas local a la cámara.
(http://i.imgur.com/q6foewY.png)
Z está alineado a la línea de visión. Pasa por el centro del cuadro de proyección (en ese cuadro se proyecta todo lo que vemos en la ventana de juego). Los ejes X,Y están alineados a los ejes X,Y de la ventana para simplificar algunos cálculos.
Los ejes locales son vectores unitarios que tienen componentes en el sistema de coordenadas global.
Así se calcula Z
[gml]
//distancia de la posición de la cámara al punto que mira
d = point_distance_3d( xfrom,yfrom,zfrom, xto,yto,zto );
Zx = (xto - xfrom)/d; //componente x del eje Z local
Zy = (yto - yfrom)/d; //componente y del eje Z local
Zz = (zto - zfrom)/d; //componente z del eje Z local
[/gml]
El ejex X local siempre es horizontal, su dirección es la de Z local menos 90 grados
[gml]
a = point_direction( 0,0, Zx,Zy ); //direccion
Xx = lengthdir_x( 1, a-90 ); //componente x del eje X local
Xy = lengthdir_y( 1, a-90 ); //componente y del eje X local
Xz = 0; //componente z del eje X local
[/gml]
El eje Y local es perpendicular a X local y Z local, por lo tanto se puede calcular con el producto cruz. Normalmente el producto cruz sigue la regla de la mano derecha, sin embargo, el sistema de coordenadas de GameMaker está invertido respecto al sistema que se usa en matemáticas, entonces el producto punto se puede entender con la "regla de la mano izquierda" (Si el vector A apunta en dirección del dedo índice extendido y el vector B apunta en la dirección en que se doblan los dedos, el producto AxB apunta en dirección del pulgar; el vector A debe ser X y el vector B debe ser Z).
[gml]
Yx = Xy*Zz - Xz*Zy; //componente x del eje Y local
Yy = Xz*Zx - Xx*Zz; //componente y del eje Y local
Yz = Xx*Zy - Xy*Zx; //componente z del eje Y local
[/gml]