Subversion Repositories gelsvn

Rev

Rev 299 | Rev 443 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
290 jrf 1
#ifndef __TRIANGLE_H
2
#define __TRIANGLE_H
3
 
4
#include "CGLA/Vec2f.h"
5
#include "CGLA/Vec3f.h"
6
#include "CGLA/Mat3x3f.h"
7
 
8
#define COMPUTE_SIGN
9
 
291 jrf 10
namespace Geometry
11
{
12
 
290 jrf 13
class Triangle
14
{
15
	CGLA::Vec3f vert[3];
16
	CGLA::Vec3f edge[3];
17
 
18
#ifdef COMPUTE_SIGN
19
	CGLA::Vec3f vert_norm[3];
20
	CGLA::Vec3f edge_norm[3];
21
#endif
22
	CGLA::Vec3f face_norm;
23
 
24
	CGLA::Vec3f tri_plane_edge_norm[3];
25
	float edge_len[3];
26
 
27
 public:
28
 
29
	Triangle() {}
30
 
31
	Triangle(const CGLA::Vec3f& _v0, 
32
					 const CGLA::Vec3f& _v1, 
33
					 const CGLA::Vec3f& _v2,
34
 
35
					 const CGLA::Vec3f& _vn0,
36
					 const CGLA::Vec3f& _vn1,
37
					 const CGLA::Vec3f& _vn2,
38
 
39
					 const CGLA::Vec3f& _en0,
40
					 const CGLA::Vec3f& _en1,
41
					 const CGLA::Vec3f& _en2);
42
 
43
	bool intersect(const CGLA::Vec3f&, const CGLA::Vec3f&, float&) const;
44
 
45
	const CGLA::Vec3f get_pmin() const 
46
	{
47
		return v_min(vert[0],v_min(vert[1],vert[2]));
48
	}
49
 
50
	const CGLA::Vec3f get_pmax() const 
51
	{
52
		return v_max(vert[0],v_max(vert[1],vert[2]));
53
	}
54
 
55
	const CGLA::Vec3f centre() const
56
		{
57
			return (vert[0]+vert[1]+vert[2])/3.0f;
58
		}
59
 
60
	const float area() const 
61
		{
62
			return 0.5 * (cross(edge[0],-edge[2])).length();
63
		}
64
 
65
	const CGLA::Vec3f get_centre() const 
66
	{
67
		CGLA::Vec3f pmin = get_pmin();
68
		CGLA::Vec3f pmax = get_pmax();
69
		return (pmax-pmin)/2.0f+pmin;
70
	}
71
 
72
	bool signed_distance(const CGLA::Vec3f& p, float& sq_dist, float& sgn) const;
73
 
74
	CGLA::Vec3f get_v0() const {return vert[0];}
75
	CGLA::Vec3f get_v1() const {return vert[1];}
76
	CGLA::Vec3f get_v2() const {return vert[2];}
77
 
78
	const CGLA::Vec3f& get_edge(int i) const {return edge[i];}
309 jab 79
 
80
	const CGLA::Vec3f& get_face_norm() const {return face_norm;}
290 jrf 81
 
82
};	
83
 
291 jrf 84
}
290 jrf 85
#endif