00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef opengl_CSetOfTriangles_H
00029 #define opengl_CSetOfTriangles_H
00030
00031 #include <mrpt/opengl/CRenderizable.h>
00032
00033 namespace mrpt
00034 {
00035 namespace opengl
00036 {
00037 class MRPTDLLIMPEXP CSetOfTriangles;
00038
00039
00040 DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE( CSetOfTriangles, CRenderizable )
00041
00042
00046 class MRPTDLLIMPEXP CSetOfTriangles : public CRenderizable
00047 {
00048 DEFINE_SERIALIZABLE( CSetOfTriangles )
00049 public:
00050 struct MRPTDLLIMPEXP TTriangle
00051 {
00052 float x[3],y[3],z[3];
00053 float r[3],g[3],b[3],a[3];
00054 };
00055
00056 void clearTriangles() { m_triangles.clear(); }
00057 size_t getTrianglesCount() const { return m_triangles.size(); }
00058 void getTriangle(size_t idx, TTriangle &t) const { ASSERT_(idx<m_triangles.size()); t=m_triangles[idx]; }
00059 void insertTriangle( const TTriangle &t ) { m_triangles.push_back(t); }
00060 template<class InputIterator>
00061 void insertTriangles(const InputIterator &begin,const InputIterator &end) {
00062 m_triangles.insert(m_triangles.end(),begin,end);
00063 }
00064 void insertTriangles(const CSetOfTrianglesPtr &p) {
00065 m_triangles.insert(m_triangles.end(),p->m_triangles.begin(),p->m_triangles.end());
00066 }
00067
00068 void enableTransparency( bool v ) { m_enableTransparency = v; }
00069 virtual void setColor(double R,double G,double B,double A);
00070 virtual void setColor(const mrpt::utils::TColorf &c);
00071 virtual void setColorR(const double r);
00072 virtual void setColorG(const double g);
00073 virtual void setColorB(const double b);
00074 virtual void setColorA(const double a);
00075
00077 static CSetOfTrianglesPtr Create()
00078 {
00079 return CSetOfTrianglesPtr( new CSetOfTriangles() );
00080 }
00081
00084 void render() const;
00087 virtual bool traceRay(const mrpt::poses::CPose3D &o,float &dist) const;
00088
00089 static bool traceRayTriangle(const mrpt::poses::CPose3D &o,float &dist,const float xb[3],const float yb[3],const float zb[3]);
00090
00091 protected:
00092 std::vector<TTriangle> m_triangles;
00093 bool m_enableTransparency;
00094
00095 private:
00098 CSetOfTriangles( bool enableTransparency = false ) :
00099 m_triangles(),
00100 m_enableTransparency(enableTransparency)
00101 {
00102 }
00103
00105 virtual ~CSetOfTriangles() { }
00106
00107 };
00108
00109 }
00110
00111 }
00112
00113
00114 #endif