1 #ifndef _TRIANGLE_H
2 #define _TRIANGLE_H
3
4 #include "shape.h"
5
6 //- Triangle
7 class Triangle : public Shape {
8 //. Triangle Class.
9 public:
10 //- Triangle
11 Triangle();
12 Triangle(const Vector& v0, const Vector& v1, const Vector& v2);
13
14 //- set/getVertex, set/GetNormal, triangleNormal
15 const Vector& getVertex(int i) const;
16 void setVertex(int i,const Vector& v);
17 const Vector& getNormal(int i) const;
18 void setNormal(int i,const Vector& n);
19 const Vector& triangleNormal() const;
20
21 void normalizeNormals();
22
23
24 // intersect
25 virtual bool intersect(const Ray& r,Vector& p,Vector& n, double& d) const;
26
27
28 //- operator>>
29 friend istream& operator>>(istream&, Triangle&);
30
31 private:
32 Vector v_[3];
33 Vector n_[3];
34 Vector triNrm_;
35 };
36
37
38 inline const Vector& Triangle::getVertex(int i) const { return v_[i]; }
39 inline void Triangle::setVertex(int i,const Vector& v) { v_[i] = v; }
40 inline const Vector& Triangle::getNormal(int i) const { return n_[i]; }
41 inline void Triangle::setNormal(int i,const Vector& n) { n_[i] = n; }
42 inline const Vector& Triangle::triangleNormal() const { return triNrm_;}
43
44
45 #endif // _TRIANGLE_H
46
47