Tuesday, March 06, 2007


*** MODELADO GEOMÉTRICO ***

Una transformación geométrica, es una aplicación que hace corresponder a cada punto del plano otro punto del plano. Así, los objetos se transforman en otros objetos.

Las transformaciones más usuales son las traslaciones, rotaciones y escalado. Las matrices que caracterizan dichas transformaciones se clasifican en dos grupos :Transformaciones 2D Básicas y Transformaciones 3D.

En 2D tenemos:

· Traslación

· Escalado

· Rotación

Transformaciones 3D Básicas

· Traslación

· Escalado

· Rotación en x

· Rotación en y

· Rotación en z

El comando glTranslatef permite trasladar a un objeto hacia un nuevo origen. Su sintaxis es:

glTranslatef( GLfloat x, GLfloat y, GLfloat z); en donde las variables x, y ,z indican cuanto se ha de mover el objeto desde un origen antes situado.

Para escalar un objeto existe el comando glScalef , que permite llevar acabo un escalamiento no uniforme. Cuenta con la siguiente sintaxis:

void glScale( GLFloat , Gfloat y ,GLFloat z )

Los parametros y,x y z especifican el factor de escala a lo largo de los ejes x, y, y z respectivamente.

Ahora bien, para rotar a un objeto se cuenta con el comando

glRotatef, que tiene la siguiente sintaxis: glRotatef(GLfloat angle, GLfloat x, GLfloat y, Glfloar z); en donde angle se refiere a el ángulo que se desea rotar el objeto declsarandolo asì muismo como tipo real ; así tambien los tres subsecuentes especifican la rotaciòn a través de algun eje en especifico dando lugar asì al vector.

3.

La representación de las primitivas y de los objetos se realiza transformando las coordenadas originales. Estas transformaciones pueden originarse debido a cambios en el modelo o a las propiedades de la cámara.

OpenGL dispone de tres matrices para realizar el proceso. Se especifican por los nombres:

GL_MODELVIEW: la matriz que contiene las transformaciones originadas por los cambios de modelado y posición de la cámara.

GL_PROJECTION: la matriz con las transformaciones que realizan la proyección de la escena de 3 a 2 dimensiones.

GL_TEXTURE: para transformaciones en las coordenadas de textura.

Por ello, antes de realizar una operación de transformación es necesario indicar sobre que matriz se va a realizar. Se especifica con la función glMatrixMode(Glenum mode) que tiene como argumento una de las tres constantes enumeradas. Se comporta como un estado, por tanto, hasta que se especifique un nuevo estado todas las transformaciones se realizan sobre la última matriz especificada.

Para poder intercambiar entre una y otra matriz se emplea el comando glMatrixMode(Glenum mode) y posteriormente se inicia la matriz con glLoadIdentity()

A continuación se muestra un ejemplo de ello:

