EJEM_02_04.c



/*     USO DE:     glFrustum(x_min, x_max, y_min, y_max, z_cerca, z_lejos)     */
/*	se vE mas grande lo que estA mas cerca y lo lejano se ve mas pequeño
	Esta es la principal diferencia con la proyección ortogonal
	que los rayos proyectivos no son paralelos.
*/


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

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();
}

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()
{
	glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-5.0,5.0, -5.0,5.0, -5.0,5.0);
}

void Dibuja(void)
{	
	glMatrixMode(GL_MODELVIEW);
	gluLookAt(2,2,2,  0,0,-5,  0,1,0);
	//gluLookAt(2,0,2,  0,3,-2,  0,-1,0);
	PintaEjes( ); Gradua( );
	glBegin(GL_QUADS);
		glColor3f(1.0f, 1.0f, 0.0f);
		glVertex3f(-2.0f, -2.0f, 0.0f);
		glVertex3f(2.0f, -2.0f, 0.0f);
		glVertex3f(2.0f, -2.0f, 4.0f);
		glVertex3f(-2.0f, -2.0f, 4.0f);
	glEnd();
	glTranslatef(-0.0f, -0.0f, -2.0f);
	glutWireSphere(0.50, 50, 50);
	glFlush();
	sleep(30);
	exit(0);
}


int main(int argc, char ** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
	glutInitWindowPosition(300,150);
	glutInitWindowSize(650,650);
	glutCreateWindow("USO DE LA CAMARA ... ");
	Inicializa();
	glutDisplayFunc(Dibuja);
	glutMainLoop();
	return 0;
}