void UnitDragger::glRenderAction(GLContextData& contextData) const
	{
	/* Get a pointer to the context data item: */
	DataItem* dataItem=contextData.retrieveDataItem<DataItem>(this);
	if(draggingMode==INFLUENCE_SPHERE)
		{
		/* Translate coordinate system to dragger's position and orientation: */
		glPushMatrix();
		glMultMatrix(influenceSphereTransform);
		glScaled(influenceSphereRadius,influenceSphereRadius,influenceSphereRadius);
		glCallList(dataItem->displayListId);
		glPopMatrix();
		}
	}
Beispiel #2
0
void ViewpointFileNavigationTool::display(GLContextData& contextData) const
	{
	if(!viewpoints.empty()&&showKeyframes)
		{
		/* Display the next keyframe viewpoint in navigational coordinates: */
		glPushAttrib(GL_ENABLE_BIT|GL_LINE_BIT);
		glDisable(GL_LIGHTING);
		glLineWidth(3.0f);
		glPushMatrix();
		glMultMatrix(getNavigationTransformation());
		
		glBegin(GL_LINES);
		glColor3f(1.0f,0.0f,0.0f);
		glVertex(viewpoints[nextViewpointIndex].center);
		glVertex(viewpoints[nextViewpointIndex].center+viewpoints[nextViewpointIndex].forward*Math::exp(viewpoints[nextViewpointIndex].size)*Scalar(0.25));
		glColor3f(0.0f,1.0f,0.0f);
		glVertex(viewpoints[nextViewpointIndex].center);
		glVertex(viewpoints[nextViewpointIndex].center+viewpoints[nextViewpointIndex].up*Math::exp(viewpoints[nextViewpointIndex].size)*Scalar(0.25));
		glEnd();
		
		glPopMatrix();
		glPopAttrib();
		}
	}
void VruiDemo::display(GLContextData& contextData) const
	{
	Vrui::Point displayCenter=Vrui::getDisplayCenter();
	Vrui::Scalar inchScale=Vrui::getInchFactor();
	
	/* Set up OpenGL state: */
	GLboolean lightingEnabled=glIsEnabled(GL_LIGHTING);
	if(lightingEnabled)
		glDisable(GL_LIGHTING);
	GLfloat lineWidth;
	glGetFloatv(GL_LINE_WIDTH,&lineWidth);
	glLineWidth(1.0f);
	
	/* Draw a 10" wireframe cube in the middle of the environment: */
	glPushMatrix();
	glTranslate(displayCenter-Vrui::Point::origin);
	glScale(inchScale,inchScale,inchScale);
	
	glColor(modelColor);
	glBegin(GL_LINES);
	glVertex(-5.0f,-5.0f,-5.0f);
	glVertex( 5.0f,-5.0f,-5.0f);
	glVertex(-5.0f, 5.0f,-5.0f);
	glVertex( 5.0f, 5.0f,-5.0f);
	glVertex(-5.0f, 5.0f, 5.0f);
	glVertex( 5.0f, 5.0f, 5.0f);
	glVertex(-5.0f,-5.0f, 5.0f);
	glVertex( 5.0f,-5.0f, 5.0f);
	
	glVertex(-5.0f,-5.0f,-5.0f);
	glVertex(-5.0f, 5.0f,-5.0f);
	glVertex( 5.0f,-5.0f,-5.0f);
	glVertex( 5.0f, 5.0f,-5.0f);
	glVertex( 5.0f,-5.0f, 5.0f);
	glVertex( 5.0f, 5.0f, 5.0f);
	glVertex(-5.0f,-5.0f, 5.0f);
	glVertex(-5.0f, 5.0f, 5.0f);
	
	glVertex(-5.0f,-5.0f,-5.0f);
	glVertex(-5.0f,-5.0f, 5.0f);
	glVertex( 5.0f,-5.0f,-5.0f);
	glVertex( 5.0f,-5.0f, 5.0f);
	glVertex( 5.0f, 5.0f,-5.0f);
	glVertex( 5.0f, 5.0f, 5.0f);
	glVertex(-5.0f, 5.0f,-5.0f);
	glVertex(-5.0f, 5.0f, 5.0f);
	glEnd();
	glPopMatrix();
	
	/* Draw coordinate axes for each input device: */
	int numDevices=Vrui::getNumInputDevices();
	for(int i=0;i<numDevices;++i)
		{
		Vrui::InputDevice* id=Vrui::getInputDevice(i);
		if(id->is6DOFDevice())
			{
			glPushMatrix();
			glMultMatrix(id->getTransformation());
			glScale(inchScale,inchScale,inchScale);
			glBegin(GL_LINES);
			glColor3f(1.0f,0.0f,0.0f);
			glVertex3f(-5.0f,0.0f,0.0f);
			glVertex3f( 5.0f,0.0f,0.0f);
			glColor3f(0.0f,1.0f,0.0f);
			glVertex3f(0.0f,-5.0f,0.0f);
			glVertex3f(0.0f, 5.0f,0.0f);
			glColor3f(0.0f,0.0f,1.0f);
			glVertex3f(0.0f,0.0f,-5.0f);
			glVertex3f(0.0f,0.0f, 5.0f);
			glEnd();
			glPopMatrix();
			}
		}
	
	/* This only works in the CAVE - draw a grid on the "front wall" to calibrate external cameras: */
	glBegin(GL_LINES);
	glColor3f(1.0f,1.0f,0.0f);
	for(int y=0;y<=8;++y)
		{
		glVertex(-60.0f,-36.0f,float(y)*12.0f);
		glVertex(60.0f,-36.0f,float(y)*12.0f);
		}
	for(int x=0;x<=10;++x)
		{
		glVertex(float(x)*12.0f-60.0f,-36.0f,0.0f);
		glVertex(float(x)*12.0f-60.0f,-36.0f,96.0f);
		}
	glEnd();
	
	/* Restore OpenGL state: */
	glLineWidth(lineWidth);
	if(lightingEnabled)
		glEnable(GL_LIGHTING);
	}