示例#1
0
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);
 }
示例#3
0
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;
}