ISceneObject* CreatePlayerObject() {
    IModeler* modeler2 = new WavefrontOBJModeler();
    modeler2->LoadFromFile ( "marble.obj" );
    modeler2->SetMaterial ( MaterialFactory::CreateMaterial ( RED_PLASTIC ) );
    modeler2->Scale ( 0.5f, 0.5f, 0.5f );
    modeler2->CenterAtOrigin();
    
    SceneObject* marble = new SceneObject ( "Marble", Vector3d ( -1.f, -0.5f, 0.f ) );
    marble->SetModeler ( modeler2, true );
    marble->SetRenderer ( new GLSceneObjectRenderer(), true );
    marble->SetAnimator ( &player, false );
    marble->SetupBoundingBox();
    
    return marble;
}
ISceneObject* CreateWallObject(const string &name, const Vector3d &position) {
    IModeler* modeler = new WavefrontOBJModeler();
    modeler->LoadFromFile ( "wall.obj" );
    modeler->SetMaterial ( MaterialFactory::CreateMaterial ( PEARL ) );
    modeler->Scale ( 0.1f, 0.6f, 1.f );
    modeler->CenterAtOrigin();
    modeler->RecalculateNormals();
    
    SceneObject* object = new SceneObject (name, position);
    object->SetModeler ( modeler, true );
    object->SetRenderer ( new GLSceneObjectRenderer(), true );
    object->SetupBoundingBox();
    
    IAnimator* animator = new MotionAnimator (name);
    object->SetAnimator ( animator, true );
    
    return object;
}
ISceneObject* CreateCubeObject() {
    WavefrontOBJModeler* modeler = new WavefrontOBJModeler();
    modeler->LoadFromFile ( "cube.obj" );
    modeler->SetMaterial ( MaterialFactory::CreateMaterial ( EMERALD ) );
    modeler->RecalculateNormals();
    modeler->Scale ( 0.25f, 0.25f, 0.25f );
    modeler->CenterAtOrigin();
    
    SceneObject* cube = new SceneObject ( "Cube", Vector3d ( 0.9f, -0.4f, 0.f ) );
    cube->SetModeler ( modeler, true );
    cube->SetRenderer ( new GLSceneObjectRenderer(), true );
    cube->SetupBoundingBox();
    
    MotionAnimator* animator = new MotionAnimator ( "Cube" );
    cube->SetAnimator ( animator, true );

    return cube;
}