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


#define ESC_KEY 27
#define UP_KEY 38
#define LEFT_KEY 37
#define RIGHT_KEY 39
#define DOWN_KEY 40
#define A_KEY 97

GLfloat rotate = 0.0f;
GLfloat angley = 0.0f;
GLfloat anglex = 0.0f;




void display ( void ) 
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
  glRotatef(rotate,0.0,0.0,1.0f);

	glBegin(GL_TRIANGLES);
		glColor4f(1.0,0.0,0.0,1.0);
		glVertex3f(0.0f, 2.0f, -6.0f);				
		glVertex3f(-1.0f, 0.0f, -6.0f);	
		glVertex3f( 1.0f, 0.0f, -6.0f);		
	glEnd();	

	glBegin(GL_QUADS);		
		glColor4f(1.0,1.0,0.0,1.0);
		glVertex3f(-.5f, 0.0f,-6.0f);					
			glVertex3f( .5f, 0.0f, -6.0f);					
		glVertex3f( .5f,-2.0f, -6.0f);				
		glVertex3f(-.5f,-2.0f, -6.0f);				
	glEnd();

glRotatef(45.0f,0.0f,0.0f,1.0f);  
  oglSquare(mathPoint<GLfloat>(-1.0,0.0,-4.0),mathVector<GLfloat>(1.0f,0.0,0.0f), 3.0f,2.0f);
  oglSquare(mathPoint<GLfloat>(1.0,0.0,-4.0),mathVector<GLfloat>(1.0f,0.0,0.0f), 3.0f,2.0f);
  oglSquare(mathPoint<GLfloat>(0.0,1.0,-4.0),mathVector<GLfloat>(0.0f,1.0f,0.0f), 3.0f,2.0f);

  glPopMatrix();

	glutSwapBuffers();
}




void reshape(int width, int height)   
{
  glViewport(0, 0, width, height);
  glMatrixMode(GL_PROJECTION);  
  glLoadIdentity();              
  if (height==0)  
     gluPerspective ( 75, float(width), 1, 500.0 );
  else
     gluPerspective ( 75, float(width)/height, 1, 500.0 );
  glMatrixMode(GL_MODELVIEW);
 }

void keyboard ( unsigned char key, int x, int y )  
{
  switch ( key ) 
  {
    case ESC_KEY:   
      printf("Hej");
		  exit(0);
      break;
    case A_KEY:
      rotate = -270.0f;
      printf("rotate %f\n",rotate);
      break;
    default:        
      break;
  }
  glutPostRedisplay();
}

void processSpecialKeys(int key, int x, int y) {
  switch( key ) {
    case GLUT_KEY_LEFT:
      rotate = -270.0f;
      angley -= 10.0f;
      printf("rotate %f\n",rotate);
      break;
    case GLUT_KEY_RIGHT:
      angley += 10.0f;
      rotate = -90.0f;
      printf("rotate %f\n",rotate);
      break;
    case GLUT_KEY_UP:
      rotate = 0.0f;
      anglex -= 10.0f;
      printf("rotate %f\n",rotate);
      break;
    case GLUT_KEY_DOWN:
      rotate = 180.0f;
      anglex += 10.0f;
      printf("rotate %f\n",rotate);
      break;
    default:
      printf("unknown key\n");
      break;
  }
  glutPostRedisplay();
}

void main(int argc, char* argv[])  
{
 

  glutInit(&argc, argv); 
  glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
  glutInitWindowSize(500, 500 );
  glutCreateWindow("My GLUT application");
  glutDisplayFunc(display);
  glutIdleFunc(display);
  
  glutKeyboardFunc(keyboard);
  glutReshapeFunc(reshape);
  glutSpecialFunc(processSpecialKeys);
  glutMainLoop();
  
  
  
}