Animacion_4.c



/*     CUBO GIRANDO CON TEXTURA DIFERENTE EN CADA CARA     */


#include <stdio.h>
#include <GL/glut.h>
#include <unistd.h>

#include "IMAGENES/Superman.c"
#include "IMAGENES/Batman.c"
#include "IMAGENES/Tigre.c"
#include "IMAGENES/Hulk.c"
#include "IMAGENES/Ironman.c"
#include "IMAGENES/Maravilla.c"

float Time;		// (Time)Retardo
float ANG = 0.0f;	// (ANG)ulo de rotaciON

void PintaEjes()
{
	glBegin(GL_LINES);
		glColor3f(1,0,0); glVertex3f(-5, 0, 0); glVertex3f(5, 0, 0);	// X
		glColor3f(0,1,0); glVertex3f(0, -5, 0); glVertex3f(0, 5, 0);	// Y
		glColor3f(0,0,1); glVertex3f(0, 0, -5); glVertex3f(0, 0, 5);	// Z
	glEnd();
	glPushMatrix();
	glColor3f(1,0,0); glTranslatef(5.0f, 0.0f, 0.0f); glutWireSphere(0.20, 20, 20);
	glPopMatrix(); glPushMatrix();
	glColor3f(0,1,0); glTranslatef(0.0f, 5.0f, 0.0f); glutWireSphere(0.20, 20, 20);
	glPopMatrix(); glPushMatrix();
	glColor3f(0,0,1); glTranslatef(0.0f, 0.0f, 5.0f); glutWireSphere(0.20, 20, 20);
	glPopMatrix();
}

void Gradua  ( )
{
	int k=0, x1,y1,x2,y2;

	glBegin(GL_LINES);
		glColor3f(1,0,0); for(k=1; k<10; k++) { glVertex3f(-5+k, 0.2, 0); glVertex3f(-5+k, -0.2, 0); }
		glColor3f(0,1,0); for(k=1; k<10; k++) { glVertex3f(0.2, -5+k, 0); glVertex3f(-0.2, -5+k, 0); }
		glColor3f(0,1,0); for(k=1; k<10; k++) { glVertex3f(0.2, 0, -5+k); glVertex3f(-0.2, 0, -5+k); }
	glEnd();
}

Inicializa()
{
	int texture;

	glClearColor(0.0,0.0,0.0,0.0);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-8.0,8.0, -8.0,8.0, -7.0,7.0);
	Time = (float)80000;
	glMatrixMode(GL_MODELVIEW);
	gluLookAt(-1,-1,1,  2,2,-1,  0,0,1);
	//gluLookAt(1,1,-1,  0,0,-1,  0,1,0);
	glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glClearDepth(1.0);
	glGenTextures(1,&texture);			// D-EVUELVE UN ID DE TEXTURA LIBRE- Se Crea una textura OpenGL
	glBindTexture(GL_TEXTURE_2D,texture);		// -TEXTURA ACTIVA- Se "Ata" la nueva textura : Todas las futuras funciones de texturas van a modificar esta textura
	glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );	// CONDICIONES EN QUE SE VA A APLICAR -MODULATE- o -REPLACE-

}

void Tiempo(void)
{
	// sleep( Time );		// SEGUNDOS
	usleep( Time );			// MICRO SEGUNDOS
	glutPostRedisplay();
}

void Superman()
{
	gluBuild2DMipmaps( GL_TEXTURE_2D, SUPERMAN.bytes_per_pixel, SUPERMAN.width,
			   SUPERMAN.height,GL_RGB, GL_UNSIGNED_BYTE, SUPERMAN.pixel_data );
	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);
		glColor3f(1.0,1.0,1.0);
		glTexCoord2d(0.0, 1.0); glVertex3f(-1.0f, -1.0f, -1.0f);
		glTexCoord2d(1.0, 1.0); glVertex3f(1.0f, -1.0f, -1.0f);
		glTexCoord2d(1.0, 0.0); glVertex3f(1.0f, -1.0f, 1.0f);
		glTexCoord2d(0.0, 0.0); glVertex3f(-1.0f, -1.0f, 1.0f);
	glEnd();
	glDisable(GL_TEXTURE_2D);
}

void Batman()
{
	gluBuild2DMipmaps( GL_TEXTURE_2D, BATMAN.bytes_per_pixel, BATMAN.width,
			   BATMAN.height,GL_RGB, GL_UNSIGNED_BYTE, BATMAN.pixel_data );
	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);
		glColor3f(1.0,1.0,1.0);
		glTexCoord2d(0.0, 1.0); glVertex3f(-1.0f, 1.0f, -1.0f);
		glTexCoord2d(1.0, 1.0); glVertex3f(1.0f, 1.0f, -1.0f);
		glTexCoord2d(1.0, 0.0); glVertex3f(1.0f, 1.0f, 1.0f);
		glTexCoord2d(0.0, 0.0); glVertex3f(-1.0f, 1.0f, 1.0f);
	glEnd();
	glDisable(GL_TEXTURE_2D);
}

