OpenGL
Guia rapida de OpenGL para Linux

 




Tipos de Variables

Tamaño                           Correspondencia en C                   Definición en OpenGL
8-bit integer                       signed char                                      GLbyte
16-bit integer                     short                                                GLshort
32-bit integer                     int or long                                       GLint, GLsizei
32-bit floating-point          float                                                GLfloat, GLclampf
64-bit floating-point          double                                             GLdouble, GLclampd
8-bit unsigned integer        unsigned char                                 GLubyte, GLboolean
16-bit unsigned integer      unsigned short                                GLushort
32-bit unsigned integer      unsigned int or unsigned long        GLuint, GLenum, GLbitfield



glClear borra el buffer especificado.

glClear (Valor Tipo de Buffer);

Tipo de Buffer           Nombre
Color                             GL_COLOR_BUFFER_BIT
Profundidad                  GL_DEPTH_BUFFER_BIT
Acumulacion                GL_ACCUM_BUFFER_BIT
Plantilla                        GL_STENCIL_BUFFER_BIT


 
Tabla para la unión de vertices para primitivas
 glColor3f (Rojo,Verde,Azul);Indica el color de rellene en los poligonos
   glBegin(Tipo);
      glVertex3f (xVertice,yVertice,zVertice);indica un vertice
      glVertex3f ..........
      etc
   glEnd();

Desde glBegin hasta glEnd se determinan los vertices de un poligono,como se uniran estos vertices
biene determinado por glBegin (Tipo)

Tabla de union de vertices

Tipo                            Significado
GL_POINTS                     Puntos individuales
GL_LINES                        Cada par de vertices forman una linea
GL_LINE_STRIP             Todos los vertices forman una linea
GL_LINE_LOOP             Todos los vertices forman una linea y el 1 y el ultimo se unen
GL_TRIANGLES            Cada tres vertices se interpretan como un triangulo
GL_TRIANGLE_STRIP Todos los vertices se interpretan como un poligono formado por triangulos
GL_TRIANGLE_FAN    Triangulos alrededor del primer vertice
GL_QUADS                     Une los vertices en grupos de 4
GL_QUAD_STRIP          Todos los vertices se interpretan como un poligono formado por cuadrados
GL_POLYGON               Todos los certices hacen un poligono convexo

glOrtho(izquierda,derecha,abajo,arriba,cerca,lejos);

Crea una caja virtual,solo seran representados los poligonos que se encuentren dentro
de los parametros especificados por la caja el resto seran cortados(clipping).
Este sencillo programa crea una malla de triangulos, en la que modemos modificar la altura ,es facil
de entender y podremos jugar con la gluLookAt ,glOrtho y la manera de linkar los poligonos.

Estructura basica de opengl

// malla 27-03-02 www.SorgoNet.com

#include <GL/glut.h>

GLfloat malla [100][100];//array malla
int contador,contador2;
GLfloat scala;

void display(void)
{
  scala=10;
  // borra los pixeles
  glClear (GL_COLOR_BUFFER_BIT);
 
  malla [4][4]=3;//algunos picos en la malla
  malla [5][4]=3.2;
  malla [6][4]=3.1;
  malla [4][5]=2.3;

 

  for (contador=0;contador < 99;contador=contador+1){
   for (contador2=0;contador2 < 99;contador2=contador2+1){
 
   glColor3f (1.0, 1.0,1.0);
   glBegin(GL_TRIANGLES);
      glVertex3f (contador/scala, malla[contador][contador2]/scala,contador2/scala);
      glVertex3f ((contador+1)/scala, malla[contador+1][contador2]/scala,contador2/scala);
      glVertex3f (contador/scala, malla[contador][contador2+1]/scala,(contador2+1)/scala);
   glEnd();
 
    /* si actibamos esta parte se añadiran lo triangulos que faltan
    glBegin(GL_TRIANGLES);
      glVertex3f ((contador+1)/scala,malla[contador][contador2]/scala,(contador2+1)/scala);
      glVertex3f ((contador+1)/scala,malla[contador][contador2]/scala,contador2/scala);
      glVertex3f (contador/scala, malla[contador][contador2]/scala,(contador2+1)/scala );
      glEnd();*/
     }}
 
 
  //comienza el proceso en el buffer de OpenGl
   glFlush();
}


void init (void)
{
/* selecciona el color de borrado    */
   glClearColor (0.0, 0.0, 0.0, 0.0);

/* inicializa las vistas */
   gluLookAt(-0.20,-0.250,0.0,-0.5,0.5,-2.0,0.0,1.0,0.0);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glOrtho(0.0, 1.0, 0.0, 1.0, -10.0, 1000.0);
}

static void
key(unsigned char k, int x, int y)
{
  switch (k) {
  case 27:  /* Escape */
    exit(0);
    break;
  default:
    return;
  }
  glutPostRedisplay();
}


int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize (500, 500);
   glutInitWindowPosition (100, 100);
   glutCreateWindow ("Hola");
   init ();
   glutDisplayFunc(display);
   glutKeyboardFunc(key);
   glutMainLoop();
   return 0; 
}


La camara viene determinada por la funcion gluLookAt,si no la utilizamos en nuestros
programa se utilizara la camara por defecto.

gluLookat (0.0, 0.0, 0.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0);

gluLookAt(xPosicion,yPosicion,zPosicion,xRotacion,yRotacion,zRotacion,xDireccion,yDireccion,zDireccion);


Para Compilar un programa

gcc -O NOMBRE.C -o NOMBREEJECUTABLE -lglut

    sello
Http:\\www.sorgonet.com