13/09/2012 Sobre las operaciones necesarias cuando se cambia de tamaño la ventana de OpenGL Dr. Luis Gerardo de la Fraga El aspecto es igual al número de pixels por unidad en la coordenada 'x' entre el número de pixels por unidad en la coordenada 'y' l ux = ----------- xmax - xmin n uy = ----------- ymax - ymin l es el largo de la ventana, en pixels, y n es el ancho de la ventana también en pixels. El aspecto (a) será entonces: ux a = ----- uy (ymax - ymin) l a = ---------------- (xmax - xmin) n Entonces, tanto la diferencia en las coordenadas en cada eje, como en número de pixels en cada eje, deben ser iguales para mantener el aspecto igual a 1 (considerando que los pixels con cuadrados). Esto se logra con una ventana cuadrada ------ | | | | | | ------ con medidas xmin, xmax, ymin, ymax y debe mantenerse que el aspecto sea igual a 1. Si se cambia el tamaño de la ventana se tienen dos casos: 1) Cuando el largo de la ventana es más grande que su ancho (l>n) 2) Cuando el ancho de la ventana es más grande que su larga (n>=l) Para el caso (1) ( largo > ancho ), el espacio de trabajo debe ajustarse para que siga manteniendo el mismo aspecto de los objetos, esto es, se tienen que calcular unas nuevas xmax' y xmin' para que el aspecto siga teniendo valor de 1 ------------- | |.....| | | |.....| | | |.....| | ------------- xmin' xmin xmax xmax' x (ymax - ymin) l' a = ----------------- = 1 (xmax' - xmin') n (ymax - ymin) l' xmax' - xmin' = ------------------- n Esto es el tamaño, en unidades del espacio de trabajo, que tiene la ventana en la coordenada x. Para calcular xmax' y xmin' los referenciamos con respecto al centro de la ventana original: x = (xmax-xmin)/2 x es el centro de la ventana original: xmax' = x + xu/2 xmin' = x - xu/2 (ymax - ymin) l' donde xu = ------------------- n Si x es cero, se simplifica a xmax' = xu/2 xmin' = -xu/2 y si también son simétricas las coordenadas 'y' (ymin = -ymax) se tiene xu = 2 ymax ( l' / n ) por lo que xmax' = ymax ( l' / n ) xmin' = -ymax ( l' / n )