PDF de programación - Introducción al manejo de gráficos utilizando OpenGL y Qt

Imágen de pdf Introducción al manejo de gráficos utilizando OpenGL y Qt

Introducción al manejo de gráficos utilizando OpenGL y Qtgráfica de visualizaciones

Actualizado el 24 de Octubre del 2020 (Publicado el 12 de Febrero del 2019)
907 visualizaciones desde el 12 de Febrero del 2019
176,2 KB
9 paginas
Creado hace 11a (30/09/2012)
Introducci´on al manejo de gr´aficos utilizando OpenGL y Qt

Eric Orellana-Romero, Cristian Duran-Faundez

Departamento de Ingenier´ıa El´ectrica y Electr´onica, Facultad de Ingenier´ıa

Universidad del B´ıo-B´ıo, Concepci´on, Chile

Email: [email protected], [email protected]

Document Version: 1.0.0 – Oct-2012

Resumen

En el presente trabajo se explora la API OpenGL para el manejo de gr´aficos en aplicaciones
inform´aticas. Puesto que al dise˜nar interfaces humano-m´aquina, en ocasiones, un “dibujo” o “ani-
maci´on” puede ser m´as ejemplificador para el usuario, es que se hace necesario contar con herramientas
que nos permitan construirlos aprovechando las capacidades hardware de nuestro equipo. Dado esto,
OpenGL entrega un adecuado nivel de abstracci´on para programarlas y permite generar im´agenes de
excelente calidad.

1.

Introducci´on

Antiguamente los computadores se “comunicaban” con los usuarios mediante int´erpretes de coman-
dos, siendo utilizados en tareas espec´ıficas y por unos pocos usuarios calificados. Producto de esto, y con
el fin de hacer accesible la utilizaci´on de un computador a usuarios comunes, a partir de 1980, comienza
a desarrollarse la computaci´on gr´afica, gener´andose, en 1982, el concepto “graphics machine” en la uni-
versidad de Stanford, el que fue soportado por las librer´ıas IRIS GL desarrolladas por Sillicon Graphics
Inc, las que entregaban soporte de perif´ericos (mouse, teclado, joystick) y manejo de ventanas (fue de-
sarrollada antes de los gestores de ventanas). Dado lo anterior, las empresas de hardware comenzaron a
desarrollar los primeros circuitos espec´ıficos para gr´aficos, y puesto que este tipo de tecnolog´ıa se encon-
traba en su g´enesis, no exist´ıa consenso respecto a como realizarlo, por lo que cada fabricante constru´ıa
tarjetas gr´aficas seg´un sus directivas, lo que se convirti´o en un verdadero desaf´ıo para los programadores
de software que pretend´ıan desarrollar aplicaciones compatibles con hardware de diferentes empresas,
siendo necesario escribir un driver para cada una, lo que implicaba una pr´actica costosa e ineficiente
(c´odigo redundante). Debido a esta limitante, en la d´ecada del ’90 comienza el desarrollo de una librer´ıa
gr´afica est´andar abierta para el manejo exclusivo de hardware gr´afico, por parte de empresas tales como
Silicon Graphics Inc., Microsoft, IBM Corporation, Sun Microsystems, Digital Equipment Corporation
(DEC), Hewlett-Packard Corporation, Intel e Intergraph Corporation, utilizando como base IRIS GL.

