00001
00002 #ifndef Y_MESHTYPES_H
00003 #define Y_MESHTYPES_H
00004
00005 #include <core_api/object3d.h>
00006 #include <yafraycore/triangle.h>
00007 #include <yafraycore/vmap.h>
00008
00009
00010 __BEGIN_YAFRAY
00011
00012
00013 struct uv_t
00014 {
00015 uv_t(GFLOAT _u, GFLOAT _v): u(_u), v(_v) {};
00016 GFLOAT u, v;
00017 };
00018
00019 class triangle_t;
00020 class vTriangle_t;
00021
00025 class YAFRAYCORE_EXPORT meshObject_t: public object3d_t
00026 {
00027 friend class vTriangle_t;
00028 friend class bsTriangle_t;
00029 friend class scene_t;
00030 public:
00031 meshObject_t(int ntris, bool hasUV=false, bool hasOrco=false);
00034 int numPrimitives() const { return triangles.size() + s_triangles.size(); }
00035 int getPrimitives(const primitive_t **prims) const;
00036
00037 primitive_t* addTriangle(const vTriangle_t &t);
00038 primitive_t* addBsTriangle(const bsTriangle_t &t);
00039
00040 void setContext(std::vector<point3d_t>::iterator p, std::vector<normal_t>::iterator n);
00041 void setLight(const light_t *l){ light=l; }
00042 void finish();
00043 protected:
00044 std::vector<vTriangle_t> triangles;
00045 std::vector<bsTriangle_t> s_triangles;
00046 std::vector<point3d_t>::iterator points;
00047 std::vector<normal_t>::iterator normals;
00048 std::vector<int> uv_offsets;
00049 std::vector<uv_t> uv_values;
00050 std::map<int, vmap_t> vmaps;
00051 bool has_orco;
00052 bool has_uv;
00053 bool has_vcol;
00054 bool is_smooth;
00055 const light_t *light;
00056 const matrix4x4_t world2obj;
00057 };
00058
00064 class YAFRAYCORE_EXPORT triangleObject_t: public object3d_t
00065 {
00066 friend class triangle_t;
00067 friend class scene_t;
00068 public:
00069 triangleObject_t(int ntris, bool hasUV=false, bool hasOrco=false);
00072 virtual int numPrimitives() const { return triangles.size(); }
00074 virtual int getPrimitives(const primitive_t **prims) const{ return 0; }
00075 int getPrimitives(const triangle_t **prims);
00076 virtual int evalVMap(const surfacePoint_t &sp, unsigned int ID, float *val) const;
00077
00078 triangle_t* addTriangle(const triangle_t &t);
00079
00080 void setContext(std::vector<point3d_t>::iterator p, std::vector<normal_t>::iterator n);
00081 void finish();
00082 protected:
00083 std::vector<triangle_t> triangles;
00084 std::vector<point3d_t>::iterator points;
00085 std::vector<normal_t>::iterator normals;
00086 std::vector<int> uv_offsets;
00087 std::vector<uv_t> uv_values;
00088 std::map<int, vmap_t> vmaps;
00089 bool has_orco;
00090 bool has_uv;
00091 bool has_vcol;
00092 bool is_smooth;
00093 const matrix4x4_t world2obj;
00094 };
00095
00096 #include <yafraycore/triangle_inline.h>
00097
00098 __END_YAFRAY
00099
00100
00101 #endif //Y_MESHTYPES_H
00102