void Tigre()
{
	gluBuild2DMipmaps( GL_TEXTURE_2D, TIGRE.bytes_per_pixel, TIGRE.width,
			   TIGRE.height,GL_RGB, GL_UNSIGNED_BYTE, TIGRE.pixel_data );
	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);
		glColor3f(1.0,1.0,1.0);
		glTexCoord2d(0.0, 1.0); glVertex3f(1.0f, -1.0f, -1.0f);
		glTexCoord2d(1.0, 1.0); glVertex3f(1.0f, 1.0f, -1.0f);
		glTexCoord2d(1.0, 0.0); glVertex3f(1.0f, 1.0f, 1.0f);
		glTexCoord2d(0.0, 0.0); glVertex3f(1.0f, -1.0f, 1.0f);
	glEnd();
	glDisable(GL_TEXTURE_2D);
}

void Hulk()
{
	gluBuild2DMipmaps( GL_TEXTURE_2D, HULK.bytes_per_pixel, HULK.width,
			   HULK.height,GL_RGB, GL_UNSIGNED_BYTE, HULK.pixel_data );
	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);
		glColor3f(1.0,1.0,1.0);
		glTexCoord2d(0.0, 1.0); glVertex3f(-1.0f, -1.0f, -1.0f);
		glTexCoord2d(1.0, 1.0); glVertex3f(1.0f, -1.0f, -1.0f);
		glTexCoord2d(1.0, 0.0); glVertex3f(1.0f, 1.0f, -1.0f);
		glTexCoord2d(0.0, 0.0); glVertex3f(-1.0f, 1.0f, -1.0f);
	glEnd();
	glDisable(GL_TEXTURE_2D);
}

void Maravilla()
{
	gluBuild2DMipmaps( GL_TEXTURE_2D, MARAVILLA.bytes_per_pixel, MARAVILLA.width,
			   MARAVILLA.height,GL_RGB, GL_UNSIGNED_BYTE, MARAVILLA.pixel_data );
	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);
		glColor3f(1.0,1.0,1.0);
		glTexCoord2d(0.0, 1.0); glVertex3f(-1.0f, -1.0f, 1.0f);
		glTexCoord2d(1.0, 1.0); glVertex3f(1.0f, -1.0f, 1.0f);
		glTexCoord2d(1.0, 0.0); glVertex3f(1.0f, 1.0f, 1.0f);
		glTexCoord2d(0.0, 0.0); glVertex3f(-1.0f, 1.0f, 1.0f);
	glEnd();
	glDisable(GL_TEXTURE_2D);
}

void Ironman()
{
	gluBuild2DMipmaps( GL_TEXTURE_2D, IRONMAN.bytes_per_pixel, IRONMAN.width,
			   IRONMAN.height,GL_RGB, GL_UNSIGNED_BYTE, IRONMAN.pixel_data );
	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);
		glColor3f(1.0,1.0,1.0);
		glTexCoord2d(0.0, 1.0); glVertex3f(-1.0f, 1.0f, -1.0f);
		glTexCoord2d(1.0, 1.0); glVertex3f(-1.0f, -1.0f, -1.0f);
		glTexCoord2d(1.0, 0.0); glVertex3f(-1.0f, -1.0f, 1.0f);
		glTexCoord2d(0.0, 0.0); glVertex3f(-1.0f, 1.0f, 1.0f);
	glEnd();
	glDisable(GL_TEXTURE_2D);
}

/*
	00	10
	01	11
*/
void Dibuja(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	PintaEjes( ); Gradua( );
	glPushMatrix(); 
	
	ANG = ( ANG == 360 ) ? 0 : ANG+10;
	glRotatef(ANG, 0.0f, 0.0f, 1.0f);
	glRotatef(60, 1.0f, 0.0f, 1.0f); glTranslatef(1, 1, 1);
	Superman(); Tigre(); Batman(); Hulk(); Maravilla(); Ironman();
	glPopMatrix();
	glFlush();
	
	//glutSwapBuffers();
}

int main(int argc, char ** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowPosition(700,100);
	glutInitWindowSize(650,650);
	glutCreateWindow("USO DE TEXTURAS ... ");
	Inicializa();
	glutDisplayFunc(Dibuja);
	glutIdleFunc(Tiempo);
	glutMainLoop();
}