Professional Documents
Culture Documents
h>
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <stdio.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
GLuint loadBMP(const char *);
void texturas(void);
GLuint tex,imagen;
// Data read from the header of the BMP file
unsigned char header[54]; // Each BMP file begins by a 54-bytes header
unsigned int dataPos;
// Position in the file where the actual data begi
ns
unsigned int width, height;
unsigned int imageSize; // = width*height*3
// Actual RGB data
unsigned char * data;
unsigned char Colores[4][4][3] = {
{{64,0,0}, {128,0,0}, {192,0,0}, {255,0,0}}, // Rojos
{{0,64,0}, {0,128,0}, {0,192,0}, {0,255,0}}, // Verdes
{{0,0,64}, {0,0,128}, {0,0,192}, {0,0,255}}, // Azules
{{64,64,0}, {128,128,0}, {192,192,0}, {255,255,0}} // Amarillos
};
int width2=800;
int height2=800,m=0;
GLfloat plano_s[4] = {1, 0, 0, 0};
GLfloat plano_t[4] = {0, 1, 0, 0};
void init(void)
{
const float ar=(float) width2 / (float) height2;
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.7,0.9,0.0,0.9);
glClearDepth(0.9f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glViewport(0,0,width2,height2);
glMatrixMode(GL_PROJECTION);
glFrustum(-ar,ar,-1.0,1.0,2.0,100.0);
glMatrixMode(GL_MODELVIEW);
}
static void idle(void)
{
glutPostRedisplay();
}
static void display(void)
{
const double t = glutGet(GLUT_ELAPSED_TIME)/1500.0;
const double r = 90*t;
const double m = 0.2*t;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-4.5);
glClearColor(0.0,0.0,1.0,0.9f);
glEnable(GL_TEXTURE_2D);
//Rota el cubo
glRotatef(r,1.0f,1.0f,0.0f);
glBindTexture(GL_TEXTURE_2D, tex);
glBegin(GL_QUADS);
// Frente
glNormal3f( 0.0f, 0.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,
-1.0f, 1.0f);
-1.0f, 1.0f);
1.0f, 1.0f);
1.0f, 1.0f);
glEnd();
glBegin(GL_POLYGON);
// parte de Atras
glNormal3f( 0.0f, 0.0f,-1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f,
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f,
-1.0f, -1.0f);
1.0f, -1.0f);
1.0f, -1.0f);
-1.0f, -1.0f);
glEnd();
glBegin(GL_POLYGON);
// Arriba
glNormal3f( 0.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,
glEnd();
1.0f,
1.0f,
1.0f,
1.0f,
-1.0f);
1.0f);
1.0f);
-1.0f);
glBegin(GL_POLYGON);
// Abajo
glNormal3f( 0.0f,-1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f,
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f,
-1.0f,
-1.0f,
-1.0f,
-1.0f,
-1.0f);
-1.0f);
1.0f);
1.0f);
glEnd();
glBegin(GL_POLYGON);
// lado Derecho
glNormal3f( 1.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(
glTexCoord2f(1.0f, 1.0f); glVertex3f(
glTexCoord2f(0.0f, 1.0f); glVertex3f(
glTexCoord2f(0.0f, 0.0f); glVertex3f(
1.0f,
1.0f,
1.0f,
1.0f,
-1.0f, -1.0f);
1.0f, -1.0f);
1.0f, 1.0f);
-1.0f, 1.0f);
glBegin(GL_POLYGON);
// Lado Izquierdo
glNormal3f(-1.0f, 0.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f,
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,
glEnd();
glFlush();
-1.0f, -1.0f);
-1.0f, 1.0f);
1.0f, 1.0f);
1.0f, -1.0f);
glEnd();
glutSwapBuffers();
}
void texturas(void)
{
glGenTextures(1,&tex);
glBindTexture(GL_TEXTURE_2D,tex);
loadBMP("C:/cubo.bmp");
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width,height, 0, GL_RGB, GL_UNSIGNED_B
YTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
GLuint loadBMP(const char *direc)
{
FILE * file = fopen(direc,"rb");
if (!file)
"); return 0;}
return false;
}
if ( header[0]!='B' || header[1]!='M' ){
printf("Not a correct BMP file\n");
return 0;
}
// Read ints
dataPos
=
imageSize =
width
=
height
=
//
if
Green
if
// Create a buffer
data = new unsigned char [imageSize];
// Read the actual data from the file into the buffer
fread(data,1,imageSize,file);
//Everything is in memory now, the file can be closed
fclose(file);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("cubo texturas");
init();
tex=loadBMP("C:/cubo.bmp");
texturas();
glutDisplayFunc(display);
glutIdleFunc(idle);
glEnable(GL_DECAL);
glutMainLoop();
return 0;
}