El resultado fue la publicaci´on de la versi´on 1.0 de OpenGL en Enero de 1992. Dicha librer´ıa per-
miti´o estandarizar el acceso al hardware, traspasando la responsabilidad de generar una interfaz (capa
intermedia) a los fabricantes, y delegar el manejo de ventanas al sistema operativo. Adem´as, al ser abier-
ta, permit´ıa la adaptaci´on a diferentes plataformas de manera sencilla, facultando a los programadores
para generar aplicaciones en un lenguaje com´un, independiente al hardware utilizado. Ese mismo a˜no se
funda el “ OpenGL Architecture Review Board” (ARB), organismo formado por diferentes empresas del
rubro que revisaban las especificaciones de la API. En 2003 Microsoft abandona el ARB, y en 2006 es
controlado por el grupo Khronos 1 [1], [2]. Actualmente, la API OpenGL se encuentra disponible en la
versi´on 4.3, y se distribuye bajo licencia GPL (Licencia P´ublica General), siendo soportada en sistemas
tales como GNU/Linux, MacOS X, Windows, PlayStation 3 y Unix. En cuanto al control y desarrollo,
en la actualidad es manejada por el grupo Khronos, formando parte de los miembros activos Adobe,
EA, Google, Hp, IBM, Mitsubishi Electronic, Mozilla, Sony, entre muchos otros. Cabe destacar que las
especificaciones de OpenGL permite el manejo de gr´aficos, pero no incluye funciones para la gesti´on de

1http://www.khronos.org/

1

3 OBJETOS 3D SOBRE UN PLANO 2D

ventanas [3], por lo que esta tarea es administrada por el gestor de ventanas del sistema operativo sobre
el que se est´e trabajando o a trav´es de API’s desarrolladas con este fin, como por ejemplo Qt. Adem´as, es
compatible con lenguajes de programaci´on tales como C, C++, Visual Basic, Visual Fortran y Java [4],
convirti´endola en una API poderosa y multiplataforma, lo que sumado a su gratuidad, la convierten en
una de las herramientas para manejo de gr´aficos m´as utilizada, solo igualada por DirectX de Microsoft.

2. Principales caracter´ısticas de OpenGL

OpenGL es una API de programaci´on que a partir de de primitivas geom´etricas simples, tales como
puntos, l´ıneas y pol´ıgonos, permite dibujar escenas tridimensionales complejas. Para ello oculta al pro-
gramador las caracter´ısticas de cada tarjeta gr´afica, presentando una interfaz com´un, pudiendo emular
hardware mediante software en el caso de que este no soporte alg´un tipo de funci´on. OpenGL es consid-
erada una m´aquina de estados, por lo que cualquier caracter´ısticas configurada ser´a aplicada hasta que se
especifique lo contrario. Por ejemplo, al crear una l´ınea de color blanco sobre un fondo negro, cualquier
otra figura creada, posterior a esto, ser´a de color blanco sobre un fondo negro. Cada estado tiene un valor
por defecto y cuenta con funciones para obtener su valor actual, habilitarlos, deshabilitarlos, etc. [2],[3].
Adem´as de la librer´ıa GL se cuenta con librer´ıas auxiliares que permiten el manejo de rutinas tediosas,
entre ellas se encuentran [1]:

GLU: Incluye funciones m´as complejas que GL, tales como definici´on de un cilindro o un disco con
un solo comando y operaciones con matrices. Utiliza como base GL y generalmente se distribuyen
de manera conjunta.

GLUT: Es independiente de GL y permite el control de ventanas, mouse y teclado de manera
transparente a la plataforma utilizada. Adem´as incluye funciones para la creaci´on de conos, tazas
de t´e, etc.

GLAUX: Implementa las mismas funcionalidades que GLUT, pero es exclusiva para plataformas
Windows.

GLX: Es utilizada en sistemas X-Windows (Linux) para redenderizar.

Por otro lado, existe la librer´ıa MESA, que implementa funciones equivalentes a OpenGL, pero que

no puede llamarse “derivada” puesto que no a obtenido la licencia.

3. Objetos 3D sobre un plano 2D

Una imagen en tres dimensiones mostrada mediante un computador es realmente un conjunto de
figuras dibujadas en un plano bidimensional, la pantalla. Para obtener la “ilusi´on” de tres dimensiones se
utilizan antiguos conceptos utilizados por dibujantes, tales como la perspectiva, colores, luces y sombras.
As´ı, a trav´es de ellos es posible obtener la percepci´on de volumen, como se muestra en la figura 1.

Figura 1: Percepci´on de volumen

