inline static void renderGridCells(const Array& vertices)
		{
		/* Get vertex array size: */
		const Index& numVertices=vertices.getSize();
		
		Index index;
		
		/* Render grid lines along y direction: */
		for(index[0]=0;index[0]<numVertices[0];++index[0])
			{
			glBegin(GL_LINE_STRIP);
			for(index[1]=0;index[1]<numVertices[1];++index[1])
				glVertex(vertices(index).pos);
			glEnd();
			}
		
		/* Render grid lines along x direction: */
		for(index[1]=0;index[1]<numVertices[1];++index[1])
			{
			glBegin(GL_LINE_STRIP);
			for(index[0]=0;index[0]<numVertices[0];++index[0])
				glVertex(vertices(index).pos);
			glEnd();
			}
		}
void emitStrip(Vector v[6], float s1, float s2, float dt, int count, int depth)
{
	if(depth > 0){
		emitStrip(v, s1, (s1+s2)/2, dt/2, count*2-1, depth-1);
		emitStrip(v, (s1+s2)/2, s2, dt/2, count*2-1, depth-1);
	}else{
		glBegin(GL_TRIANGLE_STRIP);
			/*
			static Color colors[] = {
				Color(255,255,0),
				Color(0,255,255),
				Color(255,0,255),
				Color(255,255,255),
				Color(0,255,0)
			};
			static int i = 0;
			glColor(colors[(i++)%5]);
			*/
			for(int i=0; i<count; i++){
				Vector v1 = sampleStrip(v, s1, i*dt);
				Vector v2 = sampleStrip(v, s2, i*dt);
				v1 /= length(v1);
				v2 /= length(v2);
				glNormal(v1);
				glTexCoord3f(v1.x, v1.y, v1.z);
				glVertex(v1);
				glNormal(v2);
				glTexCoord3f(v2.x, v2.y, v2.z);
				glVertex(v2);
			}
		glEnd();
	}
}
static void
draw_grid(int xblocks, int zblocks, double xdim, double zdim)
{
   Vec3 v[2];
   int i;
    
   glPushAttrib(GL_LINE_BIT);
   glLineWidth(2);
   glBegin(GL_LINES);

   v[0] = Vec3(-xdim*0.5, 0, 0);
   v[1] = Vec3( xdim*0.5, 0, 0);
   for (i=0; i<=zblocks; i++){
      v[0][2] = v[1][2] = -zdim*0.5 + i*(zdim/zblocks);
      glVertex(v[0]);
      glVertex(v[1]);
   }
   v[0] = Vec3(0, 0,  zdim*0.5);
   v[1] = Vec3(0, 0, -zdim*0.5);
   for (i=0; i<=xblocks; i++){
      v[0][0] = v[1][0] = -xdim*0.5 + i*(xdim/xblocks);
      glVertex(v[0]);
      glVertex(v[1]);
   }

   glEnd();
   glPopAttrib();
}
Exemple #4
0
void Margin::draw(GLContextData& contextData) const
	{
	/* Draw the grandparent class widget: */
	Container::draw(contextData);
	
	if(child!=0)
		{
		/* Draw the margin around the child widget: */
		glBegin(GL_QUAD_STRIP);
		glColor(backgroundColor);
		glNormal3f(0.0f,0.0f,1.0f);
		glVertex(child->getExterior().getCorner(0));
		glVertex(getInterior().getCorner(0));
		glVertex(child->getExterior().getCorner(1));
		glVertex(getInterior().getCorner(1));
		glVertex(child->getExterior().getCorner(3));
		glVertex(getInterior().getCorner(3));
		glVertex(child->getExterior().getCorner(2));
		glVertex(getInterior().getCorner(2));
		glVertex(child->getExterior().getCorner(0));
		glVertex(getInterior().getCorner(0));
		glEnd();
		
		/* Draw the child widgets: */
		child->draw(contextData);
		}
	}
