예제 #1
0
void App::InitScene( int width, int height )
{
    Renderer* renderer = dynamic_cast<Renderer*>(m_Worker.get());
    BOOST_ASSERT(renderer);
    renderer->Init();

    std::vector< BrushPtr > brushes;
    brushes.push_back( LoadBrush<BmpBrush>("FireBase.bmp") );
    brushes.push_back( LoadBrush<TgaBrush>("lightmap.tga") );
    brushes.push_back( LoadBrush<TgaBrush>("FieldstoneNoisy.tga") );
    brushes.push_back( LoadBrush<DdsBrush>("MetalDecoB.dds") );

    ////////////////////////////////////////////////////////////////////////////
    // Compose our scene

    // Add a viewport
    EntityPtr viewport(new Viewport(width, height));
    // this entity renders
    renderer->AddEntity(viewport);
    // listen to resize events
    m_EntityEventHandlerList.push_back( viewport );

    // Add the camera
    EntityPtr camera(new Camera(m_Joystick));
    // this entity handles events
    m_EntityEventHandlerList.push_back( camera );
    // this entity renders
    viewport->AddEntity(camera, 0);

    EntityPtr flag( new Surface( brushes ) );
    flag->GetRenderState()->Translate( Vector(0.0, 0, 0), Vector(1.0f, 1.0f, 1.0f) );
    flag->GetRenderState()->Rotate( Vector(-90.0f, 0.0f, 0.0f ) );
    // this entity renders
    camera->AddEntity(flag, 20 );

    // some custom event handler
    m_EventHandlerList.push_back( boost::bind( &OnHandleEvent, _1, flag ) );
}