Uno de los conceptos internalizados por OpenGL es la perspectiva, la que consiste en mostrar “profun-
didad” en la imagen mediante la modificaci´on del tama˜no de los objetos en la escena. Para ello, se utiliza
un “mapeo” del plano cartesiano que muestra las ubicaciones de los objetos en la pantalla (coordenadas

2

5

“HOLA MUNDO” EN OPENGL MEDIANTE C ´ODIGO

x e y), a una representaci´on de espacio (coordenadas x, y y z) a trav´es de manipulaci´on de matrices,
concepto de proyecci´on en perspectiva mostrado en la figura 2 [3].

Figura 2: Proyecci´on en perspectiva

4.

Instalaci´on de OpenGL en sistemas GNU/Linux

La instalaci´on de la API en el sistema se puede llevar a cabo de dos maneras. La primera es descargando
las librer´ıas directamente desde su p´agina2 o a trav´es de los repositorios de Debian. La primera opci´on suele
ser complicada y dif´ıcil de ejecutar, ya que no se cuenta con instaladores y deben ser compiladas total o
parcialmente, mientras que al instalarlas desde los repositorios es posible utilizar aptitude, simplificando
la complejidad. Dado esto, se utiliza la segunda opci´on, instalado los paquetes necesarios mediante la
siguiente instrucci´on (notar que para instalar paquetes se debe tener permiso de administrador).

# aptitude install freeglut3 - dev libgl1 - mesa - dev libglu1 - mesa - dev libice - dev libpthread -

stubs0 libpthread - stubs0 - dev libsm - dev libx11 - dev libxau - dev libxcb1 - dev libxdmcp - dev
libxext - dev libxt - dev mesa - common - dev x11proto - core - dev x11proto - input - dev x11proto -

kb - dev x11proto - xext - dev xtrans - dev

NOTA: Al realizar la instalaci´on mediante aptitude es posible solo especificar el paquete freeglut3-
dev para ser instalado, los dem´as son marcados como dependencias e instalados autom´aticamente por el
gestor.

5. “Hola Mundo” en OpenGL mediante c´odigo

Al utilizar las librer´ıas de OpenGL, el programa m´as simple que puede crearse es un triangulo contenido
en una ventana. Es por esto que es nombrado como el Hola Mundo de la API. Por ser el primer ejemplo
en ser explicado, se lleva a cabo utilizando un editor de texto, que en este caso ser´a gedit y se compila
manualmente desde consola. La primera funci´on a implementar es la encargada de dibujar el triangulo,
llamada display(), y se define seg´un el c´odigo a continuaci´on.

1 void display ()
2 {
3 glClear ( G L _ C O L O R _ B U F F E R _ B I T ) ;
4 glBegin ( G L _ T R I A N G L E S ) ;
5

glColor3f (0 ,0 ,0) ;
glVertex3f (0 ,1 ,0) ;
glVertex3f ( -1 , -1 ,0) ;
glVertex3f (1 , -1 ,0) ;

6

7

8

9 glEnd () ;

10 glFlush () ;
11 }

Para dibujar cualquier pol´ıgono, las funciones que indican las caracter´ısticas de estos, deben estar con-
tenidas entre las instrucciones glBegin(pol´ıgono ) (indicando que tipo de pol´ıgono se utilizar´a) y glEnd(),

2http://www.opengl.org/resources/libraries/glut/glut_downloads.php#2

3

5

“HOLA MUNDO” EN OPENGL MEDIANTE C ´ODIGO

como se muestra en las l´ıneas 5 y 10 del c´odigo anterior. Existen diversos tipos de pol´ıgonos, entre los m´as
utilizados GL POINTS, GL LINES, GL POLYGON, GL QUADS, GL TRIANGLES, GL TRIANGLES STRIP
y GL QUAD STRIP, una explicaci´on detallada de cada uno puede ser encontrada en [5, p. 14]. Para el
ejemplo dado se utiliza GL TRIANGLES, cuya func
  • Links de descarga
http://lwp-l.com/pdf15167

Comentarios de: Introducción al manejo de gráficos utilizando OpenGL y Qt (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad