Go to the documentation of this file.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
00029
00030 #ifndef __VCG_SIMPLE_PIC
00031 #define __VCG_SIMPLE_PIC
00032 #include <vcg/math/matrix44.h>
00033
00034 namespace vcg {
00035 template <class PixType>
00036 class SimplePic
00037 {public:
00038 std::vector<PixType> img;
00039 int sx,sy;
00040 void Create(int tx,int ty)
00041 {
00042 sx=tx;sy=ty;
00043 img.resize(sx*sy);
00044 }
00045 PixType &Pix(int x, int y) {return img[sx*y+x];}
00046
00047 void OpenGLSnap(GLenum format=0)
00048 {
00049 int vp[4];
00050 glGetIntegerv( GL_VIEWPORT,vp );
00051 glPixelStorei( GL_PACK_ROW_LENGTH, 0);
00052 glPixelStorei( GL_PACK_ALIGNMENT, 1);
00053 int tx = vp[2];
00054 int ty = vp[3];
00055
00056 Create(tx,ty);
00057
00058 GLenum mtype = 0;
00059
00060 if(format==0) {
00061 format = GL_RGBA;
00062 mtype = GL_UNSIGNED_BYTE;
00063 }
00064 if(format==GL_DEPTH_COMPONENT) {
00065 format = GL_DEPTH_COMPONENT;
00066 mtype = GL_FLOAT;
00067 }
00068 glReadPixels(vp[0],vp[1],vp[2],vp[3],format,mtype,(GLvoid *)&img[0]);
00069 }
00070 bool SavePPM( const char * filename )
00071 {
00072 FILE * fp = fopen(filename,"wb");
00073 if(fp==0) return false;
00074
00075
00076 fprintf(fp,"P6\n%d %d\n255\n",sx,sy);
00077
00078 for(int i=0;i<sx*sy;++i)
00079 {
00080 fwrite(&(img[i]),3,1,fp);
00081 }
00082
00083 fclose(fp);
00084 return true;
00085 }
00086
00087 };
00088
00089 }
00090 #endif // __VCG_MESH_VISIBILITY