00001
00002 #ifndef _GK_PN_TRIANGLE_H
00003 #define _GK_PN_TRIANGLE_H
00004
00005 #include "Geometry.h"
00006 #include "Transform.h"
00007 #include "Triangle.h"
00008
00009 namespace gk {
00010
00011
00012 struct PNTriangle : public Triangle
00013 {
00014 Normal na, nb, nc;
00015
00016
00017 PNTriangle( )
00018 :
00019 Triangle()
00020 {}
00021
00022
00023 PNTriangle(
00024 const Point& _a, const Normal& _na,
00025 const Point& _b, const Normal& _nb,
00026 const Point& _c, const Normal& _nc )
00027 :
00028 Triangle(_a, _b, _c),
00029 na(_na), nb(_nb), nc(_nc)
00030 {}
00031
00032
00033 ~PNTriangle( ) {}
00034
00035
00036
00037 Normal getUVNormal( const float u, const float v ) const
00038 {
00039 const float w= 1.f - u - v;
00040 return na * w + nb * u + nc * v;
00041 }
00042
00043
00044 PNTriangle transform( const Transform& t )
00045 {
00046 return PNTriangle( t(a), t(na), t(b), t(nb), t(c), t(nc) );
00047 }
00048
00049
00050 Triangle getBaseTriangle( )
00051 {
00052 return Triangle(a, b, c);
00053 }
00054 };
00055
00056 }
00057 #endif