Buenas a todos. Primero me presento ya que soy nuevo por aqui, mi nick es Azatoch y hace unos meses me pico la curiosidad de empezar un pequeño proyecto y aprender un poco del tema.
Paso a describir el problema, aunque por el titulo ya se intuye por donde va. Desde hace bastante tiempo estoy sufriendo de pixeles distorsionados, sobre todo en objetos que sean completamente cuadrados aunque imagino que pasara en todos aunque no se note, esto imagino que sera porque no estoy escalando bien el juego a la pantalla, el caso es que he probado ya mil maneras con la application_surface y no doy con la tecla.
Pongo ahora algunos datos sobre como esta distribuido el juego, tanto las habitaciones como el fondo tienen un tamaño de 768x432 con una view activa del mismo tamaño y el código que estoy usando ahora mismo es este:
display_set_gui_size(1280,720);
r=1;
if window_get_fullscreen()
{
if display_get_width()=1920 and display_get_height()=1080
{
r=0.40;
view_wport[0]=round(display_get_width()*r)
view_hport[0]=round(display_get_height()*r)
surface_resize(application_surface,round(display_get_width()*r),round(display_get_height()*r))
}
else
{
view_wport[0]=round(display_get_width()*r)
view_hport[0]=round(display_get_height()*r)
surface_resize(application_surface,round(display_get_width()),round(display_get_height()))
if keyboard_check_pressed(vk_enter)
{r+=0.02;}
if keyboard_check_pressed(vk_backspace)
{r-=0.02;}
}
}
El código esta escrito en un ataque de locura después de un mes atascado con este tema, asi que seguramente no tenga sentido, parece que funciona bien a 1080p pero en el resto de resoluciones se ven pixeles distorsionados, pongo dos imágenes para que lo veáis:
(http://i1083.photobucket.com/albums/j381/AzaToch/pix.png) (http://s1083.photobucket.com/user/AzaToch/media/pix.png.html)
(http://i1083.photobucket.com/albums/j381/AzaToch/pix2.png) (http://s1083.photobucket.com/user/AzaToch/media/pix2.png.html)
Como podéis ver en la primera imagen las "ventanas" que están señaladas no son perfectamente cuadradas, en realidad son todas una imagen de 2x2, pero algunas se ven alargadas y en la segunda imagen se puede ver un botón donde los bordes de arriba y de la izquierda son mas gruesos que el resto.
Por ultimo la opción de "interpolate colors between pixels" esta desactivada, me he leído tanto este foro como el de yoyo games, incluido los tech blog y de momento no saco nada, a ver si sabéis darme una pista o algo de hacia donde tirar para solucionar esto porque me estoy volviendo loco ya.
Un saludo y gracias.
Cita de: azatoch en Abril 20, 2015, 09:35:14 PM
a ver si sabéis darme una pista o algo de hacia donde tirar para solucionar esto porque me estoy volviendo loco ya.
Una pista:
Cita de: azatoch en Abril 20, 2015, 09:35:14 PM
parece que funciona bien a 1080p pero en el resto de resoluciones se ven pixeles distorsionados
1920/768 = 2.5
Cita de: azatoch en Abril 20, 2015, 09:35:14 PM
pero en el resto de resoluciones se ven pixeles distorsionados
Me parece que en algún lado leí que un usuario mencionaba que para lograr escalados sin distorciones, usaba factores de escalado de 1X, 1.5X, 2.0X 2.5X, etc. Creo también recordar que alguien mencionó que en algunas tarjetas gráficas esos factores de escalado funcionaban, pero que en otras, los factores tenían que ser 1.0X, 2.0X, 3.0X, etc. Repito, esto lo leí y no lo he confirmado, porque no trabajo con móviles y particularmente me gustan los juegos 2D en modo ventana.
en el código, el ELSE permite que la application surface se reescale a cualquier factor, y creo que este es el problema, pues sólo ciertos factores (como los que mencioné antes) son los que evitan que haya deformaciones, por ejemplo podría apostar a que un factor de 1.83X
se va a ver mal. Entonces, es cuestión de controlar el reescalado POR PASOS (o factores fijos) que no introduzcan deformaciones.
Esto quiere decir que inevitablemente, debido a la gran variedad de resoluciones de dispositivos móviles, y dependiendo del tamaño nativo de las habitaciones/vistas/viewport
es muy probable que no pueda haber un modo fullscreen para TODAS las resoluciones existentes sin que aparezcan deformaciones, y que en ciertos dispositivos, para lograr un reescalado "perfecto", la application surface no podrá ocupar toda la pantalla, sino que se tendrán que mostrar bordes o franjas negras.
Gracias por responder. El juego de momento tengo pensado que sea solo para windows, asi que de móviles me olvido de momento, a ver si consigo algo con la información que me has puesto, de momento he hecho una prueba rápida cambiando el 0.40 por 2.5 en el if y pasa a verse mal, asi que imagino que algo se me escapa aun. Voy a seguir probando e iré poniendo aqui lo que consigo.