#include <GL/glut.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define SMALL_STARS	15
GLfloat  vSmallStars[SMALL_STARS][2];

#define MEDIUM_STARS   4
GLfloat vMediumStars[MEDIUM_STARS][2];

#define LARGE_STARS 15
GLfloat vLargeStars[LARGE_STARS][2];

float pippo[10][10];

#define SCREEN_X    800
#define SCREEN_Y    600

void SetupRC(){
pippo[3][3]=30.0;
	 int i;
     srand(time(NULL));
     for(i = 0; i < SMALL_STARS; i++)
        {
        vSmallStars[i][0] = (GLfloat)(rand() % SCREEN_X);
        vSmallStars[i][1] = (GLfloat)(rand() % (SCREEN_Y - 100))+100.0f;
        }
            
     for(i = 0; i < MEDIUM_STARS; i++)
        {
        vMediumStars[i][0] = (GLfloat)(rand() % SCREEN_X * 10)/10.0f;
        vMediumStars[i][1] = (GLfloat)(rand() % (SCREEN_Y - 100))+100.0f;
        }
     for(i = 0; i < LARGE_STARS; i++)
        {
        vLargeStars[i][0] = (GLfloat)(rand() % SCREEN_X*10)/10.0f;
        vLargeStars[i][1] = (GLfloat)(rand() % (SCREEN_Y - 100)*10.0f)/ 10.0f +100.0f;
        }
     glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
     glColor3f(0.0f, 0.0f, 0.0f);
}

void RenderScene(void)
    {
  
    GLfloat x = 700.0f;   //posizione e raggio della luna 
    GLfloat y = 500.0f;
    GLfloat r = 50.0f;
    GLfloat angle = 0.0f;  		        
    // Clear the window
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         
    glColor3f(1.0f, 1.0f, 1.0f);
    
	glEnableClientState(GL_VERTEX_ARRAY);

    // disegna le stelle piccole
    glPointSize(1.0f);
   
	glVertexPointer(2,GL_FLOAT,0,vSmallStars);
	glDrawArrays(GL_POINTS,0,SMALL_STARS);
    
     // disegna le stelle medie
    glPointSize(3.05f);
    glVertexPointer(2,GL_FLOAT,0,vMediumStars);
	glDrawArrays(GL_POINTS,0,MEDIUM_STARS);
        
 // disegna le stelle grandi
    glPointSize(5.5f);
     glVertexPointer(2,GL_FLOAT,0,vLargeStars);
	glDrawArrays(GL_POINTS,0,LARGE_STARS);
        
    // disegna la luna
    glBegin(GL_TRIANGLE_FAN);
        glVertex2f(x, y);
        for(angle = 0; angle < 2.0f * 3.141592f; angle += 0.1f)
            glVertex2f(x + (float)cos(angle) * r, y + (float)sin(angle) * r);
            glVertex2f(x + r, y);
    glEnd();

    glutSwapBuffers();
    }
	
void ChangeSize(int w, int h)
    {
    // Prevent a divide by zero
    if(h == 0)
        h = 1;

    // Set Viewport to window dimensions
    glViewport(0, 0, w, h);

    // Reset projection matrix stack
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    // Establish clipping volume (left, right, bottom, top, near, far)
    gluOrtho2D(0.0, SCREEN_X, 0.0, SCREEN_Y);


    // Reset Model view matrix stack
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

int main(int argc, char* argv[])
	{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(800, 600);
	glutCreateWindow("Vertex array");
	glutReshapeFunc(ChangeSize);
	glutDisplayFunc(RenderScene);
	SetupRC();

	glutMainLoop();

	return 0;
	}
