blob: 7eef58859ed6e5cb42b478904a6447eed2ac5858 (
plain)
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
75
76
77
78
79
|
#ifndef SCENE_H
#define SCENE_H
#include <stdbool.h>
#include <stdint.h>
#include "vector.h"
#include "viewpoint.h"
#include "pgm.h"
#define TYPE_SPHERE 1
#define TYPE_PLANE 2
typedef struct {
vector_t *center;
COORD_T radius;
} sphere_t;
typedef struct {
vector_t *start;
vector_t *norm;
} plane_t;
typedef struct light_s{
vector_t *pos;
color_t *defuse;
color_t *specular;
struct light_s *next;
} light_t;
typedef struct {
vector_t color;
// Light properties
COORD_T defuse;
COORD_T specular;
unsigned int shine;
// Reflective properties
COORD_T reflective;
} material_t;
// General object structure
typedef struct object_s{
uint8_t type;
struct object_s *next;
// Color and light information
material_t *m;
union {
sphere_t sph;
plane_t pl;
};
} object_t;
typedef struct {
viewpoint_t view;
object_t *objects;
light_t *lights;
color_t ambient;
color_t back;
// Environment light
// TODO make more general
// Slows things down alot
bool env_enabled;
color_t env_color;
} space_t;
object_t *add_sphere(space_t *s, vector_t *c, COORD_T r, material_t *m);
object_t *add_plane(space_t *s, vector_t *start, vector_t *dir, material_t *m);
light_t *add_light(space_t *s, vector_t *pos, color_t *defuse, color_t *specular);
void obj_norm_at(object_t *o, vector_t *dest, vector_t *point);
#endif
|