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;igauss_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;ico[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;iflag == 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;iflag == 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"<