jueves, 23 de mayo de 2013
jueves, 9 de mayo de 2013
RELLENO DE POLIGONOS
INVESTIGAR:
Como se agregan los rellenos de poligonos en Opengl
Es un método manejado por OpenGl que es de tal uso para
rellenar de color los polígonos que se estén realizando en el ámbito de la
graficacion.
Antes que nada se especifica haciendo uso de la función
glShadeModel. Si el parámetro es GL_FLAT, ogl rellenará los polígonos con
el color activo en el momento que se definió el último parámetro; si
es GL_SMOOTH, ogl rellenará el polígono interpolando los colores activos
en la definición de cada vértice.
Este código es un ejemplo de GL_FLAT:
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f,
0.0f); // activamos el color rojo
glVertex3f(-1.0f, 0.0f,
0.0f);
glColor3f(0.0f, 1.0f,
0.0f); // activamos el color verde
glVertex3f(1.0f, 0.0f, 0.0f);
glColor3f(0.0f, 0.0f,
1.0f); // activamos el color azul
glVertex3f(0.0f,
1.0f, 0.0f);
glEnd();
Ejemplo
martes, 7 de mayo de 2013
TECNICAS DE SOMBREADO CLASICAS Y AVANZADAS
CLASICAS: ILUMINACACION LOCAL.
Son las luces que no son extensas, como las reales, sino puntuales. Se relacionan con los obejtos aislados sin tener en cuenta la interaccion entre ellos.
Las insuficiencias de los metodos de iluminacion local se han superado en pare por medio de sistemas de iluminacion global que permiten tomar en cuenta la iteraccion entre los objetos. las dos tecnicas prin cipales son el trazado de rayos y la rediosidad.
Son las luces que no son extensas, como las reales, sino puntuales. Se relacionan con los obejtos aislados sin tener en cuenta la interaccion entre ellos.
Las insuficiencias de los metodos de iluminacion local se han superado en pare por medio de sistemas de iluminacion global que permiten tomar en cuenta la iteraccion entre los objetos. las dos tecnicas prin cipales son el trazado de rayos y la rediosidad.
- Calculo de Iluminacion por Vertices:
Se necesita calcular el vector normal asociado. Cuando se tiene la normal calculada se tiene que normalizar, dividir ese vector por su propio modulo para que sea unitario
OpenGL: glEnable(GL_NORMALIZE);
Para definir normales en openGL se utiliza la opcion glNormal(x,y,z).
- Posterior Relleno de Trinagulos
se realizan varias fases de procesamiento por pixel. Comprobar si cada nuevo pixel es visible o no. Interpolacion lineal del color para el nuevo pixel. Si exite una textura definida o transparencia, efectuar la modificacion de color correspondiente. Se trata de la ultima fase, en ocasiones la mas costosa, del proceso, por lo que es la primera que suele integrar en el hardware grafico.
- Renderizado en Tiempo Real
Los objetos deben ser des compuestos en poligonos. Estos poligonos seran descompuestos a su vez en trinagulos. Cada triangulo sera proyectado sobre la ventana y rellenado con los colores adecuados para reflejar los efectos de la iluminacion, texturas, etc. Una vez generado los triangulos, comienza una segunda fase de calcular realizados para cada pixel cubierto por los triangulos.
REALISTAS: ILUMINCACION GLOBAL
Son secillos y rapidos pero proporcionan imagenenes muy simples, que no representen el modo en que la luz ilumina los objetos y los espacios. Los metodos principales que existen son el ray tracing y el radiosity.
- Trazado de Rayos
Computa la interaccion de la luz desde un punto de vista determinado y es adecuado para superficies reflectantes. Puede utilizarse como propiedad especifica de un determinado material.
- Radiosidad
Esta basado en principios generales. En el estado inicial la escena consta de dos tipos de objetos que emiten luz y objeto que reciben luz. A partir de ahi se computa la luz que recibe cada objeto o, en una aproximacion mas exacta, cada parte de un objeto, segun una subdivision cuya densidad precisarse en sucesivas aproximaciones.
- Calculos de Iluminacion por Pixel
Puede ser elaborada en hardware de graficos como un proceso de post-rasterizacion por medio de un programa de shader. Frecuentemente necesitan datos del VS, llegando incluso a veces a ser conducidos por este.
- Alto Acabado
Un calculo para todo el polígono Se obtiene una intensidad que se aplica a un conjunto de puntos de un objeto. Se acelera el proceso de síntesis El polígono representa una superficie plana real del objeto que se modela y no es una aproximación de un objeto curvo.
SOMBREADO CONSTANTE O PLANO
Se obtiene una intensidad que se aplica a un conjunto de puntos de un objeto.
- Aceleramos el proceso de sintesis
- Correcto si se verifica
- Fuente de luz en el infinito
- Observador en el infinito.
- CALCULO
Para cada cara visible, se elige un punto de la cara P, por ejemplo:
- Un vertice
- Una combinacion convexa de los vertices de la cara P1
- Se calculan los valores unitarios necesarios en P
- A todos los pixeles correspondientes a esta cara se les asigna este color/iluminacion
- No hay gradiente de iluminacion en una cara
- No hay problema en obtener P en mundo real.
INTERPOLACION DE INTENSIDADES (GOURAUD)
El calculo de la iluminacion se hace en mundo real. La interpolacion bilineal se hace en coordenadas de pantalla (a partir de iluminacion de vertices). Hay que normalizar (hacer UNITARIOS) los vectores normales a los vertices. No se aplica el filtro a los vertices.
Para todos los vertices de las caras visibles.
- Se calcula la normal (UNITARIA) asociada al vertice como promedio de las normales (UNITARIAS) de las caras que contienen el vertice (incluidas las caras ocultas).
- Se calcula la ilumincacion (color) asociasa al vertice, usando este normal. Iluminacion asociada a pixel/punto de la cara como interpolacion bilineal de la iluminaciones de los vertices:
- Cara ABC
- Interseccion de scan con AB y AC: P1 y P2
- Punto/pixel P, entre P! y P2
- Iluminaciones en P1, P2 como interpolacion de iluminaciones en A, B, C.
- Iluminacion en P como interpolacion en P1, P2
- Calculo incrmental de iluminacion en P:
- Siguente punto del Scan,Q, tiene Xq = Xp +1
INTERPOLACION DE NORMALES (PHONG)
Mas que costoco que Gouraud, pero resultados mas naturales. Hay que normalizar normales interpoladas (en cada punto/pixel)
- Calculo de la normal Unitaria asociada a cada vertice
- Interpolacion bilineal de normales para encontrar normal a punto/pixel de la cara.
- Se calcula iluminacion en P a partir de este vector normal
- Obtencion de varios vertices:
- Obtener el punto P en mundo real correspondiente a pixel bajo estudio es dificil
- Se puede aproximar y usar L y V constantes a toda la cara
- Se puede interpolar a partir de los valores.
- Ray Trancing
Es el algoritmo para sintesis de imagenes tridimensionales. Propuesto por Tuner Whitted esta basado en el algotmo de determinacion de superficies visibles.
- Buffer de Profundidas
Se utiliza para evitar que los objetos que estan detras se dibujen delante de los que los tapan. Por cada pixel dibujado en la pantalla, se almacena su coordenada Z. Si porteriormente se va dibujar un punto en esa misma posicion, se comprueba si el que esta ya dibujando va delante o atras.
- Buffer de Stencil
Utilizada para guardar el patrin correspondiente a la sombra que un objeto proyecta sobre otro en funcion de la posicion de la fuente de luz. Este buffer suele ser empleado por la GPU para evaluar la complejidad de una escena.
- Fuente de Color
Un modelo fisicamente correcto puede ser muy complejo. Para la matoria de las aplicaciones, se puede modelar fuentes de la luz en base a 3 componentes primarios, RGB, y puede usar cada uno de los 3 colores fuentes para obtener el componente de color correspondiente que un observador humano veria.
- Luz Ambiente
O tambien se puede llamar iluminacion uniforme, se logra mediente fuentes grandes con difusores cuyo proposito es esparcir la luz en todas las direcciones.
- Spotlights(direccionales)
Se caracterizan por un rango delgado de angulos por los cuales se emiten luz. Se puede construir spotlight sencillo de una fuente de punto limitando los angulos de donde la luz de la fuente se puede ver.
- Fuentes de Luz Distantes
Requieren la direccion de un punto sobre la superficie a la fuente de luz. Segun se mueve a lo largo de la superficie, se debe recomputar este vector para calcular la intensidad en cada punto, una computacion que es parte significativa del calculo del sombreado.
- Intensidad Completa.
La intensidad completa es exclusivamente por efectos de iluminacion.
jueves, 2 de mayo de 2013
DIBUJOS EN 3D Y TRANSFORMACIONES GEOMETRICAS
DIBUJOS EN 3D Y TRANSFORMACIONES GEOMÉTRICAS:
- HAGA QUE LA ESFERA GIRE EN SU PROPIO EJE Y
- CAMBIE LA ESCALA DEL CUBO A LA MITAD DEL MISMO
- MUEVA EL CUBO A LA IZQUIERDA 3 UNIDADES EN X
miércoles, 1 de mayo de 2013
ACTIVIDAD ESPACIO 3D
Proyección Ortogonal:
Produce una proyección paralela, que se observa fácilmente los dos objetos, que están encerrados en la caja de proyección.
Proyección Perspectiva:
hay muy poca visualización hacia la esfera, que con el cuadro se ve perfectamente por ser mas grande.
Conceptos:
Produce una proyección paralela, que se observa fácilmente los dos objetos, que están encerrados en la caja de proyección.
Proyección Perspectiva:
hay muy poca visualización hacia la esfera, que con el cuadro se ve perfectamente por ser mas grande.
Conceptos:
jueves, 18 de abril de 2013
ACTIVIDAD 13
Investigar sobre los algoritmos para dibujar curvas:
- Curvas de Bezier:
Es un tipo de linea curva ideada por un ingeniero de Renault en los años 60 por medio de un metodo de descripcion matematica que conseguia definir las transiciones suaves de las curvaturas.
- Curvas de Bezier: Lineales (Grado 1):
Resultan extraordinariamente sencillas para crear trayectorias curvas entre dos puntos. Para construirlas, se interpola entre los extremos uno o mas puntos. Cuantos mas puntos interpolemos, de mas grado (y posibilidades de control) sera la curva. Por este motivo, los puntos interpolados se denominan puntos de control de la curva.
- Curvas de Bezier: Cuadráticas (Grado 2):
- Tres puntos de control (P0, P1 y P2).
- Se construyen dos curvas lineales de Bezier entre P0-P1 y P1-P2.
- Se contruye una tercera curva lineal de Bezier entre las dos anteriores.
- Curvas de Bezier: Cúbicas (Grado 3):
- Cuatro puntos de control (P0, P1, P2 y P3).
- Son las mas utilizadas.
- Se aplica el mismo principio de induccion, partiendo inicialemente de tres curvas de Bezier lineales.
- B-Splines:
- Caso mas general que Bezier. Las curvas de Bezier son un tipo de B-Splines.
- Ventajas sobre Bezier: los puntos de control no se alejan tanto de la forma que queremos modelo, por lo que podemos asemejarnos mas al modelo sin necesidad de utilizar muchos puntos de control.
- Propiedades:
- Envolvente convexa
- Invarianza afin.
- Control local.
- Curvas racionales (NURBS):
- NURBS = Non Uniform Rational B-Splines.
- caso mas general: los B-Splines y las curvas de Bezier son casos particulares de NURBS.
- No son simples polinomios, si no cocientes de polinomios.
lunes, 15 de abril de 2013
FIGURA GEOMETRICA EN 3D
CODIGO:
#include "stdafx.h"
#include <iostream>
#include <gl\glut.h>
GLfloat x=0.0,y=0.0,z=0.0,angulo=0.0,an=0.0,angu=0.0;
int actual=0;
float ver1[]={0,0,0};
float ver2[]={0,0,4};
float ver3[]={4,0,4};
float ver4[]={4,0,0};
float ver5[]={2,6,2};
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glColor3f(1,1,1);
gluLookAt(0, 5, 15, 0, 0, 0, 0, 1, 0);
glTranslatef(x,y,z);
glRotatef(angulo,0,1,0);
glRotatef(an,1,0,0);
glRotatef(angu,0,0,1);
glBegin(GL_TRIANGLES);//cara derecha
glColor3f(1,0,1);//rojo y azul
glVertex3fv(ver3);
glVertex3fv(ver4);
glVertex3fv(ver5);
//cara trasera
glColor3f(1,0,0);//rojo
glVertex3fv(ver1);
glVertex3fv(ver4);
glVertex3fv(ver5);
//cara frontal
glColor3f(0,0,1);//azul
glVertex3fv(ver2);
glVertex3fv(ver3);
glVertex3fv(ver5);
//cara izquierda
glColor3f(1,1,0);//rojo y verde
glVertex3fv(ver1);
glVertex3fv(ver2);
glVertex3fv(ver5);
glEnd();
//cara base
glBegin(GL_QUADS);
glColor3f(0,1,1);//verde y azul
glVertex3fv(ver1);
glVertex3fv(ver2);
glVertex3fv(ver3);
glVertex3fv(ver4);
glEnd();
glFlush();
glutSwapBuffers(); //Se hace el cambio de buffer
}
void Redimensionar(GLsizei ancho, GLsizei alto)
{
if(alto == 0)
{
alto = 1;
}
glViewport(0, 0, ancho, alto);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(ancho>alto)
{
gluPerspective(45.0f,ancho/alto,1,150.0f);
}
else
{
gluPerspective(45.0f,alto/ancho,1,150.0f);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void teclado(unsigned char key,int inX, int inY)
{
if(key == 'w')
{
y=y+0.2f;
glutPostRedisplay();
}
if(key == 's')
{
y=y-0.2f;
glutPostRedisplay();
}
if(key == 'a')
{
x=x+0.2f;
glutPostRedisplay();
}
if(key == 'd')
{
x=x-0.2f;
glutPostRedisplay();
}
if(key == 'q')
{
z=z+0.2f;
glutPostRedisplay();
}
if(key == 'z')
{
z=z-0.2f;
glutPostRedisplay();
}
if(key == 'r')
{
angulo=angulo+10;
glutPostRedisplay();
}
if(key == 'f')
{
angulo=angulo-10;
glutPostRedisplay();
}
if(key == 't')
{
an=an+10;
glutPostRedisplay();
}
if(key == 'y')
{
an=an-10;
glutPostRedisplay();
}
if(key == 'g')
{
angu=angu+10;
glutPostRedisplay();
}
if(key == 'h')
{
angu=angu-10;
glutPostRedisplay();
}
}
void myinit()
{
/*glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);*/
glClearColor(0.0, 1.0, 1.0, 1.0);
}
void InicializarGL(void)
{
glEnable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
}
void main(void)
{
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //En este punto se hace la solicitud de doble buffer
glutInitWindowPosition(50,50);
glutCreateWindow("PIRAMIDE");
glutDisplayFunc(display);
glutReshapeFunc(Redimensionar);
glutKeyboardFunc(teclado);
InicializarGL();
glutMainLoop();
myinit();
glutDestroyWindow(glutGetWindow());
}
ROTACION:
TRASLACION:
ESCALACION:
miércoles, 10 de abril de 2013
Conceptos
Investigar:
concepto y como manejar estos conceptos en Opengl
Donde todos los valores de los argumentos se proporcionan en coordenadas de pantalla enteras relativas a la ventana de visualización los argumentos xvmin e yvmin especifican la posicion de la esquina inferior izquierda del visor respecto a la esquina inferior izquierda de la ventana de visualización el ancho y la altura en pixeles del visor se establecen con los argumentos vpWidth y vpHeight. si no se invoca la funcion glViewporc en un programa, el tamaño y la posicion predeterminados del visor son los mismos que los de la ventana de visualizacion.
Después de que se han aplicado las subrutinas de recortes, la posiciones dentro del cuadrado normalizado se transforman en el rectangulo de visor utilizando la matriz. Las coordenadas de la esquina superios derecha del visor se claculan para esta matriz de transformacion en funcion del ancho y de la altura del visor.
en la trasformacion final, los colores de los pixeles de las primitivas dentro del visor se cargan en el bufer de refresco en las posiciones de pantalla especificadas.
Se pueden crear multiples visores en OpenGL para una gran variedad de aplicaciones. Podemos obtener los parametros del visor activo actualmente utilizando la funcion de consulta:
donde vpArray es una matriz de un unico indice y cuatro elementos. Esta funcion Get devuelve los parametros del visor actual en vpArray en el orden xvmin, yvmin, voWidth y vpHeight. En una aplicacion interactiva, por ejemplom, podemos utilizar esta funcion para obtener los parametros del visor que contiene el cursor de panatalla.
Una aproximacion menos tecnica pero mas comprensible de esta proyeccion es imaginar que se tiene un objeto fabricado con un material deformable, y se aplasta literalmente como una pared. Se obtendria el mismo objeto, pero plano, liso. Pues eso es lo que se veria por pantalla.
Para definir la matriz de proyeccion ortografica y multiplicarla por la matriz activa (que deberia ser en ese momento la de proyeccion, GL_PROJECTION), se utiliza la funcion glOrtho, que se define de la siguiente forma.
siendo todos flotantes. Los valores de Znear y Zfar no son las posiciones de esos planos en el espacio ·D. representan la distancia desde el centro de proyeccion, con valor positivo ha cia delante y negativo hacia atras. Con esto simplemente se acota lo que sera el volumen de visualizacion (un cubo).
Ejemplo:
es un render de un conche con proyeccion ortografica, visto desde delante.
el codigo utilizado para definir la proyeccion ha sido:
se podra apreciar la diferencia usando una proyeccion perspectiva.
Se puede definir esta proyeccion utilizando la funcion glFrustum. Pero existe otra funcion de la libreria GLU llamada gluPerspective que hace el proceso mas sencillo. se define de la siguiente forma:
concepto y como manejar estos conceptos en Opengl
PUERTO DE VISIÓN Y VENTANAS
Especificamos los parámetros del visor con la función OpenGLDonde todos los valores de los argumentos se proporcionan en coordenadas de pantalla enteras relativas a la ventana de visualización los argumentos xvmin e yvmin especifican la posicion de la esquina inferior izquierda del visor respecto a la esquina inferior izquierda de la ventana de visualización el ancho y la altura en pixeles del visor se establecen con los argumentos vpWidth y vpHeight. si no se invoca la funcion glViewporc en un programa, el tamaño y la posicion predeterminados del visor son los mismos que los de la ventana de visualizacion.
Después de que se han aplicado las subrutinas de recortes, la posiciones dentro del cuadrado normalizado se transforman en el rectangulo de visor utilizando la matriz. Las coordenadas de la esquina superios derecha del visor se claculan para esta matriz de transformacion en funcion del ancho y de la altura del visor.
en la trasformacion final, los colores de los pixeles de las primitivas dentro del visor se cargan en el bufer de refresco en las posiciones de pantalla especificadas.
Se pueden crear multiples visores en OpenGL para una gran variedad de aplicaciones. Podemos obtener los parametros del visor activo actualmente utilizando la funcion de consulta:
donde vpArray es una matriz de un unico indice y cuatro elementos. Esta funcion Get devuelve los parametros del visor actual en vpArray en el orden xvmin, yvmin, voWidth y vpHeight. En una aplicacion interactiva, por ejemplom, podemos utilizar esta funcion para obtener los parametros del visor que contiene el cursor de panatalla.
PROYECCION ORTOGONAL
Una proteccion ortografica es cuadrada en todas sus caras. esto produce una proyeccion paralela, util para aplicaciones de tipo CAD o dibujos arquitectonicos, o tambien para tomar medidas, ya que las dimensiones de lo que representan no se ven alteradas por la proyeccion.Una aproximacion menos tecnica pero mas comprensible de esta proyeccion es imaginar que se tiene un objeto fabricado con un material deformable, y se aplasta literalmente como una pared. Se obtendria el mismo objeto, pero plano, liso. Pues eso es lo que se veria por pantalla.
Para definir la matriz de proyeccion ortografica y multiplicarla por la matriz activa (que deberia ser en ese momento la de proyeccion, GL_PROJECTION), se utiliza la funcion glOrtho, que se define de la siguiente forma.
siendo todos flotantes. Los valores de Znear y Zfar no son las posiciones de esos planos en el espacio ·D. representan la distancia desde el centro de proyeccion, con valor positivo ha cia delante y negativo hacia atras. Con esto simplemente se acota lo que sera el volumen de visualizacion (un cubo).
Ejemplo:
es un render de un conche con proyeccion ortografica, visto desde delante.
el codigo utilizado para definir la proyeccion ha sido:
se podra apreciar la diferencia usando una proyeccion perspectiva.
PROYECCION EN PERSPECTIVA
Una proyeccion en perspectiva reduce y estirar los obejos mas alejados del observador. Es importante saber que las medidas de la proyeccion de un objeto no tienen por que coincidir con las del objeto real, ya que han sido deformadas.
El volumen de visualizacion creado por una perspectiva se llama frustum. Un frustum es una seccion piramidal, vista desde la parte afilada hasta la base.
Los parametros de gluPerspective son flotantes y definen las caracteristicas mostradas en la ilustracion, el angulo para el campo de vision en sentido vertical, el aspecto que es la relacion entre la altura y la anchura y las distancias znear y zfar de los planos que acotan el fustrum el observador. Los valores de znear y zfar no son las posiciones de esos planos en el espacio 3D, representan la distanci desde el centro de proyeccion, con valor positivo hacia delante y negativo hacia atras.
La siguiente ilustracion, muestra la escena del coche de la seccion anterior, esta vez con la proyeccion en perspectiva:
El codigo utilizado para definir la proyeccion ha sido:
Se usan 45º de angulo, la relacion entre el ancho y alto de la pantalla (width y height son el ancho y alto actual de la ventana) y las distancias a los planos de corte znear y zfar son 0.01 y 100 respectivamente.
Fuentes:
http://sabia.tic.udc.es/gc/Tutorial%20OpenGL/tutorial/cap4.htm
miércoles, 13 de marzo de 2013
RESUMEN
TRANSFORMACIONES BIDIMENSIONALES
TRANSALACION
Se aplica una taslacion en un objeto para cambiar su posicion a lo largo de la trayectoria de una linea recta de una direccion de coordenadas a otra. Convertimos un punto bidimensional al agregar las distancias de traslacion, Tx y Ty a la posicion de coordenadas original (x,y) para mover el punto a una nueva posicion (x",y").x" = x + Tx y" = y + Ty
el par de distancia de traslacion (Tx , Ty) se llama vector de traslacion o vector de cambio.
se puede espresar las ecuaciones anteriores en una sola ecuacion matricial de utilizar vectores de columna para representar las posiciones de coordenadas y el vector de traslacion:
Estos nos permite expresar las dos ecuaciones de traslacion bidimensional en la forma de matriz:
en ocasiones, las ecuaciones de transformacion matricial se expresan en terminos de vectores de renglon de coordenadas en vez de vectores de columna. En este caso, expresariamos las representaciones matriciales como
ROTACION
Se aplica una rotacion bidimensional en un objeto al cambiar s posicion a lo largo de la trayectoria de una circunferencia en el plano de xy. para generar una rotacion. especificamos un angulo derotacion θ y la posicion (Xr, Yr) del punto de rotacion (o punto pivote) en tomo al cual se gir el objeto.
Los valores positivos para ek angulo de rotacion definen rotaciones en sentido opuesto a las manecillas del reloj alrededor del punto pivote y los valores negativos giran los objetos en la direccion del reloj. Tambien es posible describir esta transformacion como una rotacion sobre el eje de rotacion que es perpendicular al plano de xy y pasa a traves del punto pivote.
r es la distancia entre la constante del punto desde el origen, el
angulo Φ es la posicion angular original del punto desde el plano horizontal y
θ es el angulo de rotacion. Utilizando identidades trigonometricas podemos expresar las coordenadas transformadas en termino de los angulos
θ y
Φ como:
Las coordenadas originales del punto en las coordenadas polares son
Al sustituir las exoresiones, obtenemos las ecuaciones de transformacion para girar un punto en la posicion (x , y) s traves de un angulo
θ al rededor de un origen:
Con las respresentaciones del vector de columna ara las posiciones de coordenadas podemos expresar las ecuaciones de rotacion en la forma de matriz:donde la matriz de rotacion es:
Cuando las posiciones de coordenadas se representan como vectores de renglon en vez de vectores de columna, el producto de la matriz en la ecuacion de rotacion se transpone, de modo que el vector de coordenadas de renglon transformado [x y] se calcula como
Si igual que con las traslaciones, las rotaciones son transformaciones de cuerpos rigidos que mueven los onjetos sin deformarlos. Se giran a traves del mismo angulo.
Se gira un segmento de linea recta al aplicar las ecuaciones de rotacion en cada extremo de la linea y se vuelve a trazar la linea entre las nuevas posiciones de los extremos. Los poligonos se giran al desplegar cada vertice a traves del angulo de rotacion especifico y se vuelve a generar el poligono utilizando los nuevos vertices.
Las lineas curvas se giran al caminar la posicion de los puntos de definicion y se vuelven a trazar las curvas. Por ejemplo, se puede girar una circunferencias o una eclipse alrededor de un eje no central al move la posicion del centro a traves del arco que subtiene el angulo de rotacion especifico. Es posible girar una elipse sobre sus coordenadas de centro al girar los ejes mayor y menor.
ESCALACION
Una transformacion de escalacion altera el tamaño de un objeto. Se puede realizar esta operacion para poligonos al multiplicar los valores de coordenadas (x, y):El factor de escalacion Sx escala objetos en la direccion de x mientras que el factor de eslacion Sy lo hace en direccion de y. Tambien se pueden expresar las ecuaciones de trandormacion en forma matricial:
O
donde S es la matriz de escalacion 2 por 2 en la ecuacion.
Podemos controlar la localizacion de un objeto escalado al seleccionar una posicion llamada punto fijo, que debe permanecer sin cambios despues de la transformacion de escalacion.
Se puede seleccionar las coordenadas para el flujo (Xf, Yf) como uno de los vertices, el centroide del objeto o cualquier otra posicion.
Asi, se escala un poligono con respecto del punto fijo al escalar la distancia de cada vertice al punto fijo. Para un vertice con coordenadas (x , y), se calculan las coordenadas escaladas (X , Y) como
Podermos volver a expresar estas transformaciones de escalacion para separar los terminos de miltiplicacion y de adicion donde los terminos aditivos Xf(1-SX) y Yf(1 - Sy) son constantes para todos los puntos en el objeto
Incluir coordenadas para un punto fijo en las ecuaciones de escalacion es similar a incluir coordenadas para un punto pivote en las ecuaciones de rotacion.
Se escalan poligonos al aplicar las transformaciones en cada vertice y luego volver a generar el poligono utilizando los vertices transformados. Se escalan otros objetos al aplicar las ecuaciones de transformacion de escalacion a los parametros que definen los objetos.
COORDENADAS HOMOGENEAS Y REPRESENTACION MATRICIAL
En las aplicaicones de diseño y de creacion de imagenesm realizamos traslaciones, rotaciones y escalaciones para ajustar los componentes de la imagen en sus posiciones apropiadas. En este tema consideramos como se pueden volver a formular las representaciones de la matriz de modo que se pueden de manera eficiente esas secuencias de transformacion.
Es posible expresar cada una de las transformaciones basicas en la forma de matriz general con las posiciones de coordenadas P y P" representadas como columnas de vector.
La matriz M1 es una matriz de 2 por 2 que contiene factores de multiplicacion y M2 es una matriz de columnas de dos elementos que contiene terminos de traslacion. Para la traslacion, M1 es la matriz de identidad. Para la rotacion o la escalacion M2 contiene los terminos de traslacion asociados con el punto fijo de escalacion.
Con el fin de producir una secuencia de transformaciones con estas ecaciones, como esclacion seguida por rotacion y luego traslacion, debemos calcular las coordenadas transformadas un paso a la vez. Primero, se escalan las posiciones de coordenadas, despues se giran estas coordenadas escaladas y por ultimo se trasladan las coordenadas giradas.
Un planteamiento mas eficiente combinarias las transformaciones de manera que se obtengan las coordenadas finales directamente a partir de las cooordenadas iniciales para eliminar el calculo de coordenadas intermedias. De esta manera, se debe de formular nuevamente la ecuacion para eliminar la adicion de la matriz asociada con los terminos de la transalacion M2.
Podemos combinar los terminos de mulitiplicaicon y de adicion para transformaciones geometricas dibimensionales en una sola representacion de matriz al ampliar las respresentaciones de matriz de 2 por 2 a matrices de 3 por 3.
Esto nos permite expresar todas las ecuaciones de matriz como multiplicaciones de matriz, si tambien ampliamos las representaciones de matriz para las posiciones de coordenadas.
COMPOSICION DE TRANSFORMACIONES BIDIMENSIONALES
Con las representaciones de matriz del tema anterior, podemos establecer una matriz para cualquier secuencia de transformaciones como una matriz de transformacion compuesta al calcular el producto de la matriz de las transformaciones individuales. La creacion de productos de matrices de transformacion a menudo se conoce como concatenacion o composicion de matrices.- Traslaciones
donde se representan P y P"como vectores de columna de coordenadas homogeneas. Podemos verificar este resultado al calcular e producto de la matriz para las dos agrupaciones asociativas. asimismo, la matriz de transformacion compuesta para esta secuencia de tranformaciones es
O
que demuestra que dos transformaciones sucesivas son aditivas.
- Rotaciones
Al multiplicar las dos matrices de rotacion, podemos verificar que dos rotaciones sucesivas son aditivas:
de modo que es posible calcular las coordenadas giradas finales con la matriz de rotacion compuesta como
- Escalaciones
O
La matriz resultante en este caso indica que las operaciones de escalacion sucesivas son multiplicativas. Es decir, si debieramos triplicar el tamño de un objeto dos veces en una sucesion, el tamaño final seria nueve veces el tamaño original.
Rotacion de punto pivote general
con un paquete grafico que solo ofrezca una funcion de rotacion para girar objetos con respecto del origen de las coordenadas, p-odemos generar casi cualquier punto pivote seleccionado (Xr, Yr) al realizar las siguiente secuencia de operaciones de traslaccion-rotacion-traslacion:
- Traslade el objeto de modo que se mueva la posicion delk punto pivote al origen de las coordenadas.
- Gire el objeto con respecto del origen de las coordenadas,
- Traslade el objeto de manera que se regrese el punto pivote a su posicion original.
la siguiente figura ilustra una secuencia de transformacion para producir escalacion con respecto de una posicion fija seleccionada (Xf, Yf) al utilizar una funcion de escalacion que solo puede escalar en relacion con el origen de las coordenadas.
- Traslade el objeto de modo que el punto fijo coicida con el origen de las coordenadas.
- Ecale el objeto con respecto del origen de las coordenadas
- Utilice la traslacion inversa del paso1 para regresar el objeto a su posicion original.
La multiplicaicon de matrices es asociativa. Para tres matrices cuales quiera A, B y C, e; producto matricial A*B*C se puede elevar a cabo al multiplicar primero A por B multiplicar primero B por C:
Por tanto, podemos evaliar los productos matriciales al utilizar una agrupacion asociativa ya sea de izquierda a derecha o vicerversa.
Por otro lado, los productos de la transformacion tal vez no sean conmuitativos, en general el producto matricial A*B no es igual que B*A. Esto significa queremos trasladar y girar un objeto, debemos tener cuidado sobre el sentido en que se evalua la matriz compuesta.
TRASFORMACION VENTANA-AREA DE VISTA
Como las primitivas de salida se expresan en coordenadas de mundo, hay que indicar al paquete de cubrutinas graficas como establecer la correspondencia entre las coordenadas de mundo y las coordenadas de pantalla (usaremos el termino especifico coordenadas de pantalla para relacionar este analisis especificamente con SRGP, pero podrian usarse dispositivos de impresion, en cuyo caso seria mas apropiado al termino coordenadas de dispositivo).Esta correspondencia se puede afectuar si el programador de la aplicacion proporciona al paquete grafico una matriz de transformacion para la correspondencia.Otra forma es que el programador de la aplicaicon especifique una region rectangular en coordenadas de mundo, llamada ventana de coordenadas mundiales y una region rectangular correspondencia de la ventana de coordenadas mundiales. La transformacion que establece la correspondencia ente la ventana y el area de cista se aplica a todas las primitivas de salida en coordenadas de mundo para que correspondadn a coordenadas de pantalla.
Como se puede ver, si la entana y el area no tienen la misma razon altura-anchura, ocurre un esclamiento no uniforme. Si el progrma de aplicacion cambia la ventana o el area de vista, las nuevas primitivas de salida que se dibujen en la pantalla veran afectadas por el cambio, no asi las primitivas existentes.
Si SRGP proporcionara primitivas de salida en coordenadas de muncod, el area de vista se hallara en el lienzo actual, que por omision es el lienzo 0, la pantalla. El programa de aplicacion podrian cambiar en cualquier instante la ventana o el area de vista, en cuyo caso las primitivas de salida que se especifican subsecuentemente estarian sujetas a una nueva transformacion. Si el cambio incluyera una area de vusta distinta, las nuevas primitivas de salida se colocarian en el lienzo en posicion distintas a las anteriores.
Un administrador de ventanas podria establecer la correspondencia entre el lienzo 0 de SRGP y una ventana menor que la pantalla completa; en este caso no siempre estara visible todo el lienzo ni toda el area vista.
Si tenemos una ventana y un area de vista, cual es la matriz de transformacion que establece la correspondencia entre las coordenadas mundiales de la ventana y las coordenadas de pantalla del area de vista? Esta matriz se puede desarrollar como una composicion de transformacion de tres pasos, como sugiere la figura:
La ventana, especifica por sus vertices inferior izquierdo y superior derecho, se traslada primero al origen de las coordenadas de mundo. Despues se escala el tamaño de la ventana para que sea igual al tamaño del area de vista. Por ultimo se usa una traslacion para colocar una area de vista. La matriz global Mwx, que se obtiene por medio de la composicion de dos matrices de traslacion y la matriz de escalamiento, es
Al multiplicar P= Mwc[X Y 1] se obtine el resultado esperado:
Muchos paquetes graficos combinan la tranformacion ventana-area de vista con el recorte de primitivas de salida con respecto a la ventana. La siguiente figura ilustra el recorte en el contesto de ventanas y areas de vista.
TRANSFORMACIONES DE COMPOSICION GENERAL Y DE ESFICIENCIA COMPUTACIONAL
Una transformacion bidimensional genral, que representa una combinacion de traslaciones, rotaciones y escalaciones se puede expresar como
Los cuatro elementos RSij son los terminos multiplicativos de rotacion-escalacion en la transformacion que implican solo angulos de traslacion que contienen combinaciones de distancias de traslacion, coordenadas de punto pivote y de punto fijo, asi como de angulos de trotacion y parametros de escalacion.
Por ejemplo, si debe escalar, girar un objeto con respecto de las coordenadas de su centroide (Xc , Yc) y despues trasladarlo, los valores para los elementos de la matriz de transformacion compuesta son
Asi, es realidad solo necesitamos efectuar cuatro multiplicaciones y cuatro adiciones para transformar las posiciones de las coordenadas. Este es el numero maximo de calculos que se requieren para cualquier secuencia de transformacion, una vez que se han concatenado las matrices individuales y evaluado los elementos de la matriz compuesta.
Sin concatenacion, se aplicarian las transformaciones individuales una a la vez y se podria reducir en forma considerable el numero de calculos. De esta manera, una implementacion eficiente de las operaciones de transformacion consiste en formular matrices de transformacion, concatenar cualquier secuencia de transformacion y calcular las coordenadas transformadas al utilizar la ecuacion.
Suscribirse a:
Comentarios (Atom)




























































