-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.c
74 lines (71 loc) · 2.04 KB
/
main.c
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "display.h"
#include "render.h"
#include "types.h"
#include "util.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void demo(char *mfile, char *tfile) {
display_init();
model_t *m = load_model(mfile);
uint32_t *tx = NULL;
vec2 dim = {0};
if (tfile) {
tx = load_texture(tfile, &dim);
}
light_t l[] = {{0, {0, 0, 0, 0.2}}, {1, {-1, 0, -1, 0.8}}};
instance_t inst[] = {
{m, {1.0, {0, 45, 0}, {1.0, 0.0, 5}}, tx, dim},
{m, {1.0, {0, -45, 0}, {-0.5, 0.0, 7}}, tx, dim},
{m, {1.0, {0, 35, 0}, {-1.5, 0.0, 5}}, tx, dim},
{m, {1.0, {0, 25, 0}, {2.5, 0.0, 8}}, tx, dim},
{m, {1.0, {0, 65, 0}, {1.5, 0.0, 15}}, tx, dim},
};
scene_t *s = construct_scene(inst, sizeof(inst) / sizeof(instance_t),
(transform_t){0, {0, 0, 0}, {0, 0, 0}}, l,
sizeof(l) / sizeof(l[0]));
s->pl = generate_fov90_planes();
render(s);
display_show();
display_close();
free_model(m);
free(tx);
printf("Render model successfully\n");
}
void single(char *mfile, char *tfile) {
display_init();
model_t *m = load_model(mfile);
uint32_t *tx = NULL;
vec2 dim = {0};
if (tfile) {
tx = load_texture(tfile, &dim);
}
light_t l[] = {{0, {0, 0, 0, 0.2}}, {1, {-1, 0, -1, 0.8}}};
instance_t inst[] = {
{m, {1.0, {0, 45, 0}, {1.0, 0.0, 5}}, tx, dim},
};
scene_t *s = construct_scene(inst, sizeof(inst) / sizeof(instance_t),
(transform_t){0, {0, 0, 0}, {0, 0, 0}}, l,
sizeof(l) / sizeof(l[0]));
s->pl = generate_fov90_planes();
render(s);
display_show();
display_close();
free_model(m);
free(tx);
printf("Render model successfully\n");
}
int main(int argc, char *argv[]) {
if (argc <= 1) {
printf("Specify model file or test\n");
return -1;
}
if (strcmp(argv[1], "demo") == 0) {
demo("models/spot.obj", "models/spot_texture.png");
} else if (strcmp(argv[1], "anime") == 0) {
anime();
} else {
single(argv[1], argc == 3 ? argv[2] : NULL);
}
return 0;
}