#ifndef _ELITEUTILS_H
#define _ELITEUTILS_H

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

#define  PI acos(-1.0)

typedef struct  MaterialStruct 
    {
      float emission[4];
      float ambient[4];
      float diffuse[4];
      float specular[4];
      float shininess[1];
} Material;

typedef struct Point2Struct {
  float x, y;
} Point2;

typedef struct Point3Struct {
  float x, y, z;
} Point3;


GLvoid drawEliteObject(int numberOfFaces, Point3 vertex[], long face[], Material material[]);

GLvoid drawEliteObject2(int numberOfFaces, Point3 vertex[], long face[], Material material[]);

GLvoid renderBitmapString(void *font, char *string);

// routa il vettore vView attorno all'asse axis dell'angolo angle in gradi
extern Point3 RotateVector(float  angle, Point3 axis, Point3 vView);

// calcola prodotto esterno
extern Point3 Cross(Point3 vVector1, Point3 vVector2);

// calcola la normale ad un triangolo di vertici v1,v2,v3
extern Point3 Calc_normal(Point3 v1, Point3 v2, Point3 v3) ;

/* Prodotto scalare tra due vettori */
extern float ProdScal(Point3 v1, Point3 v2);

extern Point3 Normalize(Point3 v);

Point3  Scalar(Point3 v, float s);

void drawSight(float x, float y);

#endif

/* Credits:
   Riccardo Giannitrapani per la scrittura di bitmap
   Ben Humphrey (DigiBen@GameTutorials.com) per la texture e la classe camera
   Tutorial  SGI (quello che c'e' sulla pagina web del lab) in generale */

