VirtualInputDevice::VirtualInputDevice(GlyphRenderer* sGlyphRenderer,const Misc::ConfigurationFileSection&)
	:glyphRenderer(sGlyphRenderer)
	{
	buttonOffset=Vector(0,0,1.25)*Scalar(glyphRenderer->getGlyphSize());
	buttonPanelDirection=Vector(1,0,0);
	buttonSize=Scalar(0.333); // Size is relative to the input device glyph size
	buttonSpacing=Scalar(glyphRenderer->getGlyphSize())*Scalar(0.5);
	offButtonGlyph.enable(Glyph::CUBE,GLMaterial(GLMaterial::Color(0.5f,0.5f,0.5f),GLMaterial::Color(0.3f,0.3f,0.3f),5.0f));
	onButtonGlyph.enable(Glyph::CUBE,GLMaterial(GLMaterial::Color(0.25f,1.0f,0.25f),GLMaterial::Color(0.3f,0.3f,0.3f),5.0f));
	deviceGlyph.enable(Glyph::BOX,GLMaterial(GLMaterial::Color(0.5f,0.5f,0.5f),GLMaterial::Color(0.3f,0.3f,0.3f),5.0f));
	}
void VectorEvaluationLocator::highlightLocator(GLContextData& contextData) const
	{
	/* Render the evaluated vector value if valid: */
	if(valueValid)
		{
		/* Set up OpenGL state for arrow rendering: */
		GLboolean lightingEnabled=glIsEnabled(GL_LIGHTING);
		if(!lightingEnabled)
			glEnable(GL_LIGHTING);
		GLboolean normalizeEnabled=glIsEnabled(GL_NORMALIZE);
		if(!normalizeEnabled)
			glEnable(GL_NORMALIZE);
		GLboolean colorMaterialEnabled=glIsEnabled(GL_COLOR_MATERIAL);
		if(colorMaterialEnabled)
			glDisable(GL_COLOR_MATERIAL);
		GLMaterial frontMaterial=glGetMaterial(GLMaterialEnums::FRONT);
		GLMaterial::Color arrowColor=(*colorMap)(currentScalarValue);
		glMaterial(GLMaterialEnums::FRONT,GLMaterial(arrowColor,GLMaterial::Color(0.6f,0.6f,0.6f),25.0f));
		
		/* Render an arrow glyph: */
		Scalar arrowShaftRadius=Scalar((Vrui::Scalar(0.5)*Vrui::getUiSize())/Vrui::getNavigationTransformation().getScaling());
		Visualization::Wrappers::renderArrow(point,currentValue*arrowLengthScale,arrowShaftRadius,arrowShaftRadius*Scalar(3),arrowShaftRadius*Scalar(6),16);
		
		/* Reset OpenGL state: */
		glMaterial(GLMaterialEnums::FRONT,frontMaterial);
		if(colorMaterialEnabled)
			glEnable(GL_COLOR_MATERIAL);
		if(!normalizeEnabled)
			glDisable(GL_NORMALIZE);
		if(!lightingEnabled)
			glDisable(GL_LIGHTING);
		}
	}
