www.pudn.com > View3D.zip > Viewer.cpp
#include "Viewer.h" #include#include #include using namespace std; const int V_Width = 800; const int V_Height = 600; static float V_CameraX = 0.0; static float V_CameraY = 0.0; static float V_CameraZ = 5.0; static int V_MOldx = 0; static int V_MOldy = 0; static short V_MeshModeL = SHOW_NORMAL; static float V_RotateX = 0.0; static float V_RotateY = 0.0; static float V_RotateZ = 0.0; static float V_Scale = 1.0; HE_Mesh V_Mesh; void Init(char * loadname) { glColor3f(0.0,0.0,0.0); glClearColor(0.0,0.0,0.0,0.0); V_Mesh.LoadWaveFrontObj(loadname); V_Mesh.GetReverseEdge(); V_Mesh.CalcAllEdgeLength(); V_Mesh.Gauss_CurvatureAll(); V_Mesh.MoveToCenter(); //V_Mesh.PM_CollapseEdge(V_Mesh.edges.begin); //cout< gauss_cur< abs(dy)){ if(dx > 0) V_RotateX ++; else V_RotateX --; }else{ if(dy > 0) V_RotateY ++; else V_RotateY --; } glutPostRedisplay(); } void drawMesh_GaussCurDis(HE_Mesh dmesh) { int i; float col; HE_Face * fpos = dmesh.faces.begin; for(fpos = dmesh.faces.begin;fpos;fpos=fpos->next){ vector sv = dmesh.FSurroundVertices(fpos); glColor3f(0.69,0.81,0.57); glBegin(GL_POLYGON); for(i=0;i gauss_cur>0.005 && sv[i]->gauss_cur<1.5){ col = 0.3*(float)log(1+(double)sv[i]->gauss_cur*(48.0)); glColor3f(0.0+col,0.0,1.0-col); }else if(sv[i]->gauss_cur<-0.005 && sv[i]->gauss_cur>-1.5){ col = 0.3*(float)log(1+(double)sv[i]->gauss_cur*(-48.0)); glColor3f(0.0,col,1.0-col); }else if(sv[i]->gauss_cur<=-1.5){ glColor3f(0.0,1.0,0.0); }else if(sv[i]->gauss_cur>=1.5){ glColor3f(1.0,0.0,0.0); }else{ glColor3f(0.0,0.0,1.0); } glVertex3f((float)(sv[i]->co[0]),(float)(sv[i]->co[1]),(float)(sv[i]->co[2])); } glEnd(); } } void drawMesh(HE_Mesh dmesh) { int i; HE_Face* fpos = dmesh.faces.begin; for(fpos = dmesh.faces.begin;fpos;fpos=fpos->next){ vector sv = dmesh.FSurroundVertices(fpos); glEnable(GL_LIGHTING); //glColor3f(0.69,0.81,0.57); glBegin(GL_POLYGON); for(i=0;i co[0]),(float)(sv[i]->co[1]),(float)(sv[i]->co[2])); glNormal3f(fpos->no[0],fpos->no[1],fpos->no[2]); } glEnd(); glDisable(GL_LIGHTING); glColor3f(0.5,0.5,0.5); glBegin(GL_LINE_LOOP); float s = -0.001; for(i=0;i flag == BAD_VERTEX){ glColor3f(0.7,0.4,0.3); }*/ glVertex3f(sv[i]->co[0]+s*sv[i]->no[0],sv[i]->co[1]+s*sv[i]->no[1],sv[i]->co[2]+s*sv[i]->no[2]); } glEnd(); glColor3f(0.5,0.5,0.5); glBegin(GL_LINE_LOOP); s = 0.001; for(i=0;i flag == BAD_VERTEX){ glColor3f(1.0,0.0,0.0); }else{ glColor3f(0.4,0.4,0.3); }*/ glVertex3f(sv[i]->co[0]+s*sv[i]->no[0],sv[i]->co[1]+s*sv[i]->no[1],sv[i]->co[2]+s*sv[i]->no[2]); } glEnd(); } } void drawLight(float * pos) { glDisable(GL_LIGHTING); glPointSize(4.0); glColor3f(1.0,0.0,0.0); glBegin(GL_POINTS); glVertex3f(pos[0],pos[1],pos[2]); glEnd(); glEnable(GL_LIGHTING); } int main(int argc, char** argv) { if(argc==1){ cout<<"USEAGE -- Viewer3D objname"<