Os paso un ejemplo en 3D de cube mapping, donde creo un cubo 3D (por ahora sin techo ni suelo) y podéis, con el ratón, mirar en todas direcciones.
La room es 500x500. Zoom inicia en 2.
Fijáos en el multiplicador. A la hora de definir la proyección multiplico por "zoom" las coordenadas del personaje, que inicialmente son 250, 250.
Dibujo los muros en x=0, 500, y=0, 500. El personaje, por lo tanto, queda en el centro. Si véis la room todo esto es perfecto.
Entonces, iniciando con zoom = 2, el personaje pasa a 500,500, pero los muros se dibujan en 0, 0, 1000, 1000. Podéis aumentar mucho más zoom. Si os fijáis el personaje siempre queda en el centro de la sala, pero cada vez hay más distancia entre él y las paredes. O sea, debería ver las paredes cada vez más lejos.
PERO NO!
Las paredes nunca cambian, es absurdo! A ver quién encuentra qué falla, porque estoy volviéndome loco!! Por lógica, al aumentar el zoom, el personaje siempre debería quedar en el centro de la sala, pero ésta hacerse cada vez más grande. Quiero verla grande, si os fijáis al ejecutar hace demasiado zoom en ellas, pero no funciona!
PD: No sé si sería más bonito visualmente hacer esto en 3D o en 2D, pero en 2D tenía problemas a la hora de alzar la vista, no sabía cómo, así es más fácil, aunque temo que las cosas se deformen
Edit: he logrado alejarlo usando d3d_set_projection_ext en su lugar, y aumentando el ángulo "field of view", se ve más lejos pero el zoom deja de funcionar, no le veo sentido a que aleje los muros (porque se alejan, no veo razón para que eso falle) y no se dibujen más lejos, así que no podría considerarlo resuelto, quiero saber exactamente qué falla
Así es, el efecto zoom se puede lograr fácilmente cambiando el "field of view", sin embargo hay que evitar sobrepasar un ángulo de 45 grados para no deformar la escena, lo mejor es usar un ángulo cercano a 40 grados.
En tu ejemplo no se aprecia el zoom porque el cambio de tamaño no afecta los ángulos, si se escala un figura geométrica conserva todas las medidas y propiedades de sus ángulos, por lo tanto el campo de visión sigue abarcando el mismo porcentaje de área en el cubo.
Lo que se debe hacer es cambiar el ángulo de visión y dejar el cubo con el mismo tamaño. El campo de visión se puede relacionar con la variable zoom de esta forma:
[gml]fov = 40/zoom;[/gml]
a mayor zoom, menor field of view.
AAhh, gracias! Creo que lo entiendo! Aunque al aumentar el zoom dibujo los muros el doble de lejos, a su vez los dibujo el doble de grandes, y por eso no veo cambio! Lo que debería hacer es hacer que el zoom sea el doble respecto a los muros, si el personaje hago x2, los muros x4 por ejemplo, así los veré lejos. Si multiplico por el mismo valor el personaje y los muros, al hacerlos X veces más lejos, pero X más grandes... es lógica uqe no cambie. Estoy en lo correcto?
El caso de aumentar el fov es cierto pero... no es exactamente lo que quiero. Eso significaría "alejar la cámara", lo que quiero es mantenerlo todo acorde. Trabajar en la room 500x500, y que eso se dibuje correctamente. No sé hasta qué punto ambas soluciones serían correctas. Ahora que lo estoy pensando lo más lógico es aumentar el fov, y así mantengo las proporciones... vale, en mi cabeza estaba todo revuelto pero ahora lo entiendo, confirmadme si me equivoco, porque es un lío.
EDIT: el fov aumentado funciona perfectamente :D