static void CALLBACK Paint(void) { glViewport(0,0,windW,windH); glDisable(GL_SCISSOR_TEST); glPushAttrib(GL_COLOR_BUFFER_BIT); glColorMask(1,1,1,1); glIndexMask((GLuint)~0); glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glPopAttrib(); if(mode1)glShadeModel(GL_SMOOTH); else glShadeModel(GL_FLAT); if(mode2)glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); else glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); Viewport(0,0); Point(); Viewport(0,1); Lines(); Viewport(0,2); LineStrip(); Viewport(0,3); LineLoop(); Viewport(1,0); Bitmap(); Viewport(1,1); TriangleFan(); Viewport(1,2); Triangles(); Viewport(1,3); TriangleStrip(); Viewport(2,0); Rect(); Viewport(2,1); xPolygon(); Viewport(2,2); Quads(); Viewport(2,3); QuadStrip(); glFlush(); if(doubleBuffer)auxSwapBuffers(); }
static void Draw(EGLDisplay dpy, EGLSurface surf) { glViewport(0, 0, windW, windH); glDisable(GL_SCISSOR_TEST); glPushAttrib(GL_COLOR_BUFFER_BIT); glColorMask(1, 1, 1, 1); glIndexMask(~0); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glPopAttrib(); if (mode1) { glShadeModel(GL_SMOOTH); } else { glShadeModel(GL_FLAT); } if (mode2) { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } else { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } Viewport(0, 0); Point(); Viewport(0, 1); Lines(); Viewport(0, 2); LineStrip(); Viewport(0, 3); LineLoop(); Viewport(1, 0); Bitmap(); Viewport(1, 1); TriangleFan(); Viewport(1, 2); Triangles(); Viewport(1, 3); TriangleStrip(); Viewport(2, 0); Rect(); Viewport(2, 1); PolygonFunc(); Viewport(2, 2); Quads(); Viewport(2, 3); QuadStrip(); glFlush(); if (doubleBuffer) { eglSwapBuffers(dpy, surf); } }
/* metodo di avvio del parser; apre il file specificato e riga per riga aggiunge nelle strutture dati i corrispondenti elementi */ void Parser::start_parser(vector<Vertex> *v, Container<Triangles> *tr, Container<Quads> *qs, Container<Normal> *vn){ bool boot_f = true, boot_vn = true; float f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12; if(!fp){ cout << "ERROR : file not found or wrong declaration"<<endl; exit(0); } while (!feof(fp)) { memset(str, 0, 256); fgets(str, 256, fp); if( strncmp("vn ",str,3) == 0 ) { if(boot_vn){ vn->initiateData(); boot_vn=false; } sscanf((str+2),"%f %f %f",&f1,&f2,&f3); Normal n = Normal(f1,f2,f3); vn->addData(n); } else if(strncmp("v ",str,2) == 0 ) { sscanf((str+1),"%f %f %f",&f1,&f2,&f3); Vertex tmp = Vertex(f1,f2,f3); v->push_back(tmp); } else if(strncmp("f ",str,2) == 0 ) { if (boot_f) { //attivare struttura dati tr->initiateData(); qs->initiateData(); boot_f=false; } int match = sscanf((str+1),"%f %f %f %f",&f1,&f2,&f3,&f4); //triangolo o quadrato Triangles t; Quads q; if(match==3){ t = Triangles(f1,f2,f3); tr->addData(t); } if(match==4){ q = Quads(f1,f2,f3,f4); qs->addData(q); } int matchN = sscanf((str+1),"%f//%f %f//%f %f//%f %f//%f",&f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8); // triangolo/quadrato + normale if(matchN==6){ t = Triangles(f1,f3,f5,f2,f4,f6); tr->addData(t); } if(matchN==8){ q = Quads(f1,f3,f5,f7,f2,f4,f6,f8); qs->addData(q); } int matchNT = sscanf((str+1),"%f/%f/%f %f/%f/%f %f/%f/%f %f/%f/%f",&f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8,&f9,&f10,&f11,&f12); // triangolo/quadrato + texture + normale if(matchNT==9){ t = Triangles(f1,f4,f7,f3,f6,f9); tr->addData(t); } if(matchNT==12){ q = Quads(f1,f4,f7,f10,f3,f6,f9,f12); qs->addData(q); } } } fclose(fp); };