Exemple #3
0
void DefaultIcon::display ( GLContextData& contextData ) const
{
	glMaterial ( GLMaterialEnums::FRONT_AND_BACK, GLMaterial ( Vrui::getUiBgColor ( ) ) ) ;
	glPushMatrix ( ) ;
	glTranslate ( 0.0f, 0.0f, 0.0f ) ;
	glRotate ( Vrui::Scalar ( 50.0 ), Vrui::Vector ( -1.0, -1.0, 1.0 ) ) ;
	glDrawCone ( 0.75, 1.5, 10 ) ;
	glPopMatrix ( ) ;
}
void GLMesh::LoadMaterial(const aiScene * scene, std::string filepath)
{
	std::string dir = FileUtil::GetDirectoryPath(filepath);
	for (int i = 0; i < scene->mNumMaterials; i++)
	{
		const aiMaterial *material = scene->mMaterials[i];
		materials.push_back(GLMaterial(material, dir));
	}
}
void VideoViewer::display(GLContextData& contextData) const
{
    /* Get the context data item: */
    DataItem* dataItem=contextData.retrieveDataItem<DataItem>(this);

    /* Set up OpenGL state: */
    glPushAttrib(GL_ENABLE_BIT|GL_TEXTURE_BIT);
    glEnable(GL_TEXTURE_2D);
    glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);

    /* Bind the texture object: */
    glBindTexture(GL_TEXTURE_2D,dataItem->videoTextureId);

    /* Check if the cached texture is outdated: */
    if(dataItem->videoTextureVersion!=videoFrameVersion)
    {
        /* Upload the most recent texture image: */
        videoFrames.getLockedValue().glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,!dataItem->haveNpotdt);
        dataItem->videoTextureVersion=videoFrameVersion;
    }

    glBegin(GL_QUADS);
    glTexCoord2f(dataItem->texMin[0],dataItem->texMin[1]);
    glVertex2i(0,0);
    glTexCoord2f(dataItem->texMax[0],dataItem->texMin[1]);
    glVertex2i(videoFormat.size[0],0);
    glTexCoord2f(dataItem->texMax[0],dataItem->texMax[1]);
    glVertex2i(videoFormat.size[0],videoFormat.size[1]);
    glTexCoord2f(dataItem->texMin[0],dataItem->texMax[1]);
    glVertex2i(0,videoFormat.size[1]);
    glEnd();

    /* Protect the texture object: */
    glBindTexture(GL_TEXTURE_2D,0);

    /* Draw the video's backside: */
    glDisable(GL_TEXTURE_2D);
    glMaterial(GLMaterialEnums::FRONT,GLMaterial(GLMaterial::Color(0.7f,0.7f,0.7f)));

    glBegin(GL_QUADS);
    glNormal3f(0.0f,0.0f,-1.0f);
    glVertex2i(0,0);
    glVertex2i(0,videoFormat.size[1]);
    glVertex2i(videoFormat.size[0],videoFormat.size[1]);
    glVertex2i(videoFormat.size[0],0);
    glEnd();

    /* Restore OpenGL state: */
    glPopAttrib();
}
inline
void
Isosurface<DataSetWrapperParam>::glRenderAction(
	GLContextData& contextData) const
	{
	/* Set up OpenGL state for isosurface rendering: */
	GLboolean cullFaceEnabled=glIsEnabled(GL_CULL_FACE);
	if(cullFaceEnabled)
		glDisable(GL_CULL_FACE);
	GLboolean lightingEnabled=glIsEnabled(GL_LIGHTING);
	if(!lightingEnabled)
		glEnable(GL_LIGHTING);
	GLboolean normalizeEnabled=glIsEnabled(GL_NORMALIZE);
	if(!normalizeEnabled)
		glEnable(GL_NORMALIZE);
	GLboolean lightModelTwoSide;
	glGetBooleanv(GL_LIGHT_MODEL_TWO_SIDE,&lightModelTwoSide);
	if(!lightModelTwoSide)
		glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);
	GLboolean colorMaterialEnabled=glIsEnabled(GL_COLOR_MATERIAL);
	if(colorMaterialEnabled)
		glDisable(GL_COLOR_MATERIAL);
	GLMaterial frontMaterial=glGetMaterial(GLMaterialEnums::FRONT);
	GLMaterial backMaterial=glGetMaterial(GLMaterialEnums::BACK);
	GLMaterial::Color surfaceColor=(*colorMap)(isovalue);
	glMaterial(GLMaterialEnums::FRONT_AND_BACK,GLMaterial(surfaceColor,GLMaterial::Color(0.6f,0.6f,0.6f),25.0f));
	
	/* Render the surface representation: */
	surface.glRenderAction(contextData);
	
	/* Reset OpenGL state: */
	glMaterial(GLMaterialEnums::FRONT,frontMaterial);
	glMaterial(GLMaterialEnums::BACK,backMaterial);
	if(colorMaterialEnabled)
		glEnable(GL_COLOR_MATERIAL);
	if(!lightModelTwoSide)
		glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_FALSE);
	if(!normalizeEnabled)
		glDisable(GL_NORMALIZE);
	if(!lightingEnabled)
		glDisable(GL_LIGHTING);
	if(cullFaceEnabled)
		glEnable(GL_CULL_FACE);
	}
void ImageViewer::display(GLContextData& contextData) const
	{
	/* Get the context data item: */
	DataItem* dataItem=contextData.retrieveDataItem<DataItem>(this);
	
	/* Set up OpenGL state: */
	glPushAttrib(GL_ENABLE_BIT);
	glEnable(GL_TEXTURE_2D);
	glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
	
	/* Bind the texture object: */
	glBindTexture(GL_TEXTURE_2D,dataItem->imageTextureId);
	
	/* Draw the image: */
	glBegin(GL_QUADS);
	glTexCoord2f(dataItem->texMin[0],dataItem->texMin[1]);
	glVertex2i(0,0);
	glTexCoord2f(dataItem->texMax[0],dataItem->texMin[1]);
	glVertex2i(image.getSize(0),0);
	glTexCoord2f(dataItem->texMax[0],dataItem->texMax[1]);
	glVertex2i(image.getSize(0),image.getSize(1));
	glTexCoord2f(dataItem->texMin[0],dataItem->texMax[1]);
	glVertex2i(0,image.getSize(1));
	glEnd();
	
	/* Protect the texture object: */
	glBindTexture(GL_TEXTURE_2D,0);
	
	/* Draw the image's backside: */
	glDisable(GL_TEXTURE_2D);
	glMaterial(GLMaterialEnums::FRONT,GLMaterial(GLMaterial::Color(0.7f,0.7f,0.7f)));
	
	glBegin(GL_QUADS);
	glNormal3f(0.0f,0.0f,-1.0f);
	glVertex2i(0,0);
	glVertex2i(0,image.getSize(1));
	glVertex2i(image.getSize(0),image.getSize(1));
	glVertex2i(image.getSize(0),0);
	glEnd();
	
	/* Restore OpenGL state: */
	glPopAttrib();
	}
Exemple #8
0
void GridEditor::display(GLContextData& contextData) const
	{
	/* Get a pointer to the data item: */
	DataItem* dataItem=contextData.retrieveDataItem<DataItem>(this);
	
	/* Render the grid's domain box: */
	GLboolean lightingEnabled=glIsEnabled(GL_LIGHTING);
	if(lightingEnabled)
		glDisable(GL_LIGHTING);
	GLfloat lineWidth;
	glGetFloatv(GL_LINE_WIDTH,&lineWidth);
	glLineWidth(1.0f);
	glCallList(dataItem->domainBoxDisplayListId);
	if(lightingEnabled)
		glEnable(GL_LIGHTING);
	glLineWidth(lineWidth);
	
	/* Render the grid's current state: */
	glMaterial(GLMaterialEnums::FRONT,GLMaterial(GLMaterial::Color(0.5f,0.5f,0.5f),GLMaterial::Color(0.5f,0.5f,0.5f),25.0f));
	grid->glRenderAction(contextData);
	}
