Exemplo n.º 1
0
    public Scene(IArchiveDirectory dataDir, Device device, ShaderCache shaderCache, StandardSamplers standardSamplers, TrackedDeviceBufferManager trackedDeviceBufferManager, ControllerManager controllerManager)
    {
        var textureCache = new TextureCache(device);

        toneMappingSettings = new ToneMappingSettings();
        iblEnvironment      = new ImageBasedLightingEnvironment(device, standardSamplers, dataDir, InitialSettings.Environment, InitialSettings.EnvironmentRotation);
        backdrop            = new Backdrop(device, shaderCache);
        floor = new PlayspaceFloor(device, shaderCache);
        renderModelRenderer = new RenderModelRenderer(device, shaderCache, trackedDeviceBufferManager);
        primitiveRenderer   = new MeshRenderer(device, shaderCache, Matrix.Translation(0, 1.25f, 0), GeometricPrimitiveFactory.MakeSphere(0.5f, 100).AsTriMesh());

        var shapeNormalsLoader   = new ShapeNormalsLoader(dataDir, device, textureCache);
        var figureRendererLoader = new FigureRendererLoader(dataDir, device, shaderCache, textureCache);
        var figureLoader         = new FigureLoader(dataDir, device, shaderCache, shapeNormalsLoader, figureRendererLoader);

        actor = Actor.Load(dataDir, device, shaderCache, controllerManager, figureLoader);

        var iblMenu = LightingEnvironmentMenu.MakeMenuLevel(dataDir, iblEnvironment);
        var toneMappingMenuLevel    = new ToneMappingMenuLevel(toneMappingSettings);
        var renderSettingsMenuLevel = new StaticMenuLevel(
            new SubLevelMenuItem("Lighting Enviroment", iblMenu),
            new SubLevelMenuItem("Tone Mapping", toneMappingMenuLevel),
            new FloorVisibilityToggleMenuItem(floor)
            );
        var scenePersistenceMenuLevel = ScenePersistenceMenuLevel.Make(this);
        var appMenuLevel = new StaticMenuLevel(
            new SubLevelMenuItem("Save/Load", scenePersistenceMenuLevel),
            new SubLevelMenuItem("Render Settings", renderSettingsMenuLevel)
            );

        var rootMenuLevel = new CombinedMenuLevel(appMenuLevel, actor.MenuLevel);

        menu = new Menu(device, shaderCache, trackedDeviceBufferManager, controllerManager, rootMenuLevel);
    }