Ogre::MeshPtr STLLoader::toMesh(const std::string& name) { Ogre::ManualObject* object = new Ogre::ManualObject( "the one and only" ); object->begin( "BaseWhiteNoLighting", Ogre::RenderOperation::OT_TRIANGLE_LIST ); unsigned int vertexCount = 0; V_Triangle::const_iterator it = triangles_.begin(); V_Triangle::const_iterator end = triangles_.end(); for (; it != end; ++it ) { if( vertexCount >= 2004 ) { // Subdivide large meshes into submeshes with at most 2004 // vertices to prevent problems on some graphics cards. object->end(); object->begin( "BaseWhiteNoLighting", Ogre::RenderOperation::OT_TRIANGLE_LIST ); vertexCount = 0; } const STLLoader::Triangle& tri = *it; float u, v; u = v = 0.0f; object->position( tri.vertices_[0] ); object->normal( tri.normal_); calculateUV( tri.vertices_[0], u, v ); object->textureCoord( u, v ); object->position( tri.vertices_[1] ); object->normal( tri.normal_); calculateUV( tri.vertices_[1], u, v ); object->textureCoord( u, v ); object->position( tri.vertices_[2] ); object->normal( tri.normal_); calculateUV( tri.vertices_[2], u, v ); object->textureCoord( u, v ); object->triangle( vertexCount + 0, vertexCount + 1, vertexCount + 2 ); vertexCount += 3; } object->end(); Ogre::MeshPtr mesh = object->convertToMesh( name, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME ); mesh->buildEdgeList(); delete object; return mesh; }
void StateButton::Init(Eegeo::UI::IUIQuadFactory& quadFactory, UI::IUIRenderableFilter& uiRenderableFilter, const std::string& assetPath, const UIProgressBarConfig& progressBarConfig, const Eegeo::v2& size, const Eegeo::dv3& ecefPosition, const Eegeo::v3& scale, const Eegeo::v4& color, int activeSpriteId, int deactiveSpriteId, int spriteSheetSize) { Eegeo::v2 minUV; Eegeo::v2 maxUV; calculateUV(activeSpriteId, spriteSheetSize, minUV, maxUV); m_pActiveState = Eegeo_NEW(UISprite)(uiRenderableFilter , quadFactory.CreateUIQuad(assetPath, size, minUV, maxUV) , size , ecefPosition , scale , color ); calculateUV(deactiveSpriteId, spriteSheetSize, minUV, maxUV); m_pDeactiveState = Eegeo_NEW(UISprite)(uiRenderableFilter , quadFactory.CreateUIQuad(assetPath, size, minUV, maxUV) , size , ecefPosition , scale , color ); m_pGazeProgress = Eegeo_NEW(Eegeo::UI::UIAnimatedSprite)(uiRenderableFilter, quadFactory, progressBarConfig.textureFilename, progressBarConfig.frameRate, progressBarConfig.spriteGridSize, progressBarConfig.spriteId, size, ecefPosition, progressBarConfig.scale, progressBarConfig.color, progressBarConfig.renderLayer); m_pActiveState->SetItemShouldRender(true); m_pDeactiveState->SetItemShouldRender(false); }
PolygonInfo AutoPolygon::generateTriangles(const Rect& rect, const float& epsilon, const float& threshold) { Rect realRect = getRealRect(rect); auto p = trace(realRect, threshold); p = reduce(p, realRect, epsilon); p = expand(p, realRect, epsilon); auto tri = triangulate(p); calculateUV(realRect, tri.verts, tri.vertCount); PolygonInfo ret; ret.triangles = tri; ret.filename = _filename; ret.rect = realRect; return ret; }