Diferencia entre revisiones de «ManuelRomero/grafica/ej1»

De WikiEducator
Saltar a: navegación, buscar
(Rutinas de incialización : glClearColor(...))
Línea 43: Línea 43:
 
}
 
}
 
</source>
 
</source>
 +
===Rutinas de inicialización de OpenGL y GLUT===
 +
*Los  primeros métodos de la librería glut se invocan al principio
 +
*Sirven para inicalizar la librería.
 +
;void glutInit(int *argcp, char **argv);
 +
:Inicializa la librería GLUT para que pueda usar una sesión con el sistema de ventanas. En caso de que no se pueda retorna un error
 +
:'''''argcp'''''  Es un puntero a la variable argc del main (ver ''int main(char* argv, int argc); Sirve para poder pasar de la línea de comandos valores para GLUT
 +
:'''''argcv''''' Igual que en el caso anterior, pero ahora a la variable '''''argv''''' del ''main()''.
 +
*Toma los valores que le pasamos al main y se los envía a la bibliteca de GLUT
 +
;void glutInitDisplayMode(unsigned int mode);
 +
:Establece el modo de visualización incial.
 +
*Este valor por defecto es RGBA (colores básicos y el canal Alpha
  
 +
;
 +
 +
<source lang=cpp>
 +
  glutInit(&argc, argv);
 +
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); // Initialize the buffers
 +
                                                            // including the depth buffer.
 +
  glutInitWindowSize(500, 500);
 +
  glutInitWindowPosition(100, 100);
 +
  glutCreateWindow("circularAnnuluses.cpp Practica 1");
 +
</source>
 +
;
 
===Mensaje para usuario===
 
===Mensaje para usuario===
 
'''''void printInteraction(void)'''''
 
'''''void printInteraction(void)'''''
Línea 67: Línea 89:
  
 
===Rutinas de incialización : glClearColor(...). glutInit( ...)
 
===Rutinas de incialización : glClearColor(...). glutInit( ...)
;void glutInit(int *argcp, char **argv);
+
 
:Inicializa la librería GLUT para que pueda usar una sesión con el sistema de ventanas. En caso de que no se pueda retorna un error
+
;
+
 
*Es una función propia de '''''OpenGl''''' ''como todas las que empiezan por gl''
 
*Es una función propia de '''''OpenGl''''' ''como todas las que empiezan por gl''
 
*La función glClearColor(float red, float green, flota green, float alpha)
 
*La función glClearColor(float red, float green, flota green, float alpha)
Línea 84: Línea 104:
 
</source>
 
</source>
  
;Los siguintes son métodos de la librería glut que se invocan al principio
 
(MRM Explicar que impliación tienes y como se usan
 
 
 
<source lang=cpp>
 
  glutInit(&argc, argv);
 
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); // Initialize the buffers
 
                                                            // including the depth buffer.
 
  glutInitWindowSize(500, 500);
 
  glutInitWindowPosition(100, 100);
 
  glutCreateWindow("circularAnnuluses.cpp Practica 1");
 
 
</source>
 
 
;Ahora es cuando vamos a hacer funcionar nuestro código
 
;Ahora es cuando vamos a hacer funcionar nuestro código
 
;Dibujando el círculo o disco
 
;Dibujando el círculo o disco

Revisión de 23:47 4 jun 2013

Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg




Practica 2

Enunciado
Se trata de realizar de forma diferente el mismo dibujo
Vamos a dibujar un disco o agujero' ' de tres formas diferentes
Obtenemos la misma imagen, pero de la forma real nos permite modificar facilmente su aspecto
  • Observamos el escenario

OpenGEPractica2.png

Código por partes

  • A continuación se va a explicar el código que genera el escenario anterior
  • Esta explicación también servirá para empezar a entender cómo usar OpenGL en programación


Programa principal

  • El programa principal de nuestra aplicación es el siguientes
int main(int argc, char **argv) 
{
   //Mesaje para el usuario de cómo usar el programa
   printInteraction();
 
   //Rutinas de inicialización
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); // Initialize the buffers 
                                                             // including the depth buffer.
   glutInitWindowSize(500, 500);
   glutInitWindowPosition(100, 100); 
   glutCreateWindow("circularAnnuluses.cpp Practica 1");
 
   //Dibuja nuestro escenario
   setup(); 
   glutDisplayFunc(drawScene); 
   glutReshapeFunc(resize);  
   glutKeyboardFunc(keyInput);
   glutMainLoop(); 
 
   return 0;  
}

Rutinas de inicialización de OpenGL y GLUT

  • Los primeros métodos de la librería glut se invocan al principio
  • Sirven para inicalizar la librería.
void glutInit(int *argcp, char **argv);
Inicializa la librería GLUT para que pueda usar una sesión con el sistema de ventanas. En caso de que no se pueda retorna un error
argcp Es un puntero a la variable argc del main (ver int main(char* argv, int argc); Sirve para poder pasar de la línea de comandos valores para GLUT
argcv Igual que en el caso anterior, pero ahora a la variable argv del main().
  • Toma los valores que le pasamos al main y se los envía a la bibliteca de GLUT
void glutInitDisplayMode(unsigned int mode);
Establece el modo de visualización incial.
  • Este valor por defecto es RGBA (colores básicos y el canal Alpha
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); // Initialize the buffers 
                                                             // including the depth buffer.
   glutInitWindowSize(500, 500);
   glutInitWindowPosition(100, 100); 
   glutCreateWindow("circularAnnuluses.cpp Practica 1");

Mensaje para usuario

void printInteraction(void)

  • Se imprime un mensaje por la pantalla para interactuar con el usuario.
  • Este contenido va a la consola no a la ventana windows
  • es código c++ (objetos de la clase iostream)
  • Por ello hay que hacer el include de la clase iostream
  • El código de esta parte quedaría
...
#include <iostream>
...
void printInteraction(void)
{
   cout << "Interaction:" << endl;
   //cout << "Press the space bar to toggle between wirefrime and filled for the lower annulus." << endl;  
   cout << "Presiona la barra espaciadora para alternar entre el anillo relleno de color y relleno de alambre ." << endl;  
 
}

===Rutinas de incialización : glClearColor(...). glutInit( ...)

  • Es una función propia de OpenGl como todas las que empiezan por gl
  • La función glClearColor(float red, float green, flota green, float alpha)
  • Especifica el color que pasamos como argumentos con el que se borrara el buffer al hacer un glClear().
  • Los parámetros son valores reales entre 0 y 1
  • Los tres primeros espefician el color
  • El cuarto es el nivel de transparencia canal alpha.
// Rutinas de inicialización
void setup(void) 
{
   glClearColor(1.0, 1.0, 1.0, 0.0);  
}
Ahora es cuando vamos a hacer funcionar nuestro código
Dibujando el círculo o disco
drawDisc(float radio ,float x, float y, float z)
  • Dibuja un disco con un radio con un espesor y orientación , y una posición (x,y,z)
Estableciendo un color
glColor3f(float red, float green, float blue);
Dibujando el circulo sobreescrito
  • En este caso primero dibujamos un
Test de profundidad

El algoritmo del Z-buffer es del tipo espacio-imagen. Cada vez que se va a renderizar un pixel, comprueba que no se haya dibujado antes en esa posición un pixel que esté más cerca respecto a la cámara. Este algoritmo funciona bien para cualquier tipo de objetos: cóncavos, convexos, abiertos y cerrados. Para activarlo, hay que hacer una llamada a glEnable(GL_DEPTH_TEST) Esta llamada le dice a OpenGL que active el test de profundidad. Además