-
Notifications
You must be signed in to change notification settings - Fork 16
/
triangle.hpp
49 lines (37 loc) · 1.09 KB
/
triangle.hpp
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
#pragma once
#include "math/float3.hpp"
namespace fr = FireRays;
struct VertexPNT
{
fr::float3 p; // position
fr::float3 n; // normal
fr::float3 t; // texture coordinates
// float3 c; // color
VertexPNT(void) {}
VertexPNT(const fr::float3& pp, const fr::float3& nn, const fr::float3& tt) : p(pp), n(nn), t(tt) {}
};
struct RTTriangle {
VertexPNT v0, v1, v2;
int matId = 0; // default material, defined in scene constructor
// TODO: Fix alignment issues!
RTTriangle(const VertexPNT &v0i, const VertexPNT &v1i, const VertexPNT &v2i) {
v0 = v0i;
v1 = v1i;
v2 = v2i;
}
inline fr::float3 min() const {
return vmin(v0.p, vmin(v1.p, v2.p));
}
inline fr::float3 max() const {
return vmax(v0.p, vmax(v1.p, v2.p));
}
inline fr::float3 centroid() const {
return (v0.p + v1.p + v2.p) * (1.0f / 3.0f);
}
inline float area() const {
return length(cross(v1.p - v0.p, v2.p - v0.p)) * .5f;
}
fr::float3 normal() const {
return normalize(cross(v1.p - v0.p, v2.p - v0.p));
}
};