#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "glut.h"
#include "gl.h"

float cas_sekunde = 0.0;

/* ===================================== */
void risi_nihalo()
{
  int i;
  float pi=3.14159, x, y, z;
  float A=0.5, omega=1000.0*3.14159/180.0;
  float dolzina_vzmeti;

  dolzina_vzmeti = 1.8 + A*cos(omega*cas_sekunde);
  
  glDisable(GL_LIGHTING);
  glBegin(GL_LINE_STRIP);
    for (i=0;i<360*5;i+=5) {
      x = 0.2*cos(pi*i/180.0);
      y = 0.2*sin(pi*i/180.0);
      z = i*0.001*dolzina_vzmeti/1.8;
      glVertex3f(x, y, z);
    }
  glEnd();
  glEnable(GL_LIGHTING);
  glTranslatef(0.0, 0.0, dolzina_vzmeti);
  glutSolidSphere(0.3, 10, 10);
}
/* ===================================== */
void risi()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glColor3f(1.0, 0.4, 1.0);

  glLoadIdentity();
  glRotatef(30.0, 1.0, 0.0, 0.0);
  glRotatef(30.0, 0.0, 1.0, 0.0);
  glTranslatef(0.0, 0.0, -1.0);

  risi_nihalo();

  glutSwapBuffers();
}
/* ===================================== */
void inicializiraj_gl()
{
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_COLOR_MATERIAL);
  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(-1.0,1.0, -1.0,1.0, -1.0,1.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}
/* ===================================== */
void povecaj_cas(int nepomembna)
{
  cas_sekunde = cas_sekunde + 0.01;
  glutPostRedisplay();
  glutTimerFunc(10, povecaj_cas, 0);
}
/* ===================================== */
int main(int argn, char **argc)
{
  int moje_okno;

  glutInit(&argn, argc);
  glutInitWindowSize(500, 500);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
  moje_okno = glutCreateWindow("risi_miska");

  inicializiraj_gl();

  glutDisplayFunc (risi);
  glutMotionFunc (miska);
  glutTimerFunc (2000, povecaj_cas, 0);

  glutMainLoop();

  return 0;
}
