1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include "model.h"
#include <stdlib.h>
void initializeCube(MODEL *cube) {
// Initialize a cube model
cube->bounds_center = createVertex(0, 0, 0);
COLOR red = createColor(255,0,0);
COLOR green = createColor(0,255,0);
COLOR blue = createColor(0,0,255);
COLOR yellow = createColor(255,255,0);
COLOR pink = createColor(255, 0, 100);
COLOR weird = createColor(100, 255, 70);
cube->vertices = malloc(sizeof(VERTEX) * 8);
cube->triangles = malloc(sizeof(TRIANGLE) * 12);
cube->vertices_length = 8;
cube->triangles_length = 12;
VERTEX vertices[8] = {
createVertex( -1 << FIX_SHIFT, -1 << FIX_SHIFT, -1 << FIX_SHIFT), // (0,0,0) 0
createVertex( -1 << FIX_SHIFT, 1 << FIX_SHIFT, -1 << FIX_SHIFT), // (0,1,0) 1
createVertex( 1 << FIX_SHIFT, 1 << FIX_SHIFT, -1 << FIX_SHIFT), // (1,1,0) 2
createVertex( 1 << FIX_SHIFT, -1 << FIX_SHIFT, -1 << FIX_SHIFT), // (1,0,0) 3
createVertex( 1 << FIX_SHIFT, 1 << FIX_SHIFT, 1 << FIX_SHIFT), // (1,1,1) 4
createVertex( 1 << FIX_SHIFT, -1 << FIX_SHIFT, 1 << FIX_SHIFT), // (1,0,1) 5
createVertex( -1 << FIX_SHIFT, 1 << FIX_SHIFT, 1 << FIX_SHIFT), // (0,1,1) 6
createVertex( -1 << FIX_SHIFT, -1 << FIX_SHIFT, 1 << FIX_SHIFT), // (0,0,1) 7
};
TRIANGLE triangles[12] = {
createTriangle( 0, 1, 2, red),
createTriangle( 0, 2, 3, red),
createTriangle( 3, 2, 4, green),
createTriangle( 3, 4, 5, green),
createTriangle( 5, 4, 6, blue),
createTriangle( 5, 6, 7, blue),
createTriangle( 7, 6, 1, yellow),
createTriangle( 7, 1, 0, yellow),
createTriangle( 1, 6, 4, pink),
createTriangle( 1, 4, 2, pink),
createTriangle( 5, 7, 0, weird),
createTriangle( 5, 0, 3, weird),
};
for (int i = 0; i < 8; i++) {
// Copy vertices data to cube
*(cube->vertices + i) = vertices[i];
}
for (int i = 0; i < 12; i++) {
// Copy triangles to cube
*(cube->triangles + i) = triangles[i];
}
}
void destroyModel(MODEL *model) {
// Free memory of a model
model->vertices = NULL;
model->triangles = NULL;
free(model->vertices);
free(model->triangles);
}
|