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

int tri1=1,tri2=1;
int depth=0;

void drawTriangle(void)
	{
	glPushMatrix();
	glRotatef(30,0.0,1.0,0.0);
	glBegin(GL_TRIANGLES);
	 glVertex3f(-1.0, -1.0, 0.0);
	 glVertex3f(1.0, -1.0, 0.0);
	 glVertex3f(0.0, 1.5, 0.0);
	glEnd();
	glPopMatrix();
	}

void drawTriangle2(void)
	{
	glPushMatrix();
	glRotatef(-30,0.0,1.0,0.0);
	glBegin(GL_TRIANGLES);
	 glVertex3f(-2.0, -1.0, 0.0);
	 glVertex3f(2.0, -1.0, 0.0);
	 glVertex3f(0.0, 0.5, 0.0);
	glEnd();
	glPopMatrix();
	}


void drawEverything(void)
	{
	glClearColor(0.0, 0.0, 0.0, 0.0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glEnable(GL_DEPTH_TEST);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60.0, 1.0, 1.0, 10.0);
	glMatrixMode(GL_MODELVIEW);

	glLoadIdentity();
	
	if (depth)
		{
		GLfloat params[4] = { 0, 0, 0, 0 };
		glFogf(GL_FOG_MODE, GL_LINEAR);
		glFogf(GL_FOG_START, 2.0);
		glFogf(GL_FOG_END, 4.0);
		glFogfv(GL_FOG_COLOR, params);
		glColor3f(1.0, 1.0, 1.0);
		glEnable(GL_FOG);
		}
	else
		glDisable(GL_FOG);

	glTranslatef(-0.5, 0.0, -3.0);
	if (!depth)
		glColor3f(0.5, 0.4, 0.0);
	if (tri1)
		drawTriangle();
	
	glTranslatef(0.25, 0.0, -0.5);
	if (!depth)
		glColor3f(0.0, 0.9, 1.0);
	if (tri2)
		drawTriangle2();

	glutSwapBuffers();
	}


static void key(unsigned char k, int x, int y)
	{
	if (k == 27)
		exit(0);
	else if (k == '1')
		tri1 = !tri1;
	else if (k == '2')
		tri2 = !tri2;
	else if (k == 'd')
		depth = !depth;
	glutPostRedisplay();
	}



int main(int argc, char *argv[])
	{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
	glutCreateWindow("example");
	glutDisplayFunc(drawEverything);
	glutKeyboardFunc(key);
	glutMainLoop();
	return 0;
	}
