Skip to content
Snippets Groups Projects
Commit 043530e9 authored by Vladimír Ulman's avatar Vladimír Ulman
Browse files

Added function draw wireframe, key 'e'.

Finished tweaking of OpenGL vizual mode (depth buffer on, backfaces culling)
parent 047094cc
No related branches found
No related tags found
No related merge requests found
...@@ -105,6 +105,7 @@ class ActiveMesh ...@@ -105,6 +105,7 @@ class ActiveMesh
//the following functions are all defined in graphics.cpp //the following functions are all defined in graphics.cpp
void displayMesh(void); void displayMesh(void);
void displayMeshEdges(void);
void displayVertexAndNeigs(void); void displayVertexAndNeigs(void);
void displayQuadricSurface(void); void displayQuadricSurface(void);
void displayTEST(void); void displayTEST(void);
......
...@@ -51,6 +51,7 @@ bool showFrame=false; ...@@ -51,6 +51,7 @@ bool showFrame=false;
bool showBox=true; bool showBox=true;
bool showWholeMesh=true; bool showWholeMesh=true;
bool showWholeMeshEdges=false;
bool showVertexSurface=false; bool showVertexSurface=false;
bool showQuadricSurface=false; bool showQuadricSurface=false;
bool showTEST=false; bool showTEST=false;
...@@ -150,7 +151,6 @@ void displayAxes(void) ...@@ -150,7 +151,6 @@ void displayAxes(void)
glVertex3f(params.sceneCentre.x,params.sceneCentre.y,params.sceneCentre.z); glVertex3f(params.sceneCentre.x,params.sceneCentre.y,params.sceneCentre.z);
glVertex3f(params.sceneCentre.x,params.sceneCentre.y,params.sceneCentre.z+params.sceneSize.z/4.f); glVertex3f(params.sceneCentre.x,params.sceneCentre.y,params.sceneCentre.z+params.sceneSize.z/4.f);
glEnd(); glEnd();
glLineWidth(1);
} }
...@@ -338,12 +338,31 @@ void ActiveMesh::displayQuadricSurface(void) ...@@ -338,12 +338,31 @@ void ActiveMesh::displayQuadricSurface(void)
void ActiveMesh::displayMesh(void) void ActiveMesh::displayMesh(void)
{ {
glColor3f(0.6f,0.6f,0.6f); const float gray=0.6f;
glColor4f(gray,gray,gray,1.0f);
glLineWidth(1);
long unsigned int* id=ID.data();
for (unsigned int i=0; i < ID.size(); i+=3)
{
glBegin(GL_TRIANGLES);
glNormal3f(norm[i/3].x,norm[i/3].y,norm[i/3].z);
glVertex3f(Pos[*id].x,Pos[*id].y,Pos[*id].z); ++id;
glVertex3f(Pos[*id].x,Pos[*id].y,Pos[*id].z); ++id;
glVertex3f(Pos[*id].x,Pos[*id].y,Pos[*id].z); ++id;
glEnd();
}
}
void ActiveMesh::displayMeshEdges(void)
{
const float gray=0.8f;
glColor4f(gray,gray,gray,1.0f);
glLineWidth(3);
long unsigned int* id=ID.data(); long unsigned int* id=ID.data();
for (unsigned int i=0; i < ID.size(); i+=3) for (unsigned int i=0; i < ID.size(); i+=3)
{ {
//glBegin(GL_TRIANGLES);
glBegin(GL_LINE_LOOP); glBegin(GL_LINE_LOOP);
glNormal3f(norm[i/3].x,norm[i/3].y,norm[i/3].z); glNormal3f(norm[i/3].x,norm[i/3].y,norm[i/3].z);
glVertex3f(Pos[*id].x,Pos[*id].y,Pos[*id].z); ++id; glVertex3f(Pos[*id].x,Pos[*id].y,Pos[*id].z); ++id;
...@@ -356,7 +375,7 @@ void ActiveMesh::displayMesh(void) ...@@ -356,7 +375,7 @@ void ActiveMesh::displayMesh(void)
void display(void) void display(void)
{ {
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); glLoadIdentity();
glTranslatef(params.sceneCentre.x,params.sceneCentre.y,params.sceneCentre.z); glTranslatef(params.sceneCentre.x,params.sceneCentre.y,params.sceneCentre.z);
glScalef(zoom,zoom,zoom); glScalef(zoom,zoom,zoom);
...@@ -372,14 +391,16 @@ void display(void) ...@@ -372,14 +391,16 @@ void display(void)
glEnable(GL_FOG); glEnable(GL_FOG);
if (showBox) displayBox(); if (showBox) displayBox();
if (showFrame) displayFrame(); if (showFrame) displayFrame();
if (showAxes) displayAxes();
glDisable(GL_FOG); glDisable(GL_FOG);
if (showWholeMesh) mesh.displayMesh(); if (showWholeMesh) mesh.displayMesh();
if (showWholeMeshEdges) mesh.displayMeshEdges();
if (showVertexSurface) mesh.displayVertexAndNeigs(); if (showVertexSurface) mesh.displayVertexAndNeigs();
if (showQuadricSurface) mesh.displayQuadricSurface(); if (showQuadricSurface) mesh.displayQuadricSurface();
if (showTEST) mesh.displayTEST(); if (showTEST) mesh.displayTEST();
if (showAxes) displayAxes();
glFlush(); glFlush();
glutSwapBuffers(); glutSwapBuffers();
} }
...@@ -435,6 +456,7 @@ void printKeysHelp(void) ...@@ -435,6 +456,7 @@ void printKeysHelp(void)
std::cout << "'h': displays this help\n"; std::cout << "'h': displays this help\n";
std::cout << "'d': displays enabled features,displays status\n"; std::cout << "'d': displays enabled features,displays status\n";
std::cout << "'m': toggle display of the mesh\n"; std::cout << "'m': toggle display of the mesh\n";
std::cout << "'e': toggle display of the mesh wireframe (triangle edges)'\n";
std::cout << "'v': toggle display of the vertex supporting region\n"; std::cout << "'v': toggle display of the vertex supporting region\n";
std::cout << "'V': chooses another vertex\n"; std::cout << "'V': chooses another vertex\n";
std::cout << "'s': toggle display of the fitted quadratic surface \n"; std::cout << "'s': toggle display of the fitted quadratic surface \n";
...@@ -532,6 +554,10 @@ void keyboard(unsigned char key, int mx, int my) ...@@ -532,6 +554,10 @@ void keyboard(unsigned char key, int mx, int my)
showWholeMesh^=true; showWholeMesh^=true;
glutPostRedisplay(); glutPostRedisplay();
break; break;
case 'e':
showWholeMeshEdges^=true;
glutPostRedisplay();
break;
case 'v': case 'v':
showVertexSurface^=true; showVertexSurface^=true;
glutPostRedisplay(); glutPostRedisplay();
...@@ -565,11 +591,24 @@ void keyboard(unsigned char key, int mx, int my) ...@@ -565,11 +591,24 @@ void keyboard(unsigned char key, int mx, int my)
//some testing controls //some testing controls
case 'x': case 'x':
//glEnable(GL_FOG); glPolygonMode(GL_FRONT,GL_LINE);
glutPostRedisplay(); glutPostRedisplay();
break; break;
case 'X': case 'X':
//glDisable(GL_FOG); glPolygonMode(GL_FRONT,GL_FILL);
glutPostRedisplay();
/*
GLfloat ranges[10];
glGetFloatv(GL_DEPTH_RANGE,ranges);
std::cout << "near=" << ranges[0] << ", far=" << ranges[1] << "\n";
*/
break;
case 'c':
glDisable(GL_DEPTH_TEST);
glutPostRedisplay();
break;
case 'C':
glEnable(GL_DEPTH_TEST);
glutPostRedisplay(); glutPostRedisplay();
break; break;
...@@ -694,8 +733,7 @@ void initializeGL(void) ...@@ -694,8 +733,7 @@ void initializeGL(void)
glutInit(&Argc, Argv); glutInit(&Argc, Argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
//glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800, 800); glutInitWindowSize(800, 800);
glutInitWindowPosition(600, 100); glutInitWindowPosition(600, 100);
glutCreateWindow(Argv[0]); glutCreateWindow(Argv[0]);
...@@ -714,9 +752,21 @@ void initializeGL(void) ...@@ -714,9 +752,21 @@ void initializeGL(void)
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//filter rendered points (should look nicer)
glEnable(GL_POINT_SMOOTH); glEnable(GL_POINT_SMOOTH);
//glEnable(GL_CULL_FACE);
//glEnable(GL_DEPTH_TEST); //default displaying mode for triangles
//frontfaces are just lines, backfaces are opaque
glPolygonMode(GL_FRONT,GL_LINE);
glPolygonMode(GL_BACK, GL_FILL);
//but, well, do not draw backfaces at all
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
//enable z-buffer;
//otherwise it would depend on the order of primitives drawing
glEnable(GL_DEPTH_TEST);
//set up the fog (is enabled/disabled before/after drawing frames): //set up the fog (is enabled/disabled before/after drawing frames):
GLfloat fogColor[4]={0.4f*params.sceneBorderColour.r, GLfloat fogColor[4]={0.4f*params.sceneBorderColour.r,
...@@ -731,6 +781,8 @@ void initializeGL(void) ...@@ -731,6 +781,8 @@ void initializeGL(void)
// //
glFogf(GL_FOG_START,params.sceneOffset.z); glFogf(GL_FOG_START,params.sceneOffset.z);
glFogf(GL_FOG_END,params.sceneOffset.z+params.sceneSize.z); glFogf(GL_FOG_END,params.sceneOffset.z+params.sceneSize.z);
//some OpenGL info, for fun...
std::cout << "Vendor : " << glGetString(GL_VENDOR) << "\n"; std::cout << "Vendor : " << glGetString(GL_VENDOR) << "\n";
std::cout << "Renderer: " << glGetString(GL_RENDERER) << "\n"; std::cout << "Renderer: " << glGetString(GL_RENDERER) << "\n";
std::cout << "Version : " << glGetString(GL_VERSION) << "\n"; std::cout << "Version : " << glGetString(GL_VERSION) << "\n";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment