void SimpleDraw::DrawSquares( const StdVector<StdVector<Vec3d > >& squares, bool isOpaque, float r, float g, float b, float a ) { glDisable(GL_LIGHTING); if(isOpaque) { // Draw the filled square glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset( 0.5, 0.5 ); glColor4f(r * 0.75f, g * 0.75f, b * 0.75f, RANGED(0, a, 1.0f)); if(a < 1.0f){ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } glBegin(GL_QUADS); for(int i = 0; i < (int)squares.size(); i++) { glVertex3dv(squares[i][0]); glVertex3dv(squares[i][1]); glVertex3dv(squares[i][2]); glVertex3dv(squares[i][3]); } glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); } // Draw the edges glLineWidth(1.0f); glColor3f(r, g, b); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_QUADS); for(int i = 0; i < (int)squares.size(); i++) { glVertex3dv(squares[i][0]); glVertex3dv(squares[i][1]); glVertex3dv(squares[i][2]); glVertex3dv(squares[i][3]); } glEnd(); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_LIGHTING); }
void SimpleDraw::DrawSquare(const Vec3d & v1, const Vec3d & v2, const Vec3d & v3, const Vec3d & v4, bool isOpaque, float lineWidth, float r, float g, float b, float a) { glEnable(GL_LIGHTING); if(isOpaque) { // Draw the filled square glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset( 0.5f, 0.5f ); glColor4f(r, g, b, RANGED(0, a, 1.0f)); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBegin(GL_QUADS); Vec3d v21 = v2 - v1; Vec3d v31 = v3 - v1; glNormal3dv(cross(v21 , v31).normalized()); glVertex3dv(v1); glVertex3dv(v2); glVertex3dv(v3); glVertex3dv(v4); glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); } glDisable(GL_LIGHTING); // Draw the edges glLineWidth(lineWidth); glColor4f(r, g, b, a); glBegin(GL_LINE_STRIP); glVertex3dv(v1); glVertex3dv(v2); glVertex3dv(v3); glVertex3dv(v4); glVertex3dv(v1); glEnd(); glEnable(GL_LIGHTING); }
void SimpleDraw::DrawSquare(const Vec& v1, const Vec& v2, const Vec& v3, const Vec& v4, bool isOpaque, float r, float g, float b, float a) { glDisable(GL_LIGHTING); if(isOpaque) { // Draw the filled square glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset( 0.5, 0.5 ); glColor4f(r * 0.75f, g * 0.75f, b * 0.75f, RANGED(0, a, 1.0f)); if(a < 1.0f){ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } glBegin(GL_QUADS); glVertex3fv(v1); glVertex3fv(v2); glVertex3fv(v3); glVertex3fv(v4); glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); } // Draw the edges glLineWidth(1.0f); glColor3f(r, g, b); glBegin(GL_LINE_STRIP); glVertex3fv(v1); glVertex3fv(v2); glVertex3fv(v3); glVertex3fv(v4); glVertex3fv(v1); glEnd(); glEnable(GL_LIGHTING); }
void SimpleDraw::DrawTriangle(const Vec3d & v1, const Vec3d & v2, const Vec3d & v3, float r, float g, float b, float a, bool isOpaque) { glDisable(GL_LIGHTING); if(a < 1.0f) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } // Draw the filled triangle if(isOpaque) { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset( 0.5, 0.5 ); glColor4f(r * 0.75f, g * 0.75f, b * 0.75f, RANGED(0,a,1.0f)); if(a < 1.0f){ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } glBegin(GL_TRIANGLES); glVertex3dv(v1); glVertex3dv(v2); glVertex3dv(v3); glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); } // Draw the edges glLineWidth(1.0f); glColor3f(r * 0.5f, g * 0.5f, b * 0.5f); glBegin(GL_LINE_STRIP); glVertex3dv(v1); glVertex3dv(v2); glVertex3dv(v3); glVertex3dv(v1); glEnd(); // Draw the points int pointSize = 4; glEnable(GL_POINT_SMOOTH); // Colored dot glColor3f(r,g,b); glPointSize(pointSize); glBegin(GL_POINTS); glVertex3dv(v1); glVertex3dv(v2); glVertex3dv(v3); glEnd(); // White Border glPointSize(pointSize + 2); glColor3f(1, 1, 1); glBegin(GL_POINTS); glVertex3dv(v1); glVertex3dv(v2); glVertex3dv(v3); glEnd(); glDisable (GL_BLEND); glEnable(GL_LIGHTING); }
void SimpleDraw::DrawTriangles( const StdVector< StdVector<Vec3d> > & tris, float r, float g, float b, float a, bool isOpaque, bool isDrawVec3ds) { glDisable(GL_LIGHTING); if(a < 1.0f) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } // Draw the filled triangle if(isOpaque) { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset( 0.5, 0.5 ); glColor4f(r * 0.75f, g * 0.75f, b * 0.75f, RANGED(0,a,1.0f)); if(a < 1.0f){ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } glBegin(GL_TRIANGLES); for(int i = 0; i < (int)tris.size(); i++) { glVertex3dv(tris[i][0]); glVertex3dv(tris[i][1]); glVertex3dv(tris[i][2]); } glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); } // Draw the edges glLineWidth(1.0f); if(isOpaque) glColor3f(r * 0.5f, g * 0.5f, b * 0.5f); else glColor3f(r, g, b); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_TRIANGLES); for(int i = 0; i < (int)tris.size(); i++) { glVertex3dv(tris[i][0]); glVertex3dv(tris[i][1]); glVertex3dv(tris[i][2]); } glEnd(); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); if(isDrawVec3ds) { // Draw the points int pointSize = 4; glEnable(GL_POINT_SMOOTH); // Colored dot glColor3f(r,g,b); glPointSize(pointSize); glBegin(GL_POINTS); for(int i = 0; i < (int)tris.size(); i++) { glVertex3dv(tris[i][0]); glVertex3dv(tris[i][1]); glVertex3dv(tris[i][2]); } glEnd(); // White Border glPointSize(pointSize + 2); glColor3f(1, 1, 1); glBegin(GL_POINTS); for(int i = 0; i < (int)tris.size(); i++) { glVertex3dv(tris[i][0]); glVertex3dv(tris[i][1]); glVertex3dv(tris[i][2]); } glEnd(); } glDisable (GL_BLEND); glEnable(GL_LIGHTING); }