diff --git a/render/GlutRender.cpp b/render/GlutRender.cpp index b9632ab..6f016dd 100644 --- a/render/GlutRender.cpp +++ b/render/GlutRender.cpp @@ -15,15 +15,20 @@ void GlutRender::init(int* argc, char** argv, int wid, int hei, const char* win_name) { glutInit(argc, argv); - glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); + glutInitDisplayMode(GLUT_DOUBLE); glutInitWindowSize(wid, hei); glutCreateWindow(win_name); - glClearColor(0.0, 0.0, 0.0, 0.0); - glShadeModel(GL_FLAT); - glutDisplayFunc(display_handle); glutReshapeFunc(reshape_handle); + + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Background color + glClearDepth(1.0f); // Set background depth to farthest + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LEQUAL); + glShadeModel(GL_SMOOTH); // Enable smooth shading + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + } void GlutRender::cleanup() { @@ -38,29 +43,46 @@ void GlutRender::remove_mesh(const Mesh* mesh) { } void GlutRender::run() { + glutMainLoop(); } void GlutRender::reshape(int wid, int hei) { - glViewport(0, 0, (GLsizei) wid, (GLsizei) hei); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0.0, (GLdouble) wid, 0.0, (GLdouble) hei); + if (hei == 0) + hei = 1; + GLfloat aspect = (GLfloat)wid / (GLfloat)hei; + + glViewport(0, 0, wid, hei); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + // Enable perspective projection with fovy, aspect, zNear and zFar + gluPerspective(45.0f, aspect, 0.1f, 100.0f); } void GlutRender::display() { + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glMatrixMode(GL_MODELVIEW); + for(const Mesh* mesh: meshes) { + glLoadIdentity(); + glTranslatef(.0f, .0f, -6.0f); + const std::vector& points = mesh->get_vertices(); + + glBegin(GL_TRIANGLES); for(const Face& face: mesh->get_faces()) { const Point& p0 = face.pt(0, points), - p1 = face.pt(2, points), + p1 = face.pt(1, points), p2 = face.pt(2, points); - glBegin(GL_TRIANGLES); - glVertex3d(p0[0], p0[1], p0[2]); - glVertex3d(p1[0], p1[1], p1[2]); - glVertex3d(p2[0], p2[1], p2[2]); - glEnd(); + glColor3f(1.0f, 1.0f, 0.0f); + glVertex3f(p0[0], p0[1], p0[2]); + glVertex3f(p1[0], p1[1], p1[2]); + glVertex3f(p2[0], p2[1], p2[2]); } + glEnd(); } + + glutSwapBuffers(); } void GlutRender::reshape_handle(int wid, int hei) {