Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Programación Gráfica y el Escalamiento

–Manejo de distancias y longitudes en 3D–

Escalamiento es cambiar la longitud de un vector. En esta siguiente entrada sobre la serie de programación grafica con lapiz y papel vamos a ver como los gráficos vectoriales pueden cambiar de tamaño. Pero antes tenemos que entender el concepto de distancia en el espacio 3D. Lo que seguro habrán escuchado en alguna clase de física elemental fue que un vector tiene magnitud, dirección y sentido. La magnitud se refiere a la longitud desde su base en el origen hasta la punta de flecha. No en todos los vectores la magnitud tiene relación con la longitud. Por ejemplo en los vectores de fuerza e iluminación el significado de su magnitud no tiene nada que ver con la longitud. Pero ahora que trabajamos con figuras si lo será.

De seguro todos ustedes han escuchado del Teorema de Pitágoras, ese que dice el cuadrado de la hipotenusa es igual a la suma del cuadrado de los dos catetos.. De forma breve se discutió en la entrada sobre las rotaciones, Para medir la magnitud de un vector basta con elevar al cuadrado (multiplicar por si mismas) cada una de las componentes del vector y luego sumarlas. A la suma se le saca la raiz cuadrada y el resultado es la magnitud del vector. De seguro muchos de ustedes ya sabian esto. Lo que muchos no saben es que esta técnica funciona para espacios de cualquier dimensión, tanto si manejamos una, dos o tres dimensiones. En el caso de que queramos medir la distancia entre dos puntos en el espacio solo hay que restar ambos puntos para obtener las componentes del vector. Esto en realidad hace una traslación al origen.

Ahora bien, supongamos que tenemos un segmento de linea en el espacio y queremos multiplicarlo por un factor S para cambiar su longitud. Para lograrlo basta multiplicar cada una de sus componentes por S. En la primera imagen se muestra que esto es perfectamente válido en el sentido matemático. Para los que quieren programalo de una vez las fórmulas son Nueva_X = Escala * Vieja_X y Nueva_Y = Escala * Vieja_Y . Sin embargo, el escalamiento vectorial aplicado a la programación gráfica no es tan sencillo como esto.

Como recordarán de la nota sobre la traslación. Los vértices de la imagen están asociados a un vector que los encadena con el origen cuyos componentes corresponden con sus coordenadas. Cuando hacemos un escalamiento lo que cambiamos de tamaño son esos vectores y no las aristas. Esto se debe a que el escalamiento y en la siguiente entrada verán que también la rotación dependen del origen. Escalar sin tomar en cuenta la posición relativa al origen puede hacer que las figuras cambien de lugar y no solo de tamaño. En la segunda imagen se ve la misma ‘nave’ de la entrada anterior escalada por el mismo factor de 2. La razón por la que se mueven de su lugar es por su posición con respecto al origen. Ahora lo que tenemos que averiguar es donde demonios tenemos que posicionar la figura para que se escale de manera simétrica y permanezca en su lugar. Si el factor se hubiera encontrado entre 0 y 1 la imagen no solo se hubiera reducido sino tambien acercado al origen. Al ser mayor que uno, la imagen aumenta sus medidas y se aleja del origen.

Por cierto, esto no es un error, a veces queremos escalar figuras vectoriales de manera no uniforme, por ejemplo estirar en una sola dirección un cilindro para simular una prensa mecánica o elevar el suelo en un juego de plataformas. O si queremos programar un editor gráfico. Pero como en este caso queremos escalar una figura de manera uniforme y que no se mueva lo que debemos hacer es que su centro coincida con el origen del sistema de coordenadas y luego escalar por el factor deseado. Hay cierto caso en el que es necesario tomar un factor de un medio pero eso lo veremos cuando manejemos el concepto del Puerto de Vista mas adelante.

La escala en programación gráfica tiene muchos usos además de cambiar las cosas de tamaño. Se usa por ejemplo para ajustar cosas a una cierta medida. También se usa para compensar las diferencias entre las proporciones de ancho y altura de los monitores (conocido como aspect-ratio) y para ajustarse a ventanas de cualquier tamaño cuando no trabajamos a pantalla completa. La verdad es que del escalamiento hay mas bien poco que decir.

Ya nada mas falta escalar esta entrada para que compense la longitud. La verdad era que pensaba abordar el tema de la rotación y escala en una misma nota pero era demasiado material para una sola nota y muy poco para dos así que voy a sacar ambas notas de manera casi simultanea. Y ya para terminar les recuerdo que estas entradas no solo le van a servir a programadores que quieran hacer su propio motor gráfico sino también aquellos que ya disponen de uno pero no saben como hacerlos funcionar. La verdad es que da pena ajena ver como algunos grupos no son capaces de hacer trabajar uno de esos sistema de manera decente ni siquiera después de esa exhaustiva capacitación de 3 meses que reciben los developers al entrar a trabajar a esas reputadas empresas de videojuegos que andan (o andaban) por ahí. Me pregunto si será acaso que estar titulado de lo que sea los deja sobrecapacitados para desempeñar esa clase de trabajos tan especializados.

octubre 20, 2011 - Posted by | Uncategorized | , ,

1 comentario »

  1. Bueno bueno

    Comentario por Gorgornold | enero 19, 2012 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: