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/CImage.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
00044
00045
00046
00047 class MRPTDLLIMPEXP CSetOfTexturedTriangles : public CRenderizable
00048 {
00049 DEFINE_SERIALIZABLE( CSetOfTexturedTriangles )
00050
00051 public:
00052
00053
00054 struct MRPTDLLIMPEXP TVertex
00055 {
00056
00057
00058 TVertex( ) :
00059 m_x(0.0), m_y(0.0), m_z(0.0), m_tx(0), m_ty(0) { }
00060
00061
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) { }
00064
00065
00066 float m_x, m_y, m_z;
00067
00068
00069 unsigned int m_tx, m_ty;
00070 };
00071
00072
00073
00074 struct MRPTDLLIMPEXP TTriangle
00075 {
00076
00077
00078 TTriangle( ) :
00079 m_v1(), m_v2(), m_v3() { }
00080
00081
00082 TTriangle(TVertex v1, TVertex v2, TVertex v3) :
00083 m_v1(v1), m_v2(v2), m_v3(v3) { }
00084
00085
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::CImage m_textureImage,
00094 m_textureImageAlpha;
00095 mutable int r_width,
00096 r_height;
00097
00098
00099
00100
00101 void loadTextureInOpenGL() const;
00102
00103
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
00113
00114
00115 void render() const;
00116
00117
00118
00119 virtual bool traceRay(const mrpt::poses::CPose3D &o,double &dist) const;
00120
00121
00122
00123 void assignImage(
00124 const mrpt::utils::CImage& img,
00125 const mrpt::utils::CImage& imgAlpha );
00126
00127
00128
00129 void assignImage(
00130 const mrpt::utils::CImage& img );
00131
00132
00133
00134 void assignImage_fast(
00135 mrpt::utils::CImage& img,
00136 mrpt::utils::CImage& imgAlpha );
00137
00138
00139
00140 void assignImage_fast(
00141 mrpt::utils::CImage& img );
00142
00143 private:
00144
00145
00146 CSetOfTexturedTriangles( ) :
00147 m_init(false),
00148 m_enableTransparency(false),
00149 m_glTextureName(0),
00150 m_triangles()
00151 {
00152 }
00153
00154
00155 virtual ~CSetOfTexturedTriangles();
00156 };
00157
00158 }
00159
00160 }
00161
00162 #endif