示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
0
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);
}
示例#5
0
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);
}