Download - Programación Orientada a Objetos.doc
-
7/23/2019 Programacin Orientada a Objetos.doc
1/25
1. Anlisis y Diseo Orientado a Objetos
1.1. Elementos del Modelo de Objetos
Fundamentales
Abstraccin
Denota las caractersticas esenciales de un objeto que lo
distinguen de los dems, y establece asbarreras
conceptuales bien definidas respecto de la perspectiva del
observador.
Contrato : establece las suposiciones que realiza objeto
cliente respecto al servidor, abarcando las
responsabilidades del servidor. Firma : cada una de las operaciones que ayudan al
contrato tiene una firma nica que abarca todos los
parmetros formales y tipo que retornan.
Protocolo : conjunto de operaciones que puede realizar
un cliente sobre objeto, incluye formas de llamada y
ordenes que admite.
Tipos de Abstraccin
De entidades : objeto es modelo til en dominio desolucin del problema.
De acciones : objeto proporciona conjunto general de
operaciones, que realizan funciones del mismo tipo.
De mquinas virtuales : objeto que agrupa operaciones,
virtuales todas usadas por un nivel superior, o que
utilizan operaciones de un nivel inferior.
De coincidencia : objeto que almacena operaciones que
no tienen relacin entre s.
Encapsulamiento
Es el proceso de almacenar en un mismo compartimiento
elementos de una abstraccin, que constituye su
comportamiento y estructura.
Oculta los detalles de la implementacin de un objeto.
Modularidad
Es el acto de fragmentar un programa en componentes
individuales para reducir su complejidad.Crear fronteras definidas y documentadas dentro del
1
-
7/23/2019 Programacin Orientada a Objetos.doc
2/25
programa, pues son claves para entender el problema.
Jerarqua
Son una clasificacin u ordenacin de abstracciones.
Las dos jerarquas mas importantes de un sistema son:
Estructura de Clases: Jerarqua de clases. Herencia.
Estructura de Objetos: Jerarqua de partes. Agregacin.
Una subclase puede heredar la estructura y comportamiento de
su superclase.
Secundarios
Tipos (tipificacin)
Son las puestas en vigor de la clase de objetos, de modo que
los objetos de tipos distintos no pueden intercambiarse o, si
pueden hacerlo, solo lo harn en formas restringidas.
La comprobacin de tipos impide que se mezclen
abstracciones.
Concurrencia
La concurrencia es la propiedad que distingue un objeto activo
de uno que no est activo.
Permite a diferentes objetos actuar al mismo tiempo.
Persistencia
Capacidad de un objeto por la que su existencia trasciende en
el tiempo, es decir, que contina existiendo despus de que
su creador deja de existir, y/o el espacio, es decir, la posicin
del objeto vara respecto al espacio de direcciones en el que
fue creado.
La persistencia conserva el estado de un objeto en el tiempo y
en el espacio.
2
-
7/23/2019 Programacin Orientada a Objetos.doc
3/25
2. Sobrecarga de Operadores
2.1. Qu es la sobrecarga de operadores?
Es solo otra forma de hacer una llamada a una funcin, una notacin mas
clara para tipos de datos definidos por el programador.
Permite expresiones claras para nuevos tipos de datos creados por el
usuario.
2.2. Cmo se sobrecargan los operadores?
Los operadores se sobrecargan escribiendo una definicin de funcin (con
encabezado y cuerpo) como lo hara normalmente, excepto que el nombrede la funcin ahora ser la palabra reservada operator seguido por el
smbolo del operador que se va a sobrecargar. Por ejemplo, el nombre de la
funcin operator+ se utilizara para sobrecargar el operador suma (+).
2.3. Cules son los operadores que no pueden sobrecargarse?
Los operadores que NO pueden sobrecargarse son:
. .* :: ?:
2.4. Cules son los operadores (sobre clases) que no necesitan
sobrecargarse explcitamente?
Los operadores que no necesitan sobrecargarse explcitamente son dos. El
operador de asignacin (=) puede utilizarse con cada clase sin
sobrecarga explicita. El comportamiento predeterminado del operador de
asignacin es una asignacin de miembrosde los datos miembro de la
clase. Adems, el operador de direccin (&) puede utilizarse con objetos
de cualquier clase sin sobrecarga; simplemente devuelve le direccin del
objeto en memoria.
2.5. Para que tipos de clases es recomendable la sobrecarga?
La sobrecarga es especialmente apropiada para las clases matemticas.
Requieren la sobrecarga de un conjunto importante de operadores, en
general, para mantener la consistencia de la manipulacin de dichas clases
en la realidad.
2.6. Restricciones en sobrecarga de operadores
3
-
7/23/2019 Programacin Orientada a Objetos.doc
4/25
Laprecedencia de un operador no se puede modificar mediante la
sobrecarga. Sin embargo, se puede utilizar parntesis para forzar el
orden de evaluacin.
La asociatividad(es decir, si el operador se aplica de derecha a
izquierda, o de izquierda a derecha) no se puede modificar mediante
la sobrecarga.
No es posible modificar numero de operandos de un operador:
los unarios permanecen unarios sobrecargados, y los binarios
permanecen como binarios sobrecargados. El nico operador ternario
(?:) no puede sobrecargarse.
No es posible crear nuevos operadores; solo se pueden
sobrecargar los existentes.
No es posible modificar la manera en que un operador
funciona con objetos predefinidos. Solo funciona la sobrecarga en
este caso, con objetos de tipos definidos por el usuario, o con una
mezcla de objeto de tipo definido por el usuario y objeto de tipo
integrado.
2.7. Formas de sobrecargar operadores
A travs de mtodos miembro.
A travs de mtodos NO miembro con funciones amigas.
A travs de mtodos NO miembro con funciones NO amigas
(globales).
Casos de Sobrecarga
4
-
7/23/2019 Programacin Orientada a Objetos.doc
5/25
3. Plantillas (Templates)
3.1. Plantillas
3.1.1. Qu son?
Los templates son funciones o clases definidas para tipos no especificados.
3.1.2. Para que sirven?
Al utilizarlo se pasa el tipo como un argumento ya sea explcita o
implcitamente. Adems, al ser componentes del lenguaje proveen control
total de tipos y de mbito.
3.2. Funciones plantillas
3.2.1. Qu son y para que sirven?
Proveen un comportamiento que puede ser invocado con distintos tipos.
Tiene una representacin similar a una funcin. Se utilizan generalmente
para realizar operaciones similares sobre distintos tipos de datos.
3.2.2. Cules son los prototipos?
template void NombreFuncion (T& ref)
{/* declaracin de funcin genrica */};
3.2.3. Cmo se llama (invoca) a la funcin plantilla?
Se la invoca como cualquier otra funcin, pasndole los parmetros
correspondientes para que realice las instrucciones declaradas en su
cuerpo.
3.3. Clases plantillas
3.3.1. Qu son y para que sirven?
5
-
7/23/2019 Programacin Orientada a Objetos.doc
6/25
Las plantillas de clases fomentan la reutilizacin de cdigo al permitir la
creacin de instancias de versiones de las clases genricas para tipos
especficos. Tambin se conocen como tipos parametrizados, ya que
requieren de uno o ms parmetros de tipo para especificar la manera de
personalizar una plantilla de clase genrica para formar una
especializacin de plantilla de clase.
3.3.2. Cul es el prototipo?
Ejemplo
template class Minimax
{ public:T min(T a, T b);
T max(T a, T b);
};
template T Minimax::min(T a, T b)
{return (ab)?a:b; };
3.3.3. Cmo se especializa una clase plantilla para un tipo determinado?
El programador que desea producir una variedad de especializaciones de
plantilla de clase escribe solo una definicin de plantilla de clase. Para cada
especializacin de plantilla de clase adicional, utiliza una notacin simple y
concisa, el compilador escribe el cdigo fuente para dicha especializacin
que requiere el programador.
3.4. A que se denomina programacin genrica? Por qu decimos que es
un paradigma ms novedoso y amplio que el de la programacin orientadaa objetos?
Es un paradigma de programacin centrado en los algoritmos ms en los
datos, parametrizados al mximo y expresados de la forma ms
independiente posible, permitiendo que sirvan para la mayora de tipos y
estructuras de datos.
3.5. En C++ este proceso se realiza en tiempo de compilacin o en tiempo
de ejecucin?
6
-
7/23/2019 Programacin Orientada a Objetos.doc
7/25
La instanciacin de una plantilla en C++ se realiza en tiempo de
compilacin, cuando el compilador escribe el cdigo fuente que requiere el
programador para la misma.
7
-
7/23/2019 Programacin Orientada a Objetos.doc
8/25
4. Contenedoras (STL)
4.1. Qu es la STL?
La STL (del ingls Standard Template Library) es una biblioteca de clases y
funciones templates creada para estandarizar y optimizar la utilizacin de
algoritmos y estructuras de datos en el desarrollo de software en C++.
4.2. Cules son sus elementos fundamentales?
La STL posee tres componentes fundamentales: contenedores,
iteradoresy algoritmos.
4.3. Qu criterios se deben tener en cuenta para elegir el contenedor
adecuado?
Para cualquier aplicacin especfica podran ser apropiados varios
contenedores distintos de la STL. Se debe seleccionar el contenedor mas
apropiado que logre el mejor rendimiento, es decir, un balance entre
velocidad y tamao, para dicha aplicacin.
4.4. Descripcin breve de cada contenedor y lista de comandos comunes
Los contenedores se dividen en tres categoras principales: contenedores de
secuencia, contenedores asociativos y adaptadores de contenedores.
Contenedores de secuencia: representan estructuras de datos
lineales como vectores y listas enlazadas.
vector: inserciones y eliminaciones al final, acceso
directo.
deque: inserciones y eliminaciones al final, accesodirecto.
list: lista doblemente enlazada, insercin y eliminacin
en cualquier parte.
Contenedores asociativos: son contenedores lineales que por lo
general pueden localizar elementos almacenados en ellos
rpidamente. Pueden almacenar conjunto de valores o pares
clave/valor.
8
-
7/23/2019 Programacin Orientada a Objetos.doc
9/25
set: bsqueda rpida, no se permiten duplicados.
multiset: bsqueda rpida, se permiten duplicados.
map: mapeo uno a uno, no se permiten duplicados,
bsqueda rpida basada en claves.
multimap: mapeo uno a uno, se permiten duplicados,
bsqueda rpida basada en claves.
Adaptadores de contenedores: implementa las pilas y colas que
permiten a un programa ver a un contenedor secuencial en una
manera restringida.
stack: ultimo en entrar, primero en salir (LIFO).
queue: primero en entrar, primero en salir (FIFO).
priority_queue: el elemento de mayor prioridad siempre
es el primero en salir.
9
-
7/23/2019 Programacin Orientada a Objetos.doc
10/25
5. Polimorfismo
Un objeto de la superclase puede ser instanciado como cualquiera de susclases descendientes
Es esta tal vez, la mejor forma de definir el polimorfismo, como una tcnica
de programacin que nos permite programar en forma general, en vez de
programar en forma especfica.
Para aplicar esta tcnica, debemos tener en cuenta un mecanismo muy
importante tal como la herencia.
La herencia es una forma de reutilizacin de software para crear clases que
asimilan los atributos y mtodos de una clase existente, redeclarandolospara que realice nuevas y distintas actividades.
Adems, el polimorfismo, funciona mediante los manejadores de
apuntadores a clases base y manejadores a referencias a clases bases, pero
con manejadores de nombres.
El encadenamiento tardo, quiere decir que los miembros que sern
llamados en una instancia se definen en tiempo de ejecucin.
Una forma de indicar que miembros de una clase pueden ser encadenados
tardamente, se realiza a travs de los miembros virtuales.
En la declaracin de clases base, no debemos olvidar que los atributos y
mtodos que vayan a ser redefinidos en las clases derivadas deben ser
declarados como virtuales.
Declarar una funcin virtual, es decirle al compilador que dicha funcin ser
modificada o redefinida completamente en sus clases derivadas. Al declarar
como virtual un mtodo de una clase, automticamente quedara definido
como virtual para todas sus clases derivadas.
Para definir un mtodo como virtual, lo que hacemos es anteponer en la
misma lnea, la palabra reservada virtual, de esta manera decimos que
dicho mtodo esta incluido en la clase derivada y a su vez ser redefinida,
ya sea parcial o totalmente.
Algo muy importante a tener en cuenta para utilizar polimorfismo, es que
los contructores de clases NO pueden ser declarados como virtuales,
mientras que los destructores pueden y deben ser virtuales.
El instanciamiento de clases derivadas a travs de clases base se realiza de
la sgte manera:
10
-
7/23/2019 Programacin Orientada a Objetos.doc
11/25
Madre *puntero;
puntero = new Hija;
puntero->MetodoVirtualClaseHija();
delete puntero;
Esta tcnica, se denomina upcasting.Como vemos, los operadores que aqu aparecen, new y delete, son
manejadores de apuntadores, claves en la implementacin del
polimorfismo.
Estos operadores son usados para controlar la asignacin y liberacin de
memoria en un programa, para cualquier tipo de dato predefinido o definido
por el usuario, en lo que se denomina administracin de memoria
dinmica.
Por otra parte, tambin tenemos la posibilidad de crear miembros de una
clase madre como virtuales puros, esto es aplicndoles una condicinextra:
virtual void NombreFuncion () = 0;
Dicha igualacin a 0, quiere decir que esta funcin de clase madre, debe ser
si o si redefinida completamente en las clases derivadas.
Las clases abstractas, son aquellas que poseen al menos uno de sus
miembros virtual puro, y no pueden instanciarse, tampoco tendra sentido
hacerlo. Por otra parte, cuando posee todos los mtodos virtuales puros, se
la denomina clase abstracta genuina.
Otro aspecto muy importante a tener en cuenta, solo por conocimiento
teorico de cmo se realizan las llamadas a funciones hijas a travs de
madres, es la tabla de mtodos virtuales.
Esta TMV, se genera cuando C++ compila crendola para cada clase, a
partir de las funciones virtuales que posee cada una de ellas.
Por otra parte, la TMV se utiliza para seleccionar la implementacin de la
funcin apropiada cada vez que se llama a una funcin virtual de esa clase.
Debemos notar la existencia de distintos niveles de apuntadores. Primer nivel, los apuntadores a las funciones en la TMV, que apuntan
a las funciones reales que se ejecutan cuando se invoca a una funcin
virtual.
Segundo nivel, en cambio, cada vez que se crea una instancia del
objeto de una clase con funciones virtual, el compilador adjunta al
objeto un apuntador a la TMV de esa clase.
Finalmente, podemos hacer mencin a la utilizacin simultnea de
polimorfismo y la STL.
Para que nos puede servir esto? Pues la respuesta es muy sencilla,conociendo el upcasting, y con el uso de la STL podemos crear listas
11
-
7/23/2019 Programacin Orientada a Objetos.doc
12/25
dinmicas de punteros a clases madres, de manera tal de ahorrar cdigo y
ampliar la extensibilidad de los programas. Por ejemplo:
vector Contenedor;
12
-
7/23/2019 Programacin Orientada a Objetos.doc
13/25
6. Recursividad
Una funcin que se llama a s misma, se dice que es recursiva. Laresursividad en las funciones puede darse de dos formas:
Directa: la funcin se llama a s misma directamente.
Indirecta: la funcin llama a otra funcin, que a su vez llama a
la primera.
Se dice que un procedimiento es recursivo si en parte esta formado por si
mismo o se define en funcion de s mismo.
6.1. Propiedades
Se reserva espacio para almacenar el nuevo conjunto completo de las
nuevas variables. Hay variables con valores presentes y pendientes.
La profundidad de la recursin debe ser finita, y adems pequea.
Siempre debe poseer una condicin de salida, por la cual el ciclo recursivo
finalice.
6.2. Tipos de Recursividad
6.2.1. Divide y Vencers
El esquema divide y vencers es una tcnica para resolver problemas que
consiste en dividir el problema original en subproblemas (de menor
tamao), resolver los subproblemas y finalmente combinar las soluciones
para dar una solucin al problema principal.
En cada nivel del procedimiento este paradigma consta de los siguientes
tres pasos:
Dividir el problema en subproblemas. Resolver cada uno de los subproblemas.
Combinar soluciones de subproblemas para obtener la solucin
del problema original.
Para que esta tcnica funcione deben cumplirse los dos requisitos
siguientes:
Primero, los subproblemas deben ser ms simples y sencillos
que el problema original.
Segundo, despus de un nmero finito de subdivisiones debeencontrarse un subproblema que pueda resolverse de manera
13
-
7/23/2019 Programacin Orientada a Objetos.doc
14/25
directa.
14
-
7/23/2019 Programacin Orientada a Objetos.doc
15/25
6.2.2. Bsqueda Exhaustiva
A veces parece que no hay mejor manera de resolver un problema que
tratando todas las posibles soluciones. Casi siempre es lenta, pero a veceses lo nico que se puede hacer.
Tambin es til plantear un problema con esa tcnica y a partir de ah
encontrar una mejor solucin.
Otro uso prctico es resolver un problema con un tamao de datos de
entrada lo suficientemente pequeo.
La mayora de estos problemas pueden ser reducidos a generar objetos de
combinatoria, como cadenas de caracteres, permutaciones y subconjuntos.
6.2.3. Algoritmos de rastro inverso
Encontrar solucin a problemas sin seguir una regla especfica de clculo,
sino por ensayo y error.
Descomposicin al tanteo:
Tareas parciales que se pueden expresar recursivamente. Se explora un
nmero finito de subtareas:
Hay incongruencias? -> Rastreo inverso.
Suprime solucin mas reciente.
Ensayo de una nueva posibilidad.
Es til donde hay muchas posibilidades iniciales, pero quedan pocas tras
aplicar reglas posteriores.
15
-
7/23/2019 Programacin Orientada a Objetos.doc
16/25
7. Graficacin, OpenGL
OpenGL contiene comandos para dibujo, no posee comandos para abrirventanas, ni para leer eventos de teclado y/o mouse.
Para ello se usa a GLUT, cuyas instrucciones comienzan con el prefijo glut.
En OpenGL, las instrucciones se escriben con minsculas (gl) y las
constantes son con maysculas (GL).
7.1. Ventanas
7.1.1. Iniciar Ventana
Para inicializar una ventana en OpenGL, se requiere de 5 rutinas bsicas:
glutInit (int *argc, chat **argv) //inicializa GLUT, debe ser
llamada antes que cualquier rutina.
glutInitDisplayMode (unsigned int mode)//se especifica
modelo RGB o ndices, buffer sencillo o doble.
glutInitWindowPosition (int x, int y)//ubicacin de esquina
superior izquierda de nuestra ventana en la pantalla.
glutInitWindowSize (int x, int y)//tamao en pixeles de
nuestra ventana.
glutCreateWindow (char *string)//crea la ventana con uncontexto OpenGL.
La pantalla se despliega cuando es llamada la funcin glutMainLoop().
7.1.2. Limpiar Pantalla
Se utiliza la instruccin:
glClearColor (red,green,blue,alpha); //configura color de fondo para
limpieza, en modo RGBA.
Para el negro por ejemplo se utiliza el comando: glClearColor
(0.0,0.0,0.0,0.0);
La instruccin glClear (mask); limpia el buffer. Por ejemplo: glClear
(GL_COLOR_BUFFER_BIT);
7.1.3. Completar Dibujo
Para ellos se usan las siguientes instrucciones:
16
-
7/23/2019 Programacin Orientada a Objetos.doc
17/25
glFlush (); //llama a ejecucin a los comandos OpenGL, sin
garantizar que se completen en tiempo finito.
glFinish (); //fuerza que TODOS los comandos OpenGL se terminen
de ejecutar; no contina hasta que todos estn terminados.
7.2. Sistema de Coordenadas
7.2.1. Cambio de Tamao
Cuando se inicializa, se mueve o se cambia de ubicacin una ventana, el
sistema de ventana genera un evento avisando el cambio.
Si se esta utilizando la librera GLUT esta notificacin es automtica, solo
hay que registrar la funcin callback:
glutReshapeFunc (mi_redibujar);
La funcin de callbackrecibe el alto y ancho de la nueva ventana.
La funcin glViewPort() ajusta el rectngulo de dibujo para que utilice toda
la ventana.
La funcin gluOrtho2D() pone el origen (0,0) en la esquina izquierda
inferior y (w,h) como la esquina derecha superior.
7.3. Primitivas OpenGL
Son usadas para realizar los dibujos que se desean realizar. Las primitivasson: puntos, lneas y polgonos.
Estas primitivas se describen por sus vrtices: coordenadas que definen
punto, extremos de segmentos de lnea y esquinas de polgonos.
Puntos: nmeros de punto flotante llamados vertex. Todos los
clculos se realizan con vectores tridimensionales, si no se
define z, se asume su valor 0.
Lneas: son en realidad segmentos de recta, y no como una
extensin al infinito como en matemticas. Vrtices definen
puntos extremos de cada segmento. Si se definen lneas
conectadas se utiliza nicamente el punto de finalizacin de
cada lnea.
Rectngulos: OpenGL provee una primitiva para dibujar
directamente un rectngulo relleno:
void glRect {s,i,f,d} (x1,y1,x2,y2);
Polgonos: reas encerradas por lazo cerrado de segmentos de
recta, con vrtices indicando extremos de segmentos que lo
forman. Los polgonos se dibujan rellenos por defecto.
17
-
7/23/2019 Programacin Orientada a Objetos.doc
18/25
Hay funciones avanzadas para crear polgonos huecos,
colores distintos para distintas caras, etc. Poseen restricciones:
Los bordes no pueden intersectarse.
Solo polgonos convexos, es decir, si dados dos
puntos internos, el segmento que los une esta
tambin en el interior.
7.3.1. Implementacin de Primitivas
Vrtices
Para los vrtices se utiliza el siguiente comando:
glVertex {2,3,4} {sifd} [v] (coordenadas);
Esta instruccin, se utiliza siempre entre glBegin() glEnd().
Parmetros de glBegin()
Los parmetros de glBegin() son los siguientes:
Tamao de un Punto
18
-
7/23/2019 Programacin Orientada a Objetos.doc
19/25
El tamao de un punto se modifica con:
void glPointSize (GLfloat size); //el argumento tiene que ser
>0.0 y como defecto es igual a 1.0.
Modificar Lneas
El ancho de la lnea se puede cambiar con:
void glLineWidth (GLfloat size);
Para cambiar la trama:
glLineStipple (1, 0x3f07);
glEnable (GL_LINE_STIPPLE);
7.3.2. Primitivas: Patrones de Relleno
El patrn es una serie de 16 ceros y unos:
1 => hay que dibujar un punto.
0 => no hay que dibujar un punto.
El patrn puede ser escalado utilizando un factor de escala entre 1 y 255
Cada subserie de unos y ceros se repite segn el factor de
escala.
Patrones de Lnea
Convertimos los pixels a dibujar en 1 y los dems en 0.
Por ejemplo para realizar la siguiente trama:
En binario sera:
1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1
Convertimos este binario en hexadecimal y nos queda glLineStipple (1,
0xE7E7);
Patrones de Relleno de Polgonos
19
-
7/23/2019 Programacin Orientada a Objetos.doc
20/25
Los polgonos pueden rellenarse con un patrn de 32x32 bits:
glPolygonStipple (const GLubyte *mask);
Y para activarlo, hacemos:
glEnable (GL_POLYGON_STIPPLE);
7.4. Analoga de la cmara
Viewing : apuntar a lo que se desea fotografiar.
Modeling : ajustar la escena en la composicin.
Projection : se elije el lente y se ajusta el zoom.
Viewport : se determina el tamao final de la impresin de la
foto.
7.5. Transformaciones de Vrtices en OpenGL
Transformacin de Vista: se logra con la instruccin:
void gluLookAt(GLdouble eyex, GLdouble eyey, GLdoubleeyez, GLdouble centerx, GLdouble centery, GLdouble
centerz, GLdouble upx, GLdouble upy, GLdouble upz);
Posicin de la Cmara, Punto de Referencia, Direccin arriba.
Transformacin de Modelo: utilizadas para posicionar y orientar el
modelo, como rotar, trasladar o escalar.
void glTranslatef{fd} (TYPE x, TYPE y, TYPE z);
void glRotate {fd} (TYPE angle, TYPE x, TYPE y, TYPE z); void glScale {fd} (TYPE x, TYPE y, TYPE z);
Transformacin de Proyeccin: determina como se proyectar el
objeto en la pantalla.
Existen dos tipos bsicos:
Perspectiva : hace que los objetos ms lejanos se vean ms
pequeos.
glFrustrum(GLdouble left, GLdouble right, GLdoublebottom, GLdouble top, GLdouble near, GLdouble far)
20
-
7/23/2019 Programacin Orientada a Objetos.doc
21/25
Antes de usarse hay que indicar en reshape() el comando
glMatrixMode() con el argumento GL_PROJECTION, as afecta a
la matriz de proyeccin. Para que afecte al modelo se debe
agregar el argumento GL_MODELVIEW. El comando
glLoadIdentity() inicializa la matriz de transformacin actual.
Ortogonal: mantiene las dimensiones reales de los objetos.
El volumen de visualizacin es un paraleleppedo. No cambia el
tamao del objeto.
glOrtho (GLdouble left, GLdouble right, GLdouble bottom,
GLdouble top, GLdouble near, GLdouble far)
7.6. Primitivas OpenGL
Son usadas para realizar los dibujos que se desean realizar. Las primitivas
son: puntos, lneas y polgonos.
Estas primitivas se describen por sus vrtices: coordenadas que definen
punto, extremos de segmentos de lnea y esquinas de polgonos.
Puntos: nmeros de punto flotante llamados vertex. Todos los
clculos se realizan con vectores tridimensionales, si no se
define z, se asume su valor cero.
Lneas: son en realidad segmentos de recta, y no como una
extensin al infinito como en matemticas. Vrtices definen
puntos extremos de cada segmento.
Polgonos: reas encerradas por lazo cerrado de segmentos de
recta, con vrtices indicando extremos de segmentos que lo
forman. Los polgonos se dibujan rellenos por defecto.
Hay funciones avanzadas para crear polgonos huecos,
colores distintos para distintas caras, etc. Poseen restricciones:
Orillas no pueden intersectarse.
Solo polgonos convexos, es decir, si dados dos
puntos internos, el segmento que los une esta
tambin en el interior.
7.6.1. Definicin de los vrtices
La instruccin principal usada para ello es:
glVertex {1,2,3,4} {b,s,i,d} [v] (TYPE coords)
21
-
7/23/2019 Programacin Orientada a Objetos.doc
22/25
Donde las coordenadas posibles son 1, 2, 3 4, y los tipos de datos son
sufijos.
Ejemplo:
glVertex2s (2,3);
GLdouble dvect[3] = {5.0,9.0,1992.0};glVertex3dv (dvect);
Las llamadas que se hacen a glVertexson efectivas solo entre las
instrucciones glBegin() y glEnd(), pues los vrtices son en realidad
argumentos de estas instrucciones.
7.7. Representacin y Matrices
Escalamiento
Escalamiento
x= sx x y= sy y
Notacin matricial
P=S P
Rotacin
Rotacin
x=x cos(a) y sin(a) y=x sin(a) + y cos(a)
Notacin matricial
22
Sx=2
Sy=1
Sx=5/2
Sy=3/2
=
y
x
aa
aa
y
x
)cos()sin(
)sin()cos(
'
'a
=
y
x
s
s
y
x
y
x
0
0
'
'
-
7/23/2019 Programacin Orientada a Objetos.doc
23/25
Traslacin
Traslacin
x = x + dx
y = y + dy
23
-
7/23/2019 Programacin Orientada a Objetos.doc
24/25
7.8. Coordenadas homogneas
Todo punto 2D (P1) puede ser representado por cualquierpunto a lo largo del rayo 3D (llamado espacio homogneo)
Las coordenadas ordinarias corresponden al punto donde z=1
Usando coordenadas homogneas cada punto pasa a ser:
Donde
X = (x*h) / h
X = (x*h) / h
Para este caso, h = 0 no est permitido. Para nuestros casos h = 1. Reescribiendo las transformaciones en coordenadas
homogneas:
Nota : Transformaciones respecto al origen.
24
h
y
x
y
xh
h
=
100
0)cos()sin(
0)sin()cos(
)( aa
aa
aR
=
100
00
00
),(y
x
yxs
s
ssS
=
100
10
01
),(y
x
yxd
d
ddT
-
7/23/2019 Programacin Orientada a Objetos.doc
25/25
7.9. Bases de la GLUT (pasos a seguir)
Estructura de la aplicacin. Configurar y abrir una ventana.
Iniciar estados en OpenGL.
Registrar las funciones callback:
render.
resize.
Input: keyboard, mouse, etc.
Definir el ciclo de procesamiento de eventos.