home *** CD-ROM | disk | FTP | other *** search
/ 3D World 7 (Spanish) / 3DWorld_07.iso / pc / artic / w_prog / ejemplo3.c < prev    next >
C/C++ Source or Header  |  1997-06-23  |  3KB  |  112 lines

  1. /*  ejemplo3.c
  2.  *  Este programa textura una imagen de una fotografÌa
  3.  *  sobre dos rect·ngulos. Se utiliza la opciÛn de texturar
  4.  *  ampliando y repitiendo la textura.
  5.  */
  6. #include "glos.h"
  7. #include <stdio.h>
  8. #include <GL/gl.h>
  9. #include <GL/glu.h>
  10. #include <GL/glaux.h>
  11.  
  12.  
  13. void myinit(void);
  14. void CargaImagen(void);
  15. void CALLBACK myReshape(GLsizei w, GLsizei h);
  16. void CALLBACK display(void);
  17.  
  18.  
  19.  
  20.  
  21. #define AnchoImagen 256         
  22. #define AltoImagen 256 
  23. GLubyte checkImage[AnchoImagen][AltoImagen][3];
  24.  
  25. void CargaImagen(void)
  26. {    //Para cargar una imagen en formato RAW
  27.     int i, j;
  28.     FILE *file;
  29.     file=fopen("image.RAW","rb");
  30.     if (file==NULL) { printf("Error fichero\n"); exit(1); }
  31.  
  32.     for (i = 0; i < AnchoImagen; i++) {
  33.     for (j = 0; j < AltoImagen; j++) {
  34.     fread(&checkImage[i][j], sizeof(char), 3*256*256, file);
  35.     fclose(file);
  36.  
  37.     }
  38.     }
  39.  
  40.  
  41. }
  42.  
  43. void myinit(void)
  44. {    
  45.   glClearColor (0.0, 0.0, 0.0, 0.0);
  46.   glEnable(GL_DEPTH_TEST);
  47.   glDepthFunc(GL_LESS);
  48.  
  49.   CargaImagen();
  50.   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  51.     
  52.     glTexImage2D(GL_TEXTURE_2D, 0, 3, AnchoImagen, 
  53.     AltoImagen, 0, GL_RGB, GL_UNSIGNED_BYTE, 
  54.     &checkImage[0][0][0]);
  55.  
  56.     
  57.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  58.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  59.     
  60.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  61.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  62.   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
  63.   glEnable(GL_TEXTURE_2D);
  64.   glShadeModel(GL_FLAT);
  65. }
  66.  
  67. void CALLBACK display(void)
  68. {
  69.     
  70.     //a la izq. las coordenadas del recuadro de textura
  71.     //a la derecha las coordenadas de los 4 vertices de los rectangulos en 3D
  72.     
  73.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  74.   glBegin(GL_QUADS);
  75.     
  76.   glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 1.0, 0.0);
  77.   glTexCoord2f(0.0, 0.5); glVertex3f(0.0, -1.0, 0.0);
  78.   glTexCoord2f(0.5, 0.5); glVertex3f(-2.0, -1.0, 0.0);
  79.   glTexCoord2f(0.5, 0.0); glVertex3f(-2.0, 1.0, 0.0);
  80.  
  81.     glTexCoord2f(0.0, 0.0); glVertex3f(1.41421, 1.0, -1.41421);
  82.   glTexCoord2f(0.0, 2.0); glVertex3f(1.41421, -1.0, -1.41421);
  83.   glTexCoord2f(2.0, 2.0); glVertex3f(0.0, -1.0, 0.0);
  84.   glTexCoord2f(2.0, 0.0); glVertex3f(0.0, 1.0, 0.0);
  85.  
  86.     glEnd();
  87.   glFlush();
  88. }
  89.  
  90. void CALLBACK myReshape(GLsizei w, GLsizei h)
  91. {
  92.   h = (h == 0) ? 1 : h;
  93.   glViewport(0, 0, w, h);
  94.   glMatrixMode(GL_PROJECTION);
  95.   glLoadIdentity();
  96.   gluPerspective(60.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 30.0);
  97.   glMatrixMode(GL_MODELVIEW);
  98.   glLoadIdentity();
  99.   glTranslatef(0.0, 0.0, -3.6);
  100. }
  101.  
  102. int main(int argc, char** argv)
  103. {
  104.   auxInitDisplayMode (AUX_SINGLE | AUX_RGB | AUX_DEPTH16);
  105.   auxInitPosition (0, 0, 500, 500);
  106.   auxInitWindow ("Textura ampliada y textura repetida");
  107.   myinit();
  108.   auxReshapeFunc (myReshape);
  109.   auxMainLoop(display);
  110.   return(0);
  111. }
  112.