1 #include <unistd.h>
2 #include <math.h>
3 
4 
5 #include "globals.h"
6 #include "model.h"
7 
8 
InitAsteroid(int asteroidNum)9 void InitAsteroid(int asteroidNum)
10 {
11   int x, y, z;
12   int VertexNum;
13   float color;
14 
15   AsteroidModels[asteroidNum]=(struct Model *)malloc(sizeof(struct Model));
16 
17   AsteroidModels[asteroidNum]->NumSides=8;
18 
19   AsteroidModels[asteroidNum]->Sides=(struct Triangle *)malloc(sizeof(struct Triangle)*8);
20 
21   AsteroidModels[asteroidNum]->Points=NULL;
22 
23   for (x=-1; x<2; x+=2) {
24     for (y=-1; y<2; y+=2) {
25       for (z=-1; z<2; z+=2) {
26         VertexNum=(x*4+y*2+z+7)/2;
27 
28         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[0]=(struct Point *)malloc(sizeof(struct Point));
29         AsteroidModels[asteroidNum]->Sides[VertexNum].VertexColors[0]=(struct Color *)malloc(sizeof(struct Color));
30         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[0]->x=x;
31         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[0]->y=0.0;
32         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[0]->z=0.0;
33 
34         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[1]=(struct Point *)malloc(sizeof(struct Point));
35         AsteroidModels[asteroidNum]->Sides[VertexNum].VertexColors[1]=(struct Color *)malloc(sizeof(struct Color));
36         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[1]->x=0.0;
37         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[1]->y=y;
38         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[1]->z=0.0;
39 
40         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[2]=(struct Point *)malloc(sizeof(struct Point));
41         AsteroidModels[asteroidNum]->Sides[VertexNum].VertexColors[2]=(struct Color *)malloc(sizeof(struct Color));
42         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[2]->x=0.0;
43         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[2]->y=0.0;
44         AsteroidModels[asteroidNum]->Sides[VertexNum].Vertices[2]->z=z;
45       }
46     }
47   }
48 
49   GenModelPoints(AsteroidModels[asteroidNum]);
50   RandomizeModel(AsteroidModels[asteroidNum], 0.30);
51   AddModelDetail(&AsteroidModels[asteroidNum]);
52   RandomizeModel(AsteroidModels[asteroidNum], 0.60);
53   RandomizeModelColors(AsteroidModels[asteroidNum]);
54   AddModelDetail(&AsteroidModels[asteroidNum]);
55   RandomizeModel(AsteroidModels[asteroidNum], 0.30);
56   AddModelDetail(&AsteroidModels[asteroidNum]);
57   ShrinkModel(AsteroidModels[asteroidNum], 1.0/FindFurthestPoint(AsteroidModels[asteroidNum]));
58   ReCenterModel(AsteroidModels[asteroidNum]);
59 }
60