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 protected:
00051 bool m_init;
00052 bool m_enableTransparency;
00053
00054 unsigned int m_glTextureName;
00055 mrpt::utils::CMRPTImage m_textureImage,
00056 m_textureImageAlpha;
00057
00058 int r_width,
00059 r_height;
00060
00064 void loadTextureInOpenGL();
00065
00066 public:
00069 struct MRPTDLLIMPEXP TVertex
00070 {
00073 TVertex( ) :
00074 m_x(0.0), m_y(0.0), m_z(0.0), m_tx(0), m_ty(0) { }
00077 TVertex(float x, float y, float z, unsigned int tx, unsigned int ty) :
00078 m_x(x), m_y(y), m_z(z), m_tx(tx), m_ty(ty) { }
00081 float m_x, m_y, m_z;
00084 unsigned int m_tx, m_ty;
00085 };
00086
00089 struct MRPTDLLIMPEXP TTriangle
00090 {
00093 TTriangle( ) :
00094 m_v1(), m_v2(), m_v3() { }
00097 TTriangle(TVertex v1, TVertex v2, TVertex v3) :
00098 m_v1(v1), m_v2(v2), m_v3(v3) { }
00101 TVertex m_v1, m_v2, m_v3;
00102 };
00103
00106 std::vector<TTriangle> m_triangles;
00107
00109 static CSetOfTexturedTrianglesPtr Create()
00110 {
00111 return CSetOfTexturedTrianglesPtr( new CSetOfTexturedTriangles() );
00112 }
00113
00116 void render();
00117
00120 void assignImage(
00121 const mrpt::utils::CMRPTImage& img,
00122 const mrpt::utils::CMRPTImage& imgAlpha );
00123
00126 void assignImage(
00127 const mrpt::utils::CMRPTImage& img );
00128
00131 void assignImage_fast(
00132 mrpt::utils::CMRPTImage& img,
00133 mrpt::utils::CMRPTImage& imgAlpha );
00134
00137 void assignImage_fast(
00138 mrpt::utils::CMRPTImage& img );
00139
00140 private:
00143 CSetOfTexturedTriangles( ) :
00144 m_init(false),
00145 m_enableTransparency(false),
00146 m_glTextureName(0),
00147 m_triangles()
00148 {
00149 }
00150
00152 virtual ~CSetOfTexturedTriangles();
00153 };
00154
00155 }
00156
00157 }
00158
00159 #endif