Diferencia entre revisiones de «ManuelRomero/grafica/ej1»
De WikiEducator
(→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( ...) | ||
− | + | ||
− | + | ||
− | + | ||
*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> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
;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 00:47 5 jun 2013
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
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
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