Exemple #9
0
GLMeshRenderer::GLMeshRenderer()
{
	m_mesh = GLMesh();
	m_material = GLMaterial();
}
inline
void
Streamsurface<DataSetWrapperParam>::glRenderAction(
	GLContextData& contextData) const
	{
	/* Set up OpenGL state for stream surface rendering: */
	GLboolean cullFaceEnabled=glIsEnabled(GL_CULL_FACE);
	if(cullFaceEnabled)
		glDisable(GL_CULL_FACE);
	GLboolean lightingEnabled=glIsEnabled(GL_LIGHTING);
	if(!lightingEnabled)
		glEnable(GL_LIGHTING);
	GLboolean normalizeEnabled=glIsEnabled(GL_NORMALIZE);
	if(!normalizeEnabled)
		glEnable(GL_NORMALIZE);
	GLboolean lightModelTwoSide;
	glGetBooleanv(GL_LIGHT_MODEL_TWO_SIDE,&lightModelTwoSide);
	if(!lightModelTwoSide)
		glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);
	GLboolean colorMaterialEnabled=glIsEnabled(GL_COLOR_MATERIAL);
	if(colorMaterialEnabled)
		glDisable(GL_COLOR_MATERIAL);
	GLMaterial frontMaterial=glGetMaterial(GLMaterialEnums::FRONT);
	GLMaterial backMaterial=glGetMaterial(GLMaterialEnums::BACK);
	glMaterial(GLMaterialEnums::FRONT_AND_BACK,GLMaterial(GLMaterial::Color(1.0f,1.0f,1.0f),GLMaterial::Color(0.6f,0.6f,0.6f),25.0f));
	GLint colorControl;
	glGetIntegerv(GL_LIGHT_MODEL_COLOR_CONTROL,&colorControl);
	glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR);
	GLboolean texture1DEnabled=glIsEnabled(GL_TEXTURE_1D);
	if(!texture1DEnabled)
		glEnable(GL_TEXTURE_1D);
	GLboolean texture2DEnabled=glIsEnabled(GL_TEXTURE_2D);
	if(texture2DEnabled)
		glDisable(GL_TEXTURE_2D);
	GLboolean texture3DEnabled=glIsEnabled(GL_TEXTURE_3D);
	if(texture3DEnabled)
		glDisable(GL_TEXTURE_3D);
	
	/* Upload the color map as a 1D texture: */
	glTexParameteri(GL_TEXTURE_1D,GL_TEXTURE_BASE_LEVEL,0);
	glTexParameteri(GL_TEXTURE_1D,GL_TEXTURE_MAX_LEVEL,0);
	glTexParameteri(GL_TEXTURE_1D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_1D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
	glTexParameteri(GL_TEXTURE_1D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
	glTexImage1D(GL_TEXTURE_1D,0,GL_RGBA8,256,0,GL_RGBA,GL_FLOAT,colorMap->getColors());
	glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
	
	GLint matrixMode;
	glGetIntegerv(GL_MATRIX_MODE,&matrixMode);
	if(matrixMode!=GL_TEXTURE)
		glMatrixMode(GL_TEXTURE);
	glPushMatrix();
	glLoadIdentity();
	double mapMin=colorMap->getScalarRangeMin();
	double mapRange=colorMap->getScalarRangeMax()-mapMin;
	glScaled(1.0/mapRange,1.0,1.0);
	glTranslated(-mapMin,0.0,0.0);
	glColor4f(1.0f,1.0f,1.0f,1.0f);
	
	/* Render the stream surface representation: */
	surface.glRenderAction(contextData);
	
	/* Reset OpenGL state: */
	glPopMatrix();
	if(matrixMode!=GL_TEXTURE)
		glMatrixMode(matrixMode);
	if(texture3DEnabled)
		glEnable(GL_TEXTURE_3D);
	if(texture2DEnabled)
		glEnable(GL_TEXTURE_2D);
	if(!texture1DEnabled)
		glDisable(GL_TEXTURE_1D);
	glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL,colorControl);
	glMaterial(GLMaterialEnums::FRONT,frontMaterial);
	glMaterial(GLMaterialEnums::BACK,backMaterial);
	if(colorMaterialEnabled)
		glEnable(GL_COLOR_MATERIAL);
	if(!lightModelTwoSide)
		glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_FALSE);
	if(!normalizeEnabled)
		glDisable(GL_NORMALIZE);
	if(!lightingEnabled)
		glDisable(GL_LIGHTING);
	if(cullFaceEnabled)
		glEnable(GL_CULL_FACE);
	}