-
Notifications
You must be signed in to change notification settings - Fork 0
/
Primitive.h
46 lines (33 loc) · 905 Bytes
/
Primitive.h
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
#ifndef PRIMITIVE__H_
#define PRIMITIVE__H_
#include "Material.h"
// Primitive definitions (sphere, triangle, plane).
// Padded carefully to match the struct layouts in raytracer.frag (see their definitions
// there for details).
struct Sphere {
Material material;
Vec3 position;
float radius;
Sphere(Material m, Vec3 p, float r) : material(m), position(p), radius(r) {}
};
struct Triangle {
Material material;
Vec3 v0;
float pad0 = 0;
Vec3 v1;
float pad1 = 0;
Vec3 v2;
float pad2 = 0;
Vec3 normal;
float pad3 = 0;
Triangle(Material m, Vec3 v[3]) : material(m), v0(v[0]), v1(v[1]), v2(v[2]), normal(cross(v1 - v0, v2 - v0).normal()) {}
};
struct Plane {
Material material;
Vec3 normal;
float pad0 = 0;
Vec3 point;
float pad1 = 0;
Plane(Material m, Vec3 n, Vec3 p) : material(m), normal(n), point(p) {}
};
#endif