Exemple #5
0
void SketchingTool::display(GLContextData& contextData) const
	{
	/* Set up OpenGL state: */
	glPushAttrib(GL_ENABLE_BIT|GL_LINE_BIT);
	glDisable(GL_LIGHTING);
	
	/* Go to navigational coordinates: */
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glLoadIdentity();
	glMultMatrix(getDisplayState(contextData).modelviewNavigational);
	
	/* Render all curves: */
	for(std::vector<Curve*>::const_iterator cIt=curves.begin();cIt!=curves.end();++cIt)
		{
		const Curve* curve=*cIt;
		glLineWidth(curve->lineWidth);
		glColor(curve->color);
		glBegin(GL_LINE_STRIP);
		for(std::vector<Curve::ControlPoint>::const_iterator cpIt=curve->controlPoints.begin();cpIt!=curve->controlPoints.end();++cpIt)
			glVertex(cpIt->pos);
		if(active&&curve==currentCurve)
			glVertex(currentPoint);
		glEnd();
		}
	
	/* Go back to physical coordinates: */
	glPopMatrix();
	
	/* Reset OpenGL state: */
	glPopAttrib();
	}
void GrapheinClient::GrapheinTool::display(GLContextData& contextData) const
{
    if(client==0)
        return;

    if(active)
    {
        /* Retrieve the current curve: */
        CurveMap::Iterator cIt=client->localCurves.findEntry(currentCurveId);
        if(!cIt.isFinished())
        {
            /* Render the last segment of the current curve: */
            glPushAttrib(GL_ENABLE_BIT|GL_LINE_BIT);
            glDisable(GL_LIGHTING);
            glLineWidth(cIt->getDest()->lineWidth);

            glPushMatrix();
            glMultMatrix(Vrui::getNavigationTransformation());

            glColor(cIt->getDest()->color);
            glBegin(GL_LINES);
            glVertex(lastPoint);
            glVertex(currentPoint);
            glEnd();

            glPopMatrix();

            glPopAttrib();
        }
    }
}
///TODO: render the system (ie draw the particles)
void ClothSystem::draw()
{
	for (int i = 0; i < m_numParticles; i++) {
		Vector3f pos = m_vVecState[i*2];
		if (areParticlesVisible)
		{
			glPushMatrix();
			glTranslatef(pos[0], pos[1], pos[2] );
            drawDove();
			
			glPopMatrix();
		}

		if (areSpringsVisible)
		{
			std::vector<Spring> springs = springTies[i];
			for (int k = 0; k < springs.size(); ++k)
			{
				glBegin(GL_LINES);
				glVertex(pos);
				glVertex(m_vVecState[springs[k].particleInd2]);
				glEnd();
			}
		}
	}
}
Exemple #8
0
void drawMesh(carve::mesh::Mesh<3> *mesh, float r, float g, float b, float a) {
  glColor4f(r, g, b, a);

  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  glBegin(GL_TRIANGLES);

  std::vector<carve::mesh::Vertex<3> *> v;

  for (size_t i = 0, l = mesh->faces.size(); i != l; ++i) {
    carve::mesh::Face<3> *f = mesh->faces[i];
    if (f->nVertices() == 3) {
      glNormal3dv(f->plane.N.v);
      f->getVertices(v);
      glVertex(v[0]->v);
      glVertex(v[1]->v);
      glVertex(v[2]->v);
    }
  }
  glEnd();

  for (size_t i = 0, l = mesh->faces.size(); i != l; ++i) {
    carve::mesh::Face<3> *f = mesh->faces[i];
    if (f->nVertices() != 3) {
      drawFace(f, cRGBA(r, g, b, a));
    }
  }
}
void SixDofWithScaleNavigationToolFactory::initContext(GLContextData& contextData) const
	{
	/* Create a new data item: */
	DataItem* dataItem=new DataItem;
	contextData.addDataItem(this,dataItem);
	
	/* Create the tool model display list: */
	glNewList(dataItem->modelListId,GL_COMPILE);
	
	/* Set up OpenGL state: */
	glPushAttrib(GL_ENABLE_BIT|GL_POLYGON_BIT|GL_LINE_BIT);
	glDisable(GL_LIGHTING);
	glDisable(GL_CULL_FACE);
	glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
	glLineWidth(1.0f);
	glColor3f(1.0f,1.0f,1.0f);
	
	/* Render a sphere of radius scaleDeviceDistance around the scaling device's position: */
	glDrawSphereIcosahedron(scaleDeviceDistance,3);
	
	/* Render the scaling direction: */
	glLineWidth(3.0f);
	glColor3f(1.0f,0.0f,0.0f);
	glBegin(GL_LINES);
	Point pos=Point::origin;
	glVertex(pos);
	pos+=deviceScaleDirection*scaleDeviceDistance*Scalar(1.25);
	glVertex(pos);
	glEnd();
	
	/* Reset OpenGL state: */
	glPopAttrib();
	
	glEndList();
	}
void BiovisionDisplay::draw(const KinematicModel<BiovisionJoint> &model, const Vector3D &colour, bool drawAxis)
{
    for(int i = 0; i < model.njoints(); i++)
    {
        const BiovisionJoint &joint = model.joints(i);

        if(drawAxis)
        {
            glPushMatrix();
                glTranslate(joint.global_position());
                glRotate(joint.global_orientation());

                glBegin(GL_LINES);
                    glColor3f(1.0, 0.0, 0.0);
                    glVertex3f(0.0, 0.0, 0.0);
                    glVertex3f(20.0, 0., 0.0);

                    glColor3f(0.0, 1.0, 0.0);
                    glVertex3f(0.0, 0.0, 0.0);
                    glVertex3f(0.0, 20.0, 0.0);

                    glColor3f(0.0, 0.0, 1.0);
                    glVertex3f(0.0, 0.0, 0.0);
                    glVertex3f(0.0, 0.0, 20.0);
                glEnd();
            glPopMatrix();
        }

        if(joint.parent() >= 0)
        {
            glBegin(GL_LINES);
                glVertex(joint.global_position());
                glVertex(model.getParent(joint).global_position());
            glEnd();

            Vector3D global_direction = (joint.global_position()-model.getParent(joint).global_position()).direction();
            double length = joint.local_position().length();

            glColor(colour);
            glPushMatrix();
                glTranslate(joint.global_position());
                glTranslate(-global_direction*length*0.5);

                //align bone
                Vector3D zAxis = Vector3D(0.0, 0.0, 1.0);
                Vector3D newAxis = zAxis ^ global_direction;
                double newAngle = acos(zAxis *global_direction);
                glRotateRad(newAngle, newAxis);

                //draw bone
                GLUquadricObj *qobj = gluNewQuadric();
                gluQuadricDrawStyle(qobj, GLU_FILL);
                gluQuadricNormals(qobj, GLU_SMOOTH);
                glScalef(0.25, 0.25, 1.0);
                gluSphere(qobj, length*0.5, 20, 20);
                gluDeleteQuadric(qobj);
            glPopMatrix();
        }
    }
}
Exemple #11
0
void drawEdges(carve::mesh::Mesh<3> *mesh, double alpha, bool draw_edgeconn) {
  glColor4f(1.0, 0.0, 0.0, alpha);
  glBegin(GL_LINES);
  for (size_t i = 0, l = mesh->closed_edges.size(); i != l; ++i) {
    carve::mesh::Edge<3> *edge = mesh->closed_edges[i];
    glVertex(edge->v1()->v);
    glVertex(edge->v2()->v);
  }
  glEnd();

  std::unordered_map<std::pair<const carve::mesh::Vertex<3> *, const carve::mesh::Vertex<3> *>, int> colour;

  if (draw_edgeconn) {
    for (size_t i = 0, l = mesh->closed_edges.size(); i != l; ++i) {
      const carve::mesh::Edge<3> *edge = mesh->closed_edges[i];
      int c = colour[std::make_pair(std::min(edge->v1(), edge->v2()), std::max(edge->v1(), edge->v2()))]++;
      drawEdgeConn(edge, (c&1) ? 0.0 : 1.0, (c&2) ? 0.0 : 1.0, (c&4) ? 1.0 : 0.0, alpha);
    }
  }

  glColor4f(1.0, 1.0, 0.0, alpha);
  glBegin(GL_LINES);
  for (size_t i = 0, l = mesh->open_edges.size(); i != l; ++i) {
    carve::mesh::Edge<3> *edge = mesh->open_edges[i];
    glVertex(edge->v1()->v);
    glVertex(edge->v2()->v);
  }
  glEnd();
}
void CylinderPrimitive::glRenderAction(GLContextData& contextData) const
	{
	/* Retrieve the data item: */
	DataItem* dataItem=contextData.retrieveDataItem<DataItem>(this);
	
	glPushAttrib(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_ENABLE_BIT|GL_LINE_BIT|GL_POLYGON_BIT);
	glDisable(GL_LIGHTING);
	
	/* Draw the cylinder's central axis: */
	glLineWidth(3.0f);
	glColor(surfaceColor);
	glBegin(GL_LINES);
	Vector z=axis*Math::div2(length);
	glVertex(center-z);
	glVertex(center+z);
	glEnd();
	
	glEnable(GL_BLEND);
	glDepthMask(GL_FALSE);
	
	/* Draw the surface: */
	glColor(surfaceColor);
	glCallList(dataItem->displayListId);
	
	/* Draw the grid: */
	glColor(gridColor);
	glCallList(dataItem->displayListId+1);
	
	glPopAttrib();
	}
	inline static void renderGridOutline(const Array& vertices)
		{
		/* Get vertex array size: */
		const Index& numVertices=vertices.getSize();
		
		Index index;
		
		/* Render grid's outline: */
		glBegin(GL_LINE_STRIP);
		index[1]=0;
		for(index[0]=0;index[0]<numVertices[0];++index[0])
			glVertex(vertices(index).pos);
		glEnd();
		glBegin(GL_LINE_STRIP);
		index[1]=numVertices[1]-1;
		for(index[0]=0;index[0]<numVertices[0];++index[0])
			glVertex(vertices(index).pos);
		glEnd();
		glBegin(GL_LINE_STRIP);
		index[0]=0;
		for(index[1]=0;index[1]<numVertices[1];++index[1])
			glVertex(vertices(index).pos);
		glEnd();
		glBegin(GL_LINE_STRIP);
		index[0]=numVertices[0]-1;
		for(index[1]=0;index[1]<numVertices[1];++index[1])
			glVertex(vertices(index).pos);
		glEnd();
		}
Exemple #14
0
void LoadingScreen::draw_progress_indicator(void)
{
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  vec2_ary_t points = Procedural::circle_points(
      0.0,0.0,0.2f,
      64,1,1,
      m_counter * m_step
  );

  vec2_ary_t points2 = Procedural::circle_points(
      0.0,0.0,0.05f,
      64,1,1,
      m_counter * m_step
  );
  
  glColor3f(0.6f,0.6f,1.0);
  
  glScalef(1.0f/1.6f,-1.0,0.0);

  glRotatef(90,0,0,-1);

  glBegin(GL_TRIANGLE_STRIP);
  for(unsigned int i=0;i<points.size();++i) {
    glVertex(points[i]);
    glVertex(points2[i]);
  }
  glEnd();
}
Exemple #15
0
void draw_aa_line(Line l,float width,vec4 color,float stipple)
{
  // stretch line to quad
  vec2 linedir = normalized(l.p2 - l.p1); // line direction vector
  linedir *= 0.001 * width; // scale normalized vector with line width
  vec2 p1_a = vec2(+linedir[1],-linedir[0]) + l.p1; // rotate vector 90 degrees and add to p1
  vec2 p1_b = vec2(-linedir[1],+linedir[0]) + l.p1; // rotate vector 270 degrees and add to p1
  vec2 p2_a = vec2(+linedir[1],-linedir[0]) + l.p2; // rotate vector 90 degrees and add to p2
  vec2 p2_b = vec2(-linedir[1],+linedir[0]) + l.p2; // rotate vector 270 degrees and add to p2

  float len = length(l.p2 - l.p1);

  glBindTexture(GL_TEXTURE_2D,g_resources.texture_line);

  len *= stipple;

  g_resources.shader_line->use();
  my_glUniform1f(g_resources.shader_line->get_uni_loc("stipple"),clamp_0_1(stipple));

  glEnable(GL_TEXTURE_2D);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

  glColor(color);

	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0); glVertex(p1_a);
	glTexCoord2f(0.0,1.0); glVertex(p1_b);
	glTexCoord2f(len,1.0); glVertex(p2_b);
	glTexCoord2f(len,0.0); glVertex(p2_a);
	glEnd();
  g_resources.shader_line->unuse();

  glDisable(GL_TEXTURE_2D);
}
Exemple #16
0
void GLFont::String::draw(const GLFont::Vector& origin,GLContextData& contextData) const
	{
	/* Retrieve the context data item: */
	DataItem* dataItem=contextData.retrieveDataItem<DataItem>(this);
	
	/* Render a textured quad: */
	glPushAttrib(GL_TEXTURE_BIT);
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D,dataItem->textureObjectId);
	glTexEnvMode(GLTexEnvEnums::TEXTURE_ENV,GLTexEnvEnums::BLEND);
	glTexEnvColor(GLTexEnvEnums::TEXTURE_ENV,foregroundColor);
	glColor(backgroundColor);
	Box offsetBox=box.offset(origin);
	glBegin(GL_QUADS);
	glNormal3f(0.0,0.0,1.0);
	glTexCoord(texCoord.getCorner(0));
	glVertex(offsetBox.getCorner(0));
	glTexCoord(texCoord.getCorner(1));
	glVertex(offsetBox.getCorner(1));
	glTexCoord(texCoord.getCorner(3));
	glVertex(offsetBox.getCorner(3));
	glTexCoord(texCoord.getCorner(2));
	glVertex(offsetBox.getCorner(2));
	glEnd();
	glBindTexture(GL_TEXTURE_2D,0);
	glPopAttrib();
	}
Exemple #17
0
void ConeNode::createList(GLContextData& renderState) const
	{
	Scalar h=height.getValue();
	Scalar h2=Math::div2(h);
	Scalar br=bottomRadius.getValue();
	int ns=numSegments.getValue();
	
	if(side.getValue())
		{
		/* Draw the cone side: */
		glBegin(GL_QUAD_STRIP);
		Scalar nScale=Scalar(1)/Math::sqrt(h*h+br*br);
		glNormal(Scalar(0),br*nScale,-h*nScale);
		glTexCoord2f(0.0f,1.0f);
		glVertex(Scalar(0),h2,Scalar(0));
		glTexCoord2f(0.0f,0.0f);
		glVertex(Scalar(0),-h2,-br);
		for(int i=1;i<ns;++i)
			{
			Scalar angle=Scalar(2)*Math::Constants<Scalar>::pi*Scalar(i)/Scalar(ns);
			float texS=float(i)/float(ns);
			Scalar c=Math::cos(angle);
			Scalar s=Math::sin(angle);
			glNormal(-s*h*nScale,br*nScale,-c*h*nScale);
			glTexCoord2f(texS,1.0f);
			glVertex(Scalar(0),h2,Scalar(0));
			glTexCoord2f(texS,0.0f);
			glVertex(-s*br,-h2,-c*br);
			}
		glNormal(Scalar(0),br*nScale,-h*nScale);
		glTexCoord2f(1.0f,1.0f);
		glVertex(Scalar(0),h2,Scalar(0));
		glTexCoord2f(1.0f,0.0f);
		glVertex(Scalar(0),-h2,-br);
		glEnd();
		}
	
	if(bottom.getValue())
		{
		/* Draw the cone bottom: */
		glBegin(GL_TRIANGLE_FAN);
		glNormal(Scalar(0),Scalar(-1),Scalar(0));
		glTexCoord2f(0.5f,0.5f);
		glVertex(Scalar(0),-h2,Scalar(0));
		glTexCoord2f(0.5f,0.0f);
		glVertex(Scalar(0),-h2,-br);
		for(int i=ns-1;i>0;--i)
			{
			Scalar angle=Scalar(2)*Math::Constants<Scalar>::pi*Scalar(i)/Scalar(ns);
			Scalar c=Math::cos(angle);
			Scalar s=Math::sin(angle);
			glTexCoord2f(-float(s)*0.5f+0.5f,-float(c)*0.5f+0.5f);
			glVertex(-s*br,-h2,-c*br);
			}
		glTexCoord2f(0.5f,0.0f);
		glVertex(Scalar(0),-h2,-br);
		glEnd();
		}
	}
Exemple #18
0
void ShowLEDs::display(GLContextData& contextData) const
	{
	glPushAttrib(GL_ENABLE_BIT|GL_POINT_BIT);
	glEnable(GL_COLOR_MATERIAL);
	glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
	
	/* Draw the IMU as a sphere: */
	glPushMatrix();
	glTranslate(hmdModel.getIMU()-HMDModel::Point::origin);
	glColor3f(0.5f,0.5f,1.0f);
	glDrawSphereIcosahedron(0.005,4);
	glPopMatrix();
	
	/* Draw the markers as spheres: */
	for(unsigned int markerIndex=0;markerIndex<hmdModel.getNumMarkers();++markerIndex)
		{
		glPushMatrix();
		glTranslate(hmdModel.getMarkerPos(markerIndex)-HMDModel::Point::origin);
		glColor3f(1.0f,0.5f,0.5f);
		glDrawSphereIcosahedron(0.005,4);
		glPopMatrix();
		}
	
	glDisable(GL_LIGHTING);
	glPointSize(3.0f);
	glLineWidth(3.0f);
	
	/* Draw the markers emission direction vectors: */
	glColor3f(0.5f,1.0f,5.0f);
	glBegin(GL_LINES);
	for(unsigned int markerIndex=0;markerIndex<hmdModel.getNumMarkers();++markerIndex)
		{
		glVertex(hmdModel.getMarkerPos(markerIndex));
		glVertex(hmdModel.getMarkerPos(markerIndex)+hmdModel.getMarkerDir(markerIndex)*HMDModel::Scalar(0.03));
		}
	glEnd();
	
	/* Draw the markers' IDs: */
	glLineWidth(2.0f);
	glColor3f(1.0f,1.0f,1.0f);
	HMDModel::Point head=HMDModel::Point(Vrui::getHeadPosition());
	for(unsigned int markerIndex=0;markerIndex<hmdModel.getNumMarkers();++markerIndex)
		{
		/* Intersect a ray from the head position to the marker position with the marker sphere: */
		Geometry::Sphere<HMDModel::Scalar,3> marker(hmdModel.getMarkerPos(markerIndex),HMDModel::Scalar(0.0075));
		Geometry::Ray<HMDModel::Scalar,3> ray(head,marker.getCenter()-head);
		Geometry::Sphere<HMDModel::Scalar,3>::HitResult hr=marker.intersectRay(ray);
		HMDModel::Point labelPos=ray(hr.getParameter());
		glPushMatrix();
		Vrui::Vector up=Vrui::getInverseNavigationTransformation().transform(Vrui::getUpDirection());
		Vrui::Vector x=Vrui::Vector(ray.getDirection())^up;
		glMultMatrix(Vrui::ONTransform::rotateAround(labelPos,Vrui::Rotation::fromBaseVectors(x,up)));
		numberRenderer.drawNumber(GLNumberRenderer::Vector(labelPos.getComponents()),markerIndex,contextData,0,0);
		glPopMatrix();
		}
	
	glPopAttrib();
	}
	inline static void highlightCell(const Cell& cell)
		{
		glBegin(GL_LINE_LOOP);
		glVertex(cell.getVertexPosition(0));
		glVertex(cell.getVertexPosition(1));
		glVertex(cell.getVertexPosition(3));
		glVertex(cell.getVertexPosition(2));
		glEnd();
		}
Exemple #20
0
void Primitive::DrawDebugInObjectSpace(){

	glPushAttrib(GL_DEPTH_BUFFER_BIT|GL_ENABLE_BIT|GL_LINE_BIT|GL_POINT_BIT|GL_CURRENT_BIT|GL_LIGHTING_BIT|GL_COLOR_BUFFER_BIT);
	glDisable(GL_LIGHTING);
	glDisable(GL_TEXTURE_2D);
	glDisable(GL_COLOR_MATERIAL);
	glDisable(GL_BLEND);

	if(showCloudSampling){
		//Disegno la cloudSampling
		for(int i=0;i<(int)cloudSampling.size();i++){
			glColor3f(1,0,1);
			glPointSize(3);
			glBegin(GL_POINTS);
			glVertex(cloudSampling[i]);
			glEnd();
		}	
	}

	if(showCloudNearPoints){
		//Disegno la cloudNearPoints
		for(int i=0;i<(int)cloudNearPoints.size();i++){
			glColor3f(0,1,1);
			glPointSize(3);
			glBegin(GL_POINTS);
			glVertex(cloudNearPoints[i]);				
			glEnd();
		}
	}

	if(showLines){
		//Disegno Le linee:
		for(int i=0;i<(int)cloudNearPoints.size();i++){
			glPointSize(1);
			glBegin(GL_LINES);
			glColor3f(0,1,1);
			glVertex(cloudNearPoints[i]);
			glColor3f(1,0,1);
			glVertex(cloudSampling[i]);
			glEnd();
		}
	}	

	if(showSelectionMesh){
		//Disegno la selectionMesh
		for(int i=0;i<(int)selectionMesh->vert.size();i++){
			glColor3f(1,0.5,0.25);
			glPointSize(3);
			glBegin(GL_POINTS);
			glVertex(selectionMesh->vert[i].P());
			glEnd();
		}	
	}

	glPopAttrib();

}
	/* Methods: */
	inline static void renderBoundingBox(const Box& box)
		{
		glBegin(GL_LINE_LOOP);
		glVertex(box.getVertex(0));
		glVertex(box.getVertex(1));
		glVertex(box.getVertex(3));
		glVertex(box.getVertex(2));
		glEnd();
		}
 void DrawSelf ()
   { // draw line
     SetGLColor (Color (1, 1, 1));
     glLineWidth(2.0);
     glBegin (GL_LINES);
     glVertex (Vect (0, 0, 0));
     glVertex (vertex);
     glEnd ();        
   }
Exemple #23
0
void QuadSetNode::glRenderAction(GLRenderState& renderState) const
	{
	/* Bail out if there are less than 4 points: */
	if(coord.getValue()==0||coord.getValue()->point.getNumValues()<4)
		return;
	
	/* Set up OpenGL state: */
	renderState.enableCulling(GL_BACK);
	
	/* Render the quad set: */
	size_t numPoints=coord.getValue()->point.getNumValues();
	glBegin(GL_QUADS);
	std::vector<Vector>::const_iterator qnIt=quadNormals.begin();
	for(size_t q=0;q+4<=numPoints;q+=4,++qnIt)
		{
		/* Get the quad's four corner points in counter-clockwise order: */
		Point ps[4];
		if(ccw.getValue())
			{
			for(size_t i=0;i<4;++i)
				ps[i]=coord.getValue()->point.getValue(q+i);
			}
		else
			{
			for(size_t i=0;i<4;++i)
				ps[i]=coord.getValue()->point.getValue(q+3-i);
			}
		
		if(pointTransform.getValue()!=0)
			{
			/* Transform the quad's corner points: */
			for(int i=0;i<4;++i)
				ps[i]=pointTransform.getValue()->transformPoint(ps[i]);
			}
		
		/* Draw the quad's front: */
		glNormal(*qnIt);
		for(int i=0;i<4;++i)
			{
			glTexCoord(quadTexCoords[i]);
			glVertex(ps[i]);
			}
		
		if(!solid.getValue())
			{
			/* Draw the quad's back: */
			glNormal(-*qnIt);
			for(int i=3;i>=0;--i)
				{
				glTexCoord(quadTexCoords[i]);
				glVertex(ps[i]);
				}
			}
		}
	glEnd();
	}
void GLLabel::draw(GLContextData& contextData) const
	{
	/* Try listing the label with a deferred renderer: */
	if(DeferredRenderer::addLabel(this))
		return;
	
	/* Retrieve the context data item: */
	DataItem* dataItem=contextData.retrieveDataItem<DataItem>(this);
	
	/* Save and set up OpenGL state: */
	GLbitfield attribPushMask=GL_TEXTURE_BIT;
	bool lightingOn=glIsEnabled(GL_LIGHTING);
	if(lightingOn)
		attribPushMask|=GL_LIGHTING_BIT;
	glPushAttrib(attribPushMask);
	glEnable(GL_TEXTURE_2D);
	if(lightingOn)
		{
		glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR);
		glTexEnvMode(GLTexEnvEnums::TEXTURE_ENV,GLTexEnvEnums::MODULATE);
		}
	else
		glTexEnvMode(GLTexEnvEnums::TEXTURE_ENV,GLTexEnvEnums::REPLACE);
	
	/* Bind the label texture: */
	glBindTexture(GL_TEXTURE_2D,dataItem->textureObjectId);
	
	/* Check if the texture object needs to be updated: */
	if(dataItem->version!=version)
		{
		/* Upload the string's texture image: */
		font->uploadStringTexture(*this,background,foreground);
		
		/* Update the texture version number: */
		dataItem->version=version;
		}
	
	/* Draw a textured quad: */
	glColor4f(1.0f,1.0f,1.0f,background[3]);
	glBegin(GL_QUADS);
	glNormal3f(0.0f,0.0f,1.0f);
	glTexCoord(textureBox.getCorner(0));
	glVertex(labelBox.getCorner(0));
	glTexCoord(textureBox.getCorner(1));
	glVertex(labelBox.getCorner(1));
	glTexCoord(textureBox.getCorner(3));
	glVertex(labelBox.getCorner(3));
	glTexCoord(textureBox.getCorner(2));
	glVertex(labelBox.getCorner(2));
	glEnd();
	
	/* Reset OpenGL state: */
	glBindTexture(GL_TEXTURE_2D,0);
	glPopAttrib();
	}
    void DrawSelf ()
    {   // draw line
        SetGLColor (Color (1, 1, 1));
        glLineWidth(2.0);
        glBegin (GL_LINES);
        glVertex (Vect (0, 0, 0));
        glVertex (vertex);
        glEnd ();

        // draw bar (DrawQuad draws from the bottom left corner)
        DrawQuad (Vect (-Feld () -> Width () / 2, Feld () -> Height () / 2 - h, 0), Vect (m, 0, 0), Vect (0, h, 0));
    }
Exemple #26
0
void renderBillboard(const vec3& pUp, const vec3& pRight, const World3& pWorld, const vec3& pPosition, const vec3& pColor, real pAlpha, real pSize) {
	const vec3 up = pUp * pSize;
	const vec3 right = pRight * pSize;
	const vec3 top = pPosition + up;
	const vec3 bottom = pPosition -up;

	glColor4f(pColor.getX(), pColor.getY(), pColor.getZ(), pAlpha);
	glTexCoord2f(1,1); glVertex(top + right);
	glTexCoord2f(0,1); glVertex(top - right);
	glTexCoord2f(0,0); glVertex(bottom - right);
	glTexCoord2f(1,0); glVertex(bottom + right);
}
	inline static void highlightCell(const Cell& cell)
		{
		/* Render all grid cell faces: */
		glBegin(GL_LINES);
		for(int i=0;i<3;++i)
			for(int j=i+1;j<4;++j)
				{
				glVertex(cell.getVertexPosition(i));
				glVertex(cell.getVertexPosition(j));
				}
		glEnd();
		}
	inline static void renderGridCells(const DataSet& dataSet)
		{
		/* Render all grid cell faces: */
		glBegin(GL_LINES);
		for(CellIterator cIt=dataSet.beginCells();cIt!=dataSet.endCells();++cIt)
			for(int i=0;i<3;++i)
				for(int j=i+1;j<4;++j)
					{
					glVertex(cIt->getVertexPosition(i));
					glVertex(cIt->getVertexPosition(j));
					}
		glEnd();
		}
	inline static void renderGridFaces(const DataSet& dataSet)
		{
		/* Render all grid cell faces that do not have neighbours: */
		glBegin(GL_LINES);
		for(CellIterator cIt=dataSet.beginCells();cIt!=dataSet.endCells();++cIt)
			for(int i=0;i<3;++i)
				if(!cIt->getNeighbourID(i).isValid())
					{
					glVertex(cIt->getVertexPosition((i+1)%3));
					glVertex(cIt->getVertexPosition((i+2)%3));
					}
		glEnd();
		}
Exemple #30
0
void MouseTool::display(GLContextData& contextData) const
{
    if(transformEnabled&&factory->crosshairSize>Scalar(0))
    {
        /* Draw crosshairs at the virtual device's current position: */
        glPushAttrib(GL_ENABLE_BIT|GL_LINE_BIT);
        glDisable(GL_LIGHTING);
        glPushMatrix();
        glMultMatrix(transformedDevice->getTransformation());
        glLineWidth(3.0f);
        Color lineCol=getBackgroundColor();
        glColor(lineCol);
        glBegin(GL_LINES);
        glVertex(-factory->crosshairSize,Scalar(0),Scalar(0));
        glVertex( factory->crosshairSize,Scalar(0),Scalar(0));
        glVertex(Scalar(0),Scalar(0),-factory->crosshairSize);
        glVertex(Scalar(0),Scalar(0), factory->crosshairSize);
        glEnd();
        glLineWidth(1.0f);
        for(int i=0; i<3; ++i)
            lineCol[i]=1.0f-lineCol[i];
        glColor(lineCol);
        glBegin(GL_LINES);
        glVertex(-factory->crosshairSize,Scalar(0),Scalar(0));
        glVertex( factory->crosshairSize,Scalar(0),Scalar(0));
        glVertex(Scalar(0),Scalar(0),-factory->crosshairSize);
        glVertex(Scalar(0),Scalar(0), factory->crosshairSize);
        glEnd();
        glPopMatrix();
        glPopAttrib();
    }
}