Publicado el 21 de Junio del 2018
942 visualizaciones desde el 21 de Junio del 2018
172,2 KB
57 paginas
Creado hace 25a (16/03/2000)
GRÁFICOS
APUNTES DE
OPENGL
CURSO 1998-99
Rafael Molina Carmona
Juan Antonio Puchol García
ALGUNAS CUESTIONES PREVIAS
¿QUÉ ES OPENGL?
es
una
OpenGL
desarrollada
inicialmente por Silicon Graphics, aunque pronto pasó a convertirse en un estándar, en
especial
Sus
principales características son:
operativo Windows.
adoptó Microsoft
de modelado
gráficos
librería
sistema
cuando
para
Fue
3D.
su
lo
y
sistema procedural y no descriptivo, es decir, el programador no describe
la
los pasos necesarios para configurar
los objetos de
la escena y
en modo
inmediato,
es decir,
los
objetos
son dibujados
conforme van
• Es fácilmente portable y muy rápida.
• Es un
una escena sino
escena final.
• Actúa
creándose.
Incluye:
•
Iluminación y sombreado.
• Primitivas gráficas: puntos, líneas, polígonos.
•
• Texturas.
• Animaciones.
• Otros efectos especiales.
• OpenGL
trata
con
contextos de visualización
o de
rendering,
asociados
a un
contexto de dispositivo que, a su vez, se encuentra asociado a un ventana.
la
toda
Incorpora
igual que el de OpenGL.
Mesa es un clónico gratuito de OpenGL. Se
¿QUÉ ES MESA?
básicamente
la única excepción de algunas rutinas muy específicas, que se refieren a:
• NURBS recortadas.
• Antialiasing para polígonos.
indistintamente a Mesa o a OpenGL, ya que no existen diferencias sustanciales.
ESTRUCTURA BÁSICA DE OPENGL
• OpenGL es un API, no un
Nosotros utilizaremos Mesa
curso. En
este
en
lo
trata de una
librería cuyo API es
funcionalidad de OpenGL con
sucesivo nos
referiremos
• OpenGL
tanto,
(generalmente C o C++) en el que escribir el programa que realizará
lenguaje de programación. Necesitaremos, por
lo
lenguaje
un
llamadas a funciones de la librería, utilizando para ello la sintaxis de C.
es
de
del
sistema
ventanas
independiente
sistema
incorpora rutinas para el manejo de ventanas. Este manejo
operativo, es decir, no
debe realizarse a través del API del entorno de ventanas elegido.
Se necesita, por
limitado de rutinas que pongan el contacto al
sistema operativo y al entorno de ventanas con OpenGL. Este conjunto de rutinas
es diferente para cada
sino a una
librería auxiliar. De esta manera, el núcleo de OpenGL permanece
inalterado para
todos los sistemas operativos.
sistema operativo y no pertenece a OpenGL
lo tanto, un conjunto
utilizado
del
y
•
2
• OpenGL
incorpora
la
obstante,
no
Existe,
visualización y que
(OpenGL Utility Library).
funcionalidad básica para
un
conjunto de
aspectos
realizar
que
se encuentran en una
librería estándar adicional
la visualización
no
son
(rendering).
estrictamente de
llamada GLU
• En
• Existen algunas herramientas o
toolkits que
facilitan
la
con un entorno de ventanas. Un ejemplo es GLUT
completo conjunto de herramientas que
y MS-Windows o X Windows.
facilitan enormente el
labor de “pegar” OpenGL
(OpenGL Utility Toolkit), un
trabajo con OpenGL
resumen,
para
trabajar
con OpenGL
necesitamos
al menos
las
siguientes
componentes:
• Un
lenguaje de
programación
con
su
compilador,
que
pueda
realizar
llamadas a funciones en formato C: C, C++, VisualBasic, Java...
• Librería OpenGL: Contiene
a
las
tareas de
las
funciones
propias de OpenGL, dedicadas
el
incorporan
funciones
rendering. Las
fundamentalmente
prefijo gl-.
• Librería de utilidades GLU: Contiene algunas
funciones, con el prefijo glu-,
que realizan las siguientes tareas:
• Transformación de coordenadas.
• Poligonalización de objetos.
• Manipulación de imágenes para aplicarlas como texturas.
• Rendering de figuras canónicas: esferas, cilindros y discos.
• Curvas y superficies NURBS.
•
Informe de errores.
• Librería para
“pegar” OpenGL
y
el
sistema de ventanas. Esta
librería
depende del sistema elegido. Entre los más habituales encontramos:
la
librería para
la
familia de
sistemas MS-Windows. El
prefijo utilizado en sus funciones es wgl-.
la
librería para X Windows. Utiliza el prefijo glx- en sus
• WGL: Es
• GLX: Es
funciones.
• Alternativamente al uso de
las
amplio
abanico de
encontrar un
trabajo con el API del entorno de ventanas y
de
Windows como para X Windows. Sus funciones llevan el prefijo glut-.
ellas destaca GLUT,
ventanas. Entre
versiones
facilitan
en
librerías anteriores
que
librerías
(WGL, GLX...), es posible
complicado
encapsulan
la creación y gestión
tanto para MS
el
Nosotros vamos a
trabajar con GLUT para X Windows, haciendo uso, además,
de las librerías OpenGL y GLU, utilizando C como lenguaje de programación.
3
1. GLUT
Las
los
“pegarlos”
complejas
se
hace
imprescindible
la
los
fundamentos de
sistemas de
ventanas,
ventanas, utilizando
las
solamente
los
conceptos
los principales
interfaz de
GLUT es una
librería pequeña y
fundamentales para poder
trabajar
con
las funciones de GLUT siempre es
la misma,
las facetas de
de
aplicaciones
sistemas de
la programación con APIs de ventanas, por
lo que para
GLUT
es un API
con
independientemente del
Como paso previo al estudio de OpenGL, vamos a ver
escribir programas
formato ANSI C, pensado para
sistema de ventanas utilizado. Existen versiones de
y X
lo que facilita al
incluyendo MS Windows
fácil de aprender y utilizar. No cubre, no
la
programación
con
INTRODUCCIÓN
la
programación con GLUT. Puesto que el estudio de GLUT no es el objetivo de este
curso, veremos
esta
librería de herramientas.
OpenGL
GLUT para
Windows. La
máximo la portabilidad de programas entre diferentes entornos.
obstante, todas
programación
directa de
librerías para
OpenGL (WGL, GLX, ...). Para el propósito de este curso, el uso de GLUT es suficiente.
tiene un conjunto de variables de estado que durante
las características que debe
unos valores
aplicaciones,
efecto
dependiendo de
comporta, así mismo, como una máquina de estados, tal y como veremos más adelante.
punteros. Dependiendo de la funcionalidad podemos distinguir funciones para:
•
• Control de ventanas
• Control de menús
• Procesamiento de eventos
• Registro de funciones callback
• Obtención del estado
• Control de overlays
• Control del mapa de colores
• Visualización de fuentes de texto
• Dibujo de formas geométricas
El API de GLUT es una máquina de estados. Esto quiere decir que el sistema
fijan
tienen
las
el
diferentes
librería OpenGL se
la aplicación en cada momento. Estas variables
sido escogidos para adaptarse a
funciones de GLUT son simples, con pocos parámetros y evitan el uso de
función
tener
las variables de estado. La propia
de GLUT
puede
deseado. Una misma
los valores de
tener
iniciales que han
la mayoría de
conseguir
la ejecución del programa
aunque pueden
ser modificados por
el programador para
Inicialización
efectos
Los últimos cuatro grupos de
funciones no
los veremos, por quedar
referencia de estos
completa
curso. Puede
consultarse una
alcance de este
[Kilg96].
fuera del
temas en
4
A continuación
se comentan algunas de
las particularidades y convenciones de
GLUT:
• En una ventana, el origen de coordenadas
(0,0) se encuentra en
izquierda. Esto
está
inferior izquierda, pero no supone ningún problema como veremos más adelante.
con OpenGL,
cuyo origen
inconsistente
es
la esquina superior
esquina
en
la
• Los
identificadores
enteros
en GLUT
(utilizados
para
ventanas, menús,
etc.)
empiezan en 1 y no en 0.
• Las definiciones de
las funciones de GLUT se encuentran en el archivo de cabeceras
glut.h.
INICIALIZACIÓN
el estado de GLUT. Algunas de estas rutinas son:
• void glutInit (int *argcp, char **argv)
Las rutinas que empiezan con el prefijo glutInit- se utilizan para
inicializar
argcp: puntero al parámetro argc de la función main del programa.
argv: parámetro argv de la función main.
glutInit
inicializa
la
librería GLUT, pudiéndosele pasar algún parámetro por
Esta rutina debe ser
línea de comandos a través de argcp y argv.
otra
función de
estamos fijando el estado por defecto de la aplicación al inicializarse.
función que no sea de
inicialización
llamada una única vez al principio del programa. Ninguna
llamarse antes. Si utilizamos alguna
función,
el prefijo glutInit-) delante de
inicialización puede
(con
ésta
• void glutInitWindowSize (int ancho, int alto)
ancho: anchura de la ventana en pixels
alto: altura de la ventana en pixels
Esta rutina sirve para indicar el tamaño inicial de las ventanas que se creen.
• void glutInitWindowPosition (int x, int y)
x: posición en x de la ventana en pixels
y: posición en y de la ventana en pixels
Con esta función fijamos la posición inicial de las ventanas que se creen.
• void glutInitDisplayMode (unsigned int modo)
modo: modo de display. Es una composición mediante conectores “|” de algunos de
los valores siguientes:
GLUT_RGBA:
GLUT_RGB:
GLUT_INDEX:
GLUT_SINGLE:
GLUT_DOUBLE:
Selecciona una ventana e
+
Comentarios de: Apuntes de OpenGL (0)
No hay comentarios