void reshape(int width, int height) {

glViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(60.0, (GLfloat)height / (GLfloat)width, 1.0, 128.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0.0, 1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

}

Se observa que se utiliza la función glMatrixMode() dos veces, la primera con GL_PROJECTION y la segunda con GL_MODELVIEW .Despues de la primera llamada a glMatrixMode(), la matriz sobre la que se realizarán las transformaciones es GL_PROJECTION, la primera operación es inicializar la matriz con la función glLoadIdentity() que carga la matriz identidad y se define una proyección perspectiva con la función gluPerspective().

Despues de la segunda llamada a glMatrixMode(), la matriz sobre la que se realizarán las transformaciones es GL_MODELVIEW, igualmente, la primera operación es inicializar la matriz con la función glLoadIdentity() y a continuación se establece la posición de la cámaracon gluLookAt().

4.

En la función display() se encuentran las llamadas a dos funciones de matrices que todavía no han sido comentadas. Se trata de glPushMatrix() y glPopMatrix(). Para comprender su funcionamiento, primero se va a experimentar que es lo que ocurre cuando no están dichas llamadas. Para ello se comentan en la función display() ambas llamadas:

void display(void) {

...

// glPushMatrix();

...

glTranslatef(0.0, 0.0, .5);

...

// glPopMatrix();

glutSwapBuffers();

}

Al ejecutar de nuevo la aplicación, primeramente tiene el mismo aspecto que sin comentar las llamadas, pero si obligamos a que se llame varias veces a la función display(), por ejemplo pulsando la tecla “c” (que activa y desactiva los polígonos posteriores del objeto), vemos que además de producirse el efecto de cambiar el modo GL_CULL_FACE, el objeto se va moviendo progresivamente a lo largo de eje “Z”.

La razón de este movimiento es que en la función display está incluida una llamada a glTranslatef() que se utiliza para posicionar uno de los objetos. Como se ha explicado anteriormente, las funciones de traslación multiplican la matriz actual por una matriz de traslación creada con los argumentos que se le pasan, por tanto, sucesivas llamadas a la función display() provocan sucesivas multiplicaciones de la matriz actual con el efecto que se observa de incrementar la traslación.

Para solucionar este problema OpenGL dispone de unos stacks o pilas de matrices, que ermiten almacenar y recuperar una matriz anterior. Aunque OpenGL dispone de pilas para las matrices GL_MODELVIEW y GL_PROJECTION, sólo se suele utilizar la pila de GL_MODELVIEW. Una pila es un almacén con funcionamiento LIFO, el último en entrar es el primero en salir, por lo que suele comparar a una pila de platos en la que sólo se puede dejar uno encima de la pila o coger el superior que es el último depositado. La pila de matrices tiene el mismo funcionamiento sustituyendo los platos por matrices. La matriz superior de la pila es sobre la que se aplican las distintas transformaciones, multiplicándola por la matriz que generan las distintas funciones.

Para poder guardar una determinada matriz y posteriormente recuperarla OpenGLdispone de las dos funciones comentadas: glPushMatrix() y glPopMatrix().

La función glPushMatrix() realiza una copia de la matriz superior y la pone encima de la pila, de tal forma que las dos matrices superiores son iguales. En la figura 1 se observa la pila en la situación inicial con una sola matriz, al llamar a la función glPushMatrix() se duplica la matriz superior. Las siguientes transformaciones que se realizan se aplican sólo a la matriz superior de la pila, quedando la anterior con los valores que tenía en el momento de llamar a la función glPushMatrix().

La función glPopMatrix() elimina la matriz superior, quedando en la parte superior de

la pila la matriz que estaba en el momento de llamar a la función glPushMatrix().

En la función display() al llamar a la función glPushMatrix() se realiza una copia de la matriz actual. La traslación en el eje Z se realiza en la matriz superior de la pila, es decir, en la copia de la matriz, de tal forma que al llamar a la función glPopMatrix(), como se muestra en la figura 1, se elimina la matriz superior, que es la que tenía el efecto de esta transformación, quedando la matriz que estaba en el momento de llamar a glPushMatrix(). Al descomentar las llamadas a las funciones glPushMatrix() y glPopMatrix() las transformaciones realizadas entre ambas no afectan al resto de la aplicación.

Para crear cualquier figura geométrica en OpenGL hay que definir los vértices entre un par de llamadas a las funciones glBegin() y glEnd(). A la función glBegin se le puede pasar un argumento que determina qué tipo de figura geométrica se va construir. Después se definen los vértices mediante llamadas a la función glVertex.

Ejemplo.

// El siguiente código despliegará un punto en la pantalla localizado en:  [100, 100, -25]

glBegin(GL_POINTS);
glVertex3f(100.0f, 100.0f, -25.0f);
glEnd( );

 // El siguiente código despliegará un triángulo en la pantalla 
glBegin(GL_TRIANGLES);
glVertex3f(100.0f, 100.0f, 0.0f);
glVertex3f(150.0f, 100.0f, 0.0f);
glVertex3f(125.0f, 50.0f, 0.0f);
glEnd( );
 

A continuación definimos formalmente las funciones utilizadas.

void glBegin (GLenum mode);

Marca el principio de una lista de vértices que describen una primitivageométrica. El parámetro mode índica el tipo de primitiva, que puede recibir.

void glEnd (void); Marca el final de una lista de vértices.

6.

Un modelo geometrico describe la figura de un objeto fisico o matematico
mediante conceptos geometricos. El modelado geometrico es la construcion o
uso de modelos geometricos.
Los modelos Geometricos se suelen usar en computacion grafica,disenio
asistido por computadora, asi como en muchas otras ramas aplicadas, como es
procesamiento de imagenes medicas.
 
 
Los modelos geometricos se pueden construir para objetos de cualquier
dimension en cualquier espacio geometricos. Asi los diferentes tipos de
modelados geometricos se
distinguen  justo en la dimension para la cual han sido construido. Tanto
los modelos para   dimensiones de 2D y 3D son usados mucho en computacion
grafica.
 
 
Los modelos geometricos se  distinguinguen mucho  de los modelos orientados
a objetos, debido a que esos modelos  definen la figura usando
implicitamente
un algoritmo.  Tambien contrastan con las iamgenes digitales y los modelos
volumetricos, asi como con modelos matematicos implicitos  como es el set
zero
de un polinomio arbitrario. Sin embargo, la distincion es en ocasiones un
poco confusa, por ejemplo figuras geometricas pueden ser representadas por
objetos,
una imagen digital puede ser interpretada como una coleccion de cuadrados de
colores< style="">  figuras geometricas, como puede ser un circulo, esta
definido por una ecuacion matematica implicita. Asimismo, el modelado de un
objeto fractal requiere de una combiancion de difernetes tipos de tecnicas.

8.

glClearColor - Especifica  valores para limpiar  el buffer de color.
Su especificacion esta dada por:
 
void glClearColor( GLclampf  red, GLclampf green, GLclampf blue,Glclampf alpha )
 
Los parámetros son:  red, green, blue, alpha
 
Especifica  los valores rojo, verde, azul y alpha que son usados cuando  el buffer de  color es reseteado.  Los valores iniciales son todos cero.
 
Descripción: GLClearColor especifica los valores red, green, blue y alpha que serán usados por glClear para limpiar los colores del buffer. Los valores especificados por glClearColor están dentro del rango de [0,1].
 
 
glClear - Limpia los buffers para poner nuevos valores.
 
C ESPECICACION:void glClear(    GLbitfield mask   )
 
PARAMETROS: mask       Es una serie de Operaciones Bitwise de las masks que indican  los buffers que deben ser vaciados.
Las 4 mascaras son GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT, GL_ACCUM_BUFFER_BIT, and
                               GL_STENCIL_BUFFER_BIT.
 
DESCRIPCION: glClear  pone en el área del bitplane los valores antes seccionados por el             glClearColor, glClearIndex, glClearDepth,glClearStencil,y glClearAccum. Múltiples bufferS de color
pueden ser limpiados simultáneamente al seleccionar mas de un buffer a la vez utilizando la herramienta de glDrawBuffer.
 
 glClear toma un solo argumento que es el resultante de la operación
bitwise OR de diversos valores, este argumento indica cual de los buffers ha de ser limpiado.
 
 
               
EJEMPLO DE CODIGO USANDO glClear y glClearColor
 
 
 
               #include 
#include 
#include 
using namespace std;
 
// function prototypes
void disp(void);
void keyb(unsigned char key, int x, int y);
 
 
// window identifier
static int win;
 
int main(int argc, char **argv){
 
  //////////
  // INIT //
  //////////
 
  // initialize glut
  glutInit(&argc, argv);
 
  // specify the display mode to be RGB and single buffering
  // we use single buffering since this will be non animated
  glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
 
  // define the size
  glutInitWindowSize(500,500);
 
  // the position where the window will appear
  glutInitWindowPosition(100,100);
 
 
  // if we would want fullscreen:
  // glutFullScreen();
 
  // create the window, set the title and keep the
  // window identifier.
  win = glutCreateWindow("Yet another teapot");
 
  //////////////
  // CALLBACK //
  //////////////
 
  glutDisplayFunc(disp);
  glutKeyboardFunc(keyb);
 
  ////////////
  // OPENGL //
  ////////////
 
  // define the color we use to clearscreen
  glClearColor(0.0,0.0,0.0,0.0);
 
 
 
  // enter the main loop
  glutMainLoop();
 
  return 0;
}
 
 
void disp(void){
 
  // do  a clearscreen
  glClear(GL_COLOR_BUFFER_BIT);
 
  // draw something
 
  glutWireTeapot(0.5);
  // glutSolidTeapot(0.5);
  // glutWireSphere(0.5,100,100);
  // glutSolidSphere(0.5,100,100);
  // glutWireTorus(0.3,0.5,100,100);
  // glutSolidTorus(0.3,0.5,100,100);
  // glutWireIcosahedron();
  // glutSolidIcosahedron();
  // glutWireDodecahedron();
  // glutSolidDodecahedron();
  // glutWireCone(0.5,0.5,100,100);
  // glutSolidCone(0.5,0.5,100,100);
  // glutWireCube(0.5);
  // glutSolidCube(0.5);
}
 
void keyb(unsigned char key, int x, int y){
  cout << "Pressed key " <<>
")";
  cout <<>
  if(key == 'q'){
    cout << "Got q,so quitting " <<>
    glutDestroyWindow(win);
    exit(0);
  }
9)
glutInit
 
glutInit es utilizada para inicializar la  librería de  GLUT.
Se usa de la siguiente forma:
void glutInit(int *argcp, char **argv);
argcp: es un apuntador a la variable argc del main.
argv: la variable argv sin modificar del main.
Descripción:glutInit inicializara la librería GLUT y negociara una sesión con la ventana
del  sistema .
 
 
glutInitDisplayMode: Asigna el modo de display inicial.
Se utiliza de la siguiente forma:
void glutInitDisplayMode(unsigned int mode);
mode: Es el modo de display. Algunos ejemplos son:
GLUT_RGBA: Mascara bit para seleccionar una ventana de modo RBGA.
GLUT_STEREO: Mascara de bit para seleccionar una ventana de tipo stereo.
 
glutInitWindowPosition pone el valor inicial de la ventana . La sintaxis para su uso es:
 
glutInitWindowPosition(x,y) x, y: localización de la ventana en pixeles.
 
 
glutInitWindowSize — Pone el tamaño de la ventana inicial.
glutInitWindowSize(width,height)
 
glutCreateWindow (): Crea una ventana de nivel superior. La sintaxis es: int glutCreateWindow(char *name)
 
glutDisplayFunc(): Fija el callback del display para la ventana en cuestion.Se utiliza de la siguiente forma:
void glutDisplayFunc(void (*func)(void));
 
func es la nueva funcion de callback.
Cuando GLUT determina que el plano normal de la ventan necesita volverse a desplejar, el display callback para la ventana es llamado.
 
glutReshapeFunc() pone el callback de  la redefinicion del tamanio para la ventana en cuestion.
 
void glutReshapeFunc(void (*func)(int width, int height));
func: es la nueva funcion  reshape callback
 
El  reshape callback es llamado cuando se cambia el tamanio de la ventana.
 
glutKeyboardFunc(): Pone el callback del teclado para la ventana actual.
void glutKeyboardFunc(void (*func)(unsigned char key,int x, int y));
func: es la nueva funcion  teclado callback
glutMainLoop() mete el  loop del  evento de procesameinto de GLUT. Una vez que es llamada esta rutina nunca retornara
 
10)
 
Callback: Se dice que existe un callback, cuando ocurre un cierto  evento y uno programa la respuesta que dará el programa.
Uno define que función será llamada (called) cuando sucede un evento.  Ahora bien, Glut tiene una serie de callbacks bien definidas.
ejemplo:
void glutDisplayFunc(void (*func)(void));
Esto especifica la función que necesita ser llamada cuando se redibuja la ventana.

BILIOGRAFIA

http://html.rincondelvago.com/transformaciones-geometricas.html

http://wwwdi.ujaen.es/asignaturas/igaplicada/pdf/tema3.pdf

http://www.tecnun.es/asignaturas/grafcomp/OpenGL/practica/capitulo3.pdf


*** MODELADO GEOMÉTRICO ***

Una transformación geométrica, es una aplicación que hace corresponder a cada punto del plano otro punto del plano. Así, los objetos se transforman en otros objetos.

Las transformaciones más usuales son las traslaciones, rotaciones y escalado. Las matrices que caracterizan dichas transformaciones se clasifican en dos grupos :Transformaciones 2D Básicas y Transformaciones 3D.

En 2D tenemos:

· Traslación

· Escalado

· Rotación

Transformaciones 3D Básicas

· Traslación

· Escalado

· Rotación en x

· Rotación en y

· Rotación en z

El comando glTranslatef permite trasladar a un objeto hacia un nuevo origen. Su sintaxis es:

glTranslatef( GLfloat x, GLfloat y, GLfloat z); en donde las variables x, y ,z indican cuanto se ha de mover el objeto desde un origen antes situado.

Para escalar un objeto existe el comando glScalef , que permite llevar acabo un escalamiento no uniforme. Cuenta con la siguiente sintaxis:

void glScale( GLFloat , Gfloat y ,GLFloat z )

Los parametros y,x y z especifican el factor de escala a lo largo de los ejes x, y, y z respectivamente.

Ahora bien, para rotar a un objeto se cuenta con el comando

glRotatef, que tiene la siguiente sintaxis: glRotatef(GLfloat angle, GLfloat x, GLfloat y, Glfloar z); en donde angle se refiere a el ángulo que se desea rotar el objeto declsarandolo asì muismo como tipo real ; así tambien los tres subsecuentes especifican la rotaciòn a través de algun eje en especifico dando lugar asì al vector.

3.

La representación de las primitivas y de los objetos se realiza transformando las coordenadas originales. Estas transformaciones pueden originarse debido a cambios en el modelo o a las propiedades de la cámara.

OpenGL dispone de tres matrices para realizar el proceso. Se especifican por los nombres:

GL_MODELVIEW: la matriz que contiene las transformaciones originadas por los cambios de modelado y posición de la cámara.

GL_PROJECTION: la matriz con las transformaciones que realizan la proyección de la escena de 3 a 2 dimensiones.

GL_TEXTURE: para transformaciones en las coordenadas de textura.

Por ello, antes de realizar una operación de transformación es necesario indicar sobre que matriz se va a realizar. Se especifica con la función glMatrixMode(Glenum mode) que tiene como argumento una de las tres constantes enumeradas. Se comporta como un estado, por tanto, hasta que se especifique un nuevo estado todas las transformaciones se realizan sobre la última matriz especificada.

Para poder intercambiar entre una y otra matriz se emplea el comando glMatrixMode(Glenum mode) y posteriormente se inicia la matriz con glLoadIdentity()

A continuación se muestra un ejemplo de ello:

void reshape(int width, int height) {

glViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(60.0, (GLfloat)height / (GLfloat)width, 1.0, 128.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0.0, 1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

}

Se observa que se utiliza la función glMatrixMode() dos veces, la primera con GL_PROJECTION y la segunda con GL_MODELVIEW .Despues de la primera llamada a glMatrixMode(), la matriz sobre la que se realizarán las transformaciones es GL_PROJECTION, la primera operación es inicializar la matriz con la función glLoadIdentity() que carga la matriz identidad y se define una proyección perspectiva con la función gluPerspective().

Despues de la segunda llamada a glMatrixMode(), la matriz sobre la que se realizarán las transformaciones es GL_MODELVIEW, igualmente, la primera operación es inicializar la matriz con la función glLoadIdentity() y a continuación se establece la posición de la cámaracon gluLookAt().

4.

En la función display() se encuentran las llamadas a dos funciones de matrices que todavía no han sido comentadas. Se trata de glPushMatrix() y glPopMatrix(). Para comprender su funcionamiento, primero se va a experimentar que es lo que ocurre cuando no están dichas llamadas. Para ello se comentan en la función display() ambas llamadas:

void display(void) {

...

// glPushMatrix();

...

glTranslatef(0.0, 0.0, .5);

...

// glPopMatrix();

glutSwapBuffers();

}

Al ejecutar de nuevo la aplicación, primeramente tiene el mismo aspecto que sin comentar las llamadas, pero si obligamos a que se llame varias veces a la función display(), por ejemplo pulsando la tecla “c” (que activa y desactiva los polígonos posteriores del objeto), vemos que además de producirse el efecto de cambiar el modo GL_CULL_FACE, el objeto se va moviendo progresivamente a lo largo de eje “Z”.

La razón de este movimiento es que en la función display está incluida una llamada a glTranslatef() que se utiliza para posicionar uno de los objetos. Como se ha explicado anteriormente, las funciones de traslación multiplican la matriz actual por una matriz de traslación creada con los argumentos que se le pasan, por tanto, sucesivas llamadas a la función display() provocan sucesivas multiplicaciones de la matriz actual con el efecto que se observa de incrementar la traslación.

Para solucionar este problema OpenGL dispone de unos stacks o pilas de matrices, que ermiten almacenar y recuperar una matriz anterior. Aunque OpenGL dispone de pilas para las matrices GL_MODELVIEW y GL_PROJECTION, sólo se suele utilizar la pila de GL_MODELVIEW. Una pila es un almacén con funcionamiento LIFO, el último en entrar es el primero en salir, por lo que suele comparar a una pila de platos en la que sólo se puede dejar uno encima de la pila o coger el superior que es el último depositado. La pila de matrices tiene el mismo funcionamiento sustituyendo los platos por matrices. La matriz superior de la pila es sobre la que se aplican las distintas transformaciones, multiplicándola por la matriz que generan las distintas funciones.

Para poder guardar una determinada matriz y posteriormente recuperarla OpenGLdispone de las dos funciones comentadas: glPushMatrix() y glPopMatrix().

La función glPushMatrix() realiza una copia de la matriz superior y la pone encima de la pila, de tal forma que las dos matrices superiores son iguales. En la figura 1 se observa la pila en la situación inicial con una sola matriz, al llamar a la función glPushMatrix() se duplica la matriz superior. Las siguientes transformaciones que se realizan se aplican sólo a la matriz superior de la pila, quedando la anterior con los valores que tenía en el momento de llamar a la función glPushMatrix().

La función glPopMatrix() elimina la matriz superior, quedando en la parte superior de

la pila la matriz que estaba en el momento de llamar a la función glPushMatrix().

En la función display() al llamar a la función glPushMatrix() se realiza una copia de la matriz actual. La traslación en el eje Z se realiza en la matriz superior de la pila, es decir, en la copia de la matriz, de tal forma que al llamar a la función glPopMatrix(), como se muestra en la figura 1, se elimina la matriz superior, que es la que tenía el efecto de esta transformación, quedando la matriz que estaba en el momento de llamar a glPushMatrix(). Al descomentar las llamadas a las funciones glPushMatrix() y glPopMatrix() las transformaciones realizadas entre ambas no afectan al resto de la aplicación.

Para crear cualquier figura geométrica en OpenGL hay que definir los vértices entre un par de llamadas a las funciones glBegin() y glEnd(). A la función glBegin se le puede pasar un argumento que determina qué tipo de figura geométrica se va construir. Después se definen los vértices mediante llamadas a la función glVertex.

Ejemplo.

// El siguiente código despliegará un punto en la pantalla localizado en:  [100, 100, -25]

glBegin(GL_POINTS);
glVertex3f(100.0f, 100.0f, -25.0f);
glEnd( );

 // El siguiente código despliegará un triángulo en la pantalla 
glBegin(GL_TRIANGLES);
glVertex3f(100.0f, 100.0f, 0.0f);
glVertex3f(150.0f, 100.0f, 0.0f);
glVertex3f(125.0f, 50.0f, 0.0f);
glEnd( );
 

A continuación definimos formalmente las funciones utilizadas.

void glBegin (GLenum mode);

Marca el principio de una lista de vértices que describen una primitivageométrica. El parámetro mode índica el tipo de primitiva, que puede recibir.

void glEnd (void); Marca el final de una lista de vértices.

6.

Un modelo geometrico describe la figura de un objeto fisico o matematico
mediante conceptos geometricos. El modelado geometrico es la construcion o
uso de modelos geometricos.
Los modelos Geometricos se suelen usar en computacion grafica,disenio
asistido por computadora, asi como en muchas otras ramas aplicadas, como es
procesamiento de imagenes medicas.
 
 
Los modelos geometricos se pueden construir para objetos de cualquier
dimension en cualquier espacio geometricos. Asi los diferentes tipos de
modelados geometricos se
distinguen  justo en la dimension para la cual han sido construido. Tanto
los modelos para   dimensiones de 2D y 3D son usados mucho en computacion
grafica.
 
 
Los modelos geometricos se  distinguinguen mucho  de los modelos orientados
a objetos, debido a que esos modelos  definen la figura usando
implicitamente
un algoritmo.  Tambien contrastan con las iamgenes digitales y los modelos
volumetricos, asi como con modelos matematicos implicitos  como es el set
zero
de un polinomio arbitrario. Sin embargo, la distincion es en ocasiones un
poco confusa, por ejemplo figuras geometricas pueden ser representadas por
objetos,
una imagen digital puede ser interpretada como una coleccion de cuadrados de
colores< style="">  figuras geometricas, como puede ser un circulo, esta
definido por una ecuacion matematica implicita. Asimismo, el modelado de un
objeto fractal requiere de una combiancion de difernetes tipos de tecnicas.

8.

glClearColor - Especifica  valores para limpiar  el buffer de color.
Su especificacion esta dada por:
 
void glClearColor( GLclampf  red, GLclampf green, GLclampf blue,Glclampf alpha )
 
Los parámetros son:  red, green, blue, alpha
 
Especifica  los valores rojo, verde, azul y alpha que son usados cuando  el buffer de  color es reseteado.  Los valores iniciales son todos cero.
 
Descripción: GLClearColor especifica los valores red, green, blue y alpha que serán usados por glClear para limpiar los colores del buffer. Los valores especificados por glClearColor están dentro del rango de [0,1].
 
 
glClear - Limpia los buffers para poner nuevos valores.
 
C ESPECICACION:void glClear(    GLbitfield mask   )
 
PARAMETROS: mask       Es una serie de Operaciones Bitwise de las masks que indican  los buffers que deben ser vaciados.
Las 4 mascaras son GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT, GL_ACCUM_BUFFER_BIT, and
                               GL_STENCIL_BUFFER_BIT.
 
DESCRIPCION: glClear  pone en el área del bitplane los valores antes seccionados por el             glClearColor, glClearIndex, glClearDepth,glClearStencil,y glClearAccum. Múltiples bufferS de color
pueden ser limpiados simultáneamente al seleccionar mas de un buffer a la vez utilizando la herramienta de glDrawBuffer.
 
 glClear toma un solo argumento que es el resultante de la operación
bitwise OR de diversos valores, este argumento indica cual de los buffers ha de ser limpiado.
 
 
               
EJEMPLO DE CODIGO USANDO glClear y glClearColor
 
 
 
               #include 
#include 
#include 
using namespace std;
 
// function prototypes
void disp(void);
void keyb(unsigned char key, int x, int y);
 
 
// window identifier
static int win;
 
int main(int argc, char **argv){
 
  //////////
  // INIT //
  //////////
 
  // initialize glut
  glutInit(&argc, argv);
 
  // specify the display mode to be RGB and single buffering
  // we use single buffering since this will be non animated
  glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
 
  // define the size
  glutInitWindowSize(500,500);
 
  // the position where the window will appear
  glutInitWindowPosition(100,100);
 
 
  // if we would want fullscreen:
  // glutFullScreen();
 
  // create the window, set the title and keep the
  // window identifier.
  win = glutCreateWindow("Yet another teapot");
 
  //////////////
  // CALLBACK //
  //////////////
 
  glutDisplayFunc(disp);
  glutKeyboardFunc(keyb);
 
  ////////////
  // OPENGL //
  ////////////
 
  // define the color we use to clearscreen
  glClearColor(0.0,0.0,0.0,0.0);
 
 
 
  // enter the main loop
  glutMainLoop();
 
  return 0;
}
 
 
void disp(void){
 
  // do  a clearscreen
  glClear(GL_COLOR_BUFFER_BIT);
 
  // draw something
 
  glutWireTeapot(0.5);
  // glutSolidTeapot(0.5);
  // glutWireSphere(0.5,100,100);
  // glutSolidSphere(0.5,100,100);
  // glutWireTorus(0.3,0.5,100,100);
  // glutSolidTorus(0.3,0.5,100,100);
  // glutWireIcosahedron();
  // glutSolidIcosahedron();
  // glutWireDodecahedron();
  // glutSolidDodecahedron();
  // glutWireCone(0.5,0.5,100,100);
  // glutSolidCone(0.5,0.5,100,100);
  // glutWireCube(0.5);
  // glutSolidCube(0.5);
}
 
void keyb(unsigned char key, int x, int y){
  cout << "Pressed key " <<>
")";
  cout <<>
  if(key == 'q'){
    cout << "Got q,so quitting " <<>
    glutDestroyWindow(win);
    exit(0);
  }
9)
glutInit
 
glutInit es utilizada para inicializar la  librería de  GLUT.
Se usa de la siguiente forma:
void glutInit(int *argcp, char **argv);
argcp: es un apuntador a la variable argc del main.
argv: la variable argv sin modificar del main.
Descripción:glutInit inicializara la librería GLUT y negociara una sesión con la ventana
del  sistema .
 
 
glutInitDisplayMode: Asigna el modo de display inicial.
Se utiliza de la siguiente forma:
void glutInitDisplayMode(unsigned int mode);
mode: Es el modo de display. Algunos ejemplos son:
GLUT_RGBA: Mascara bit para seleccionar una ventana de modo RBGA.
GLUT_STEREO: Mascara de bit para seleccionar una ventana de tipo stereo.
 
glutInitWindowPosition pone el valor inicial de la ventana . La sintaxis para su uso es:
 
glutInitWindowPosition(x,y) x, y: localización de la ventana en pixeles.
 
 
glutInitWindowSize — Pone el tamaño de la ventana inicial.
glutInitWindowSize(width,height)
 
glutCreateWindow (): Crea una ventana de nivel superior. La sintaxis es: int glutCreateWindow(char *name)
 
glutDisplayFunc(): Fija el callback del display para la ventana en cuestion.Se utiliza de la siguiente forma:
void glutDisplayFunc(void (*func)(void));
 
func es la nueva funcion de callback.
Cuando GLUT determina que el plano normal de la ventan necesita volverse a desplejar, el display callback para la ventana es llamado.
 
glutReshapeFunc() pone el callback de  la redefinicion del tamanio para la ventana en cuestion.
 
void glutReshapeFunc(void (*func)(int width, int height));
func: es la nueva funcion  reshape callback
 
El  reshape callback es llamado cuando se cambia el tamanio de la ventana.
 
glutKeyboardFunc(): Pone el callback del teclado para la ventana actual.
void glutKeyboardFunc(void (*func)(unsigned char key,int x, int y));
func: es la nueva funcion  teclado callback
glutMainLoop() mete el  loop del  evento de procesameinto de GLUT. Una vez que es llamada esta rutina nunca retornara
 
10)
 
Callback: Se dice que existe un callback, cuando ocurre un cierto  evento y uno programa la respuesta que dará el programa.
Uno define que función será llamada (called) cuando sucede un evento.  Ahora bien, Glut tiene una serie de callbacks bien definidas.
ejemplo:
void glutDisplayFunc(void (*func)(void));
Esto especifica la función que necesita ser llamada cuando se redibuja la ventana.

No comments: