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_CSetOfTexturedTriangles_H
00029 #define opengl_CSetOfTexturedTriangles_H
00030
00031 #include <mrpt/opengl/CRenderizable.h>
00032 #include <mrpt/utils/CMRPTImage.h>
00033
00034 namespace mrpt
00035 {
00036 namespace opengl
00037 {
00038 class MRPTDLLIMPEXP CSetOfTexturedTriangles;
00039
00040
00041 DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE( CSetOfTexturedTriangles, CRenderizable )
00042
00043
00047 class MRPTDLLIMPEXP CSetOfTexturedTriangles : public CRenderizable
00048 {
00049 DEFINE_SERIALIZABLE( CSetOfTexturedTriangles )
00050
00051 public:
00054 struct MRPTDLLIMPEXP TVertex
00055 {
00058 TVertex( ) :
00059 m_x(0.0), m_y(0.0), m_z(0.0), m_tx(0), m_ty(0) { }
00062 TVertex(float x, float y, float z, unsigned int tx, unsigned int ty) :
00063 m_x(x), m_y(y), m_z(z), m_tx(tx), m_ty(ty) { }
00066 float m_x, m_y, m_z;
00069 unsigned int m_tx, m_ty;
00070 };
00071
00074 struct MRPTDLLIMPEXP TTriangle
00075 {
00078 TTriangle( ) :
00079 m_v1(), m_v2(), m_v3() { }
00082 TTriangle(TVertex v1, TVertex v2, TVertex v3) :
00083 m_v1(v1), m_v2(v2), m_v3(v3) { }
00086 TVertex m_v1, m_v2, m_v3;
00087 };
00088
00089 protected:
00090 mutable bool m_init;
00091 mutable bool m_enableTransparency;
00092 mutable unsigned int m_glTextureName;
00093 mutable mrpt::utils::CMRPTImage m_textureImage,
00094 m_textureImageAlpha;
00095 mutable int r_width,
00096 r_height;
00097
00101 void loadTextureInOpenGL() const;
00102
00104 std::vector<TTriangle> m_triangles;
00105
00106 public:
00107 void clearTriangles() { m_triangles.clear(); }
00108 size_t getTrianglesCount() const { return m_triangles.size(); }
00109 void getTriangle(size_t idx, TTriangle &t) const { ASSERT_(idx<m_triangles.size()); t=m_triangles[idx]; }
00110 void insertTriangle( const TTriangle &t ) { m_triangles.push_back(t); }
00111
00112
00114 static CSetOfTexturedTrianglesPtr Create()
00115 {
00116 return CSetOfTexturedTrianglesPtr( new CSetOfTexturedTriangles() );
00117 }
00118
00121 void render() const;
00122
00125 virtual bool traceRay(const mrpt::poses::CPose3D &o,float &dist) const;
00126
00129 void assignImage(
00130 const mrpt::utils::CMRPTImage& img,
00131 const mrpt::utils::CMRPTImage& imgAlpha );
00132
00135 void assignImage(
00136 const mrpt::utils::CMRPTImage& img );
00137
00140 void assignImage_fast(
00141 mrpt::utils::CMRPTImage& img,
00142 mrpt::utils::CMRPTImage& imgAlpha );
00143
00146 void assignImage_fast(
00147 mrpt::utils::CMRPTImage& img );
00148
00149 private:
00152 CSetOfTexturedTriangles( ) :
00153 m_init(false),
00154 m_enableTransparency(false),
00155 m_glTextureName(0),
00156 m_triangles()
00157 {
00158 }
00159
00161 virtual ~CSetOfTexturedTriangles();
00162 };
00163
00164 }
00165
00166 }
00167
00168 #endif