[Tutorial] I - "HelloWorld" del OpenGL

Ver el tema anterior Ver el tema siguiente Ir abajo

[Tutorial] I - "HelloWorld" del OpenGL

Mensaje  HarZe el Dom Jun 21, 2009 10:38 pm

Bienvenido al mundo del OpenGL. Si tienes instalado un compilador de C, y la librería GLUT 3.5 o superior.
En el caso de Linux, con poner esto en el terminal debería bastar:
Código:
sudo apt-get install build-essential libglu1-mesa-dev freeglut3-dev mesa-common-dev
En cualquier caso, si no es por este método, lo importante es hacerte con las librerias: gl.h, glu.h y glut.h.

El código de un primer ejemplo de Open GL para PC:
Código:
#include <GL/glut.h>

void iniciarGlut()
{
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize(480,272);
   glutInitWindowPosition(100,100);
   glutCreateWindow("OpenGL");
}

void reseteoProj()
{
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(0,8,0,5,-10,10);
}

void pintarEscena()
{
   glMatrixMode(GL_MODELVIEW);
   glClear(GL_COLOR_BUFFER_BIT);

   glBegin(GL_QUADS);
      glColor3f(1.0f,0.0f,0.0f);
      glVertex3f(0.0f,0.0f,0.0f);
      glColor3f(0.0f,1.0f,0.0f);
      glVertex3f(8.0f,0.0f,0.0f);
      glColor3f(0.0f,0.0f,1.0f);
      glVertex3f(8.0f,5.0f,0.0f);
      glColor3f(1.0f,1.0f,0.0f);
      glVertex3f(0.0f,5.0f,0.0f);
   glEnd();
   glFlush();
}

int main(int argc, char **argv)
{
   glutInit(&argc, argv);
   iniciarGlut();
   glutReshapeFunc(reseteoProj);
   glutDisplayFunc(pintarEscena);
   glutMainLoop();
   return 0;
}

En el caso de Linux, para poder compilarlo necesitas añadir -lglut. Un ejemplo concreto si llamas al código: main.c
Código:
gcc main.c -o main -lglut

Ahora explicaré el código, no preocuparse por las cosas que van a quedar sin explicar en esta lección, todo será explicado a su debido tiempo.

Examinemos el código según es ejecutado. Tienes que entender que GLUT no funciona como el código C normal, estamos trabajando también con la tarjeta gráfica, y es GLUT quien se encarga de administrarlo.

glutInit(&argc, argv); Sencillamente inicia GLUT
iniciarGlut(); es una función que solo es ejecutada una vez, y contiene:
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); Se decide cúantos y cómo serán los buffers utilizados (ya se explicarña que es buffer)
glutInitWindowSize(480,272); Se indica el tamaño de la ventana donde trabajaremos
glutInitWindowPosition(100,100); Se indica en qué posición de la pantalla se colocará esa ventana
glutCreateWindow("OpenGL"); Definitivamente creamos la ventana, dándole un nombre
glutReshapeFunc(reseteoProj); Llama a una función que contenga comandos GLUT relacionados con la proyección. Contiene en este caso:
glMatrixMode(GL_PROJECTION); Es un comando que decide qué parte del GLUT configuramos, en este caso es GL_PROJECTION, donde decidiremos como se proyectará nuestro dibujo
glLoadIdentity(); Resetea los datos de GLUT relacionados con el modo que hemos abierto.
glOrtho(0,8,0,5,-10,10); Se dedice que la proyección es ortogonal (no se deforman los objetos al alejarse), ya lo explicaré
glutDisplayFunc(pintarEscena);
glMatrixMode(GL_MODELVIEW); Otro modo es el GL_MODELVIEW, para el modelado de figuras
glClear(GL_COLOR_BUFFER_BIT); Limpiamos la pantalla con negro

glBegin(GL_QUADS); Empezamos la creacion de un cuadrilátero (GL_QUADS)
glColor3f(1.0f,0.0f,0.0f); Indicamos el color del vértice
glVertex3f(0.0f,0.0f,0.0f); Indicamos la posición del vértice en el espacio XYZ
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(8.0f,0.0f,0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(8.0f,5.0f,0.0f);
glColor3f(1.0f,1.0f,0.0f);
glVertex3f(0.0f,5.0f,0.0f);
glEnd(); Acabamos de definir cómo será ese cuadrilátero
glFlush(); Acabados los cálculos de GLUT, los imprimimos en pantalla
glutMainLoop(); Crea un bucle infinito que repite los glut...Func() indefinidamente

Hasta la próxima, donde ya empezaremos a ir por partes y despacio.

HarZe
WebMaster & Desarrollador

Cantidad de envíos : 58
Fecha de inscripción : 21/06/2009
Edad : 24

Ver perfil de usuario http://opengl-esp.superforo.net

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.