Informàtica gràfica 1. l’entorn de desenvolupament

Com ja hem comentat, podem usar OpenGL en qualsevol plataforma, de manera que podem utilitzar qualsevol entorn de desenvolupament que treballe amb C++.

Per exemple proposem Anjuta per a Linux, Dev-C++ en Windows i XCode per a Mac OS.

A part de l'entorn de desenvolupament, necessitarem un compilador de codi C++ i les llibreries OpenGL i glut.

Linux

Proposem l'entorn Anjuta, es tracta de software lliure que ve integrat en les distribucions ubuntu, entre d'altres.

anjuta.png

Normalment el sistema operatiu ja inclou el compilador, només haureu de buscar les llibreríes.

Mac OS

Podem usar les XCode tools en Mac OS.

xcode.png

En aquest cas, al crear un nou projecte, haurem d'afegir els frameworks de Cocoa, GLUT i OpenGL, inclosos en Existing Frameworks.

En aquest cas serà important substituïr els headers habituals en el codi pels següents:

CODE:
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #include <GLUT/glut.h>
  7. #include <OpenGL/glext.h>
  8. #include <OpenGL/gl.h>
  9. #include <OpenGL/glu.h>

Més informació ací i ací.

Windows

Podem utilitzar per exemple l'entorn lliure Dev-C++.

devc.jpg

Normalment la llibreria glut no ve instal·lada, així que podem descarregar el Pack Manager de Dev-c ací.

Inici

A continuació ja podem començar. Només hem de crear un nou projecte on ja podem provar per exemple el següent codi:

#ifndef OCUADRADO_H
#define OCUADRADO_H

/* Abre una ventana OpenGL */
void AbreVentana (int numeroArgumentos, char ** listaArgumentos);

/* Funcion de dibujado */
void Dibuja(void);

/* Establece el area visible */
void TamanyoVentana (int alto, int ancho);

/* Inicia las propiedades de la vista */
void IniciaVista (void);

#endif
#include "GL/glut.h"
#include "stdio.h"
#include "cuadrado.h"

/******************************************************************/
/* Funcion de dibujado                                            */
/* Parametros: Ninguno                                            */
/* Salida: Ninguna                                                */
/******************************************************************/
void Dibuja(void)
{
	/* Establece el color de borrado */
	glClearColor (0.0f, 0.0f, 0.0f, 0.0f);

	/* Borra el buffer de color */
	glClear (GL_COLOR_BUFFER_BIT);

	/* Establece el color de dibujo */
	glColor3f (1.0f, 1.0f, 1.0f);

	/* Crea un poligono 2D (cuadrado) */
	glBegin (GL_POLYGON);
		glVertex2f (-0.5f, -0.5f);
		glVertex2f (-0.5f, 0.5f);
		glVertex2f (0.5f, 0.5f);
		glVertex2f (0.5f, -0.5f);
	glEnd ();

	/* Se asegura de que se ejecutan todas las ordenes */
	glFlush ();
}

/******************************************************************************************/
/* Establece el area visible                                                              */
/* Parametros: int ancho --> Ancho del area visible                                       */
/*             int alto --> Alto del area visible                                         */
/* Salida: Ninguna                                                                        */
/******************************************************************************************/
void TamanyoVentana (int ancho, int alto)
{
	glViewport (0, 0, ancho, alto);
}

/******************************************************************************************/
/* Inicia las propiedades de la vista                                                     */
/* Parametros: Ninguno                                                                    */
/* Salida: Ninguna                                                                        */
/******************************************************************************************/
void IniciaVista (void)
{
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}

/******************************************************************************************/
/* Abre una ventana OpenGL                                                                */
/* Parametros: int numeroArgumentos --> El numero de argumentos en la llamada al programa */
/*             char ** listaArgumentos --> Vector de cadenas con cada argumento           */
/* Salida: Ninguna                                                                        */
/******************************************************************************************/
void AbreVentana (int numeroArgumentos, char ** listaArgumentos)
{
	glutInit(&numeroArgumentos, listaArgumentos);
	glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize (500, 500);
	glutInitWindowPosition (100, 100);
	glutCreateWindow (listaArgumentos[0]);
	glutDisplayFunc (Dibuja);
	glutReshapeFunc (TamanyoVentana);
	IniciaVista ();
}

/******************************************************************************************/
/* Funcion principal                                                                      */
/* Parametros: int numeroArgumentos --> El numero de argumentos en la llamada al programa */
/*             char ** listaArgumentos --> Vector de cadenas con cada argumento           */
/* Salida: Un entero que se devuelve al sistema al acabar la ejecucion del programa       */
/******************************************************************************************/
int main(int numArgumentos, char ** listaArgumentos)
{
	/* Crea la ventana de la aplicaci¢n */
	AbreVentana (numArgumentos, listaArgumentos);

	/* Establece el bucle principal de control de OpenGL */
	glutMainLoop();

	return (0);
}

Després de compilar i executar, obtindríem una finestra com la següent:

cuadrado1.png