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); } }
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(); }
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); }
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); }