Exemplo n.º 1
0
        protected override void InitializeInner()
        {
            base.InitializeInner();

            DeviceContextHolder.Set <IMaterialsFactory>(new MaterialsProviderSimple());

            if (_showroom != null)
            {
                var kn5 = Kn5.FromFile(_showroom.Kn5Filename);
                Scene.Insert(0, new Kn5RenderableFile(kn5, Matrix.Identity));
            }

            _carWrapper = new RenderableList();
            Scene.Add(_carWrapper);

            if (_car != null)
            {
                var kn5 = Kn5.FromFile(FileUtils.GetMainCarFilename(_car.Location));
                CarNode          = new Kn5RenderableCar(kn5, _car.Location, Matrix.Identity, _selectSkinLater ? _selectSkin : Kn5RenderableCar.DefaultSkin);
                _selectSkinLater = false;
                _carWrapper.Add(CarNode);

                var reflection = new FlatMirror(CarNode, new Plane(Vector3.Zero, Vector3.UnitY));
                _carWrapper.Add(reflection);
            }

            Scene.UpdateBoundingBox();

            if (CubemapReflection)
            {
                _reflectionCubemap = new ReflectionCubemap(1024);
                _reflectionCubemap.Initialize(DeviceContextHolder);
            }

            if (EffectDarkMaterial.EnableShadows)
            {
                _shadows = new ShadowsDirectional(2048, new[] { 5f });
                _shadows.Initialize(DeviceContextHolder);
            }

            if (Camera == null)
            {
                Camera       = CreateCamera(CarNode);
                _resetCamera = (CameraOrbit)Camera.Clone();
            }
        }
        protected override void InitializeInner()
        {
            _deferredLighting = DeviceContextHolder.GetEffect <EffectDeferredLight>();
            _deferredResult   = DeviceContextHolder.GetEffect <EffectDeferredResult>();
            _ppBasic          = DeviceContextHolder.GetEffect <EffectPpBasic>();

            _gDepthBuffer  = TargetResourceDepthTexture.Create();
            _gBufferBase   = TargetResourceTexture.Create(Format.R16G16B16A16_Float);
            _gBufferNormal = TargetResourceTexture.Create(Format.R32G32B32A32_Float);
            _gBufferMaps   = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);

            _temporaryDepthBuffer = TargetResourceDepthTexture.Create();
            _temporaryBuffer0     = TargetResourceTexture.Create(Format.R16G16B16A16_Float);
            _temporaryBuffer1     = TargetResourceTexture.Create(Format.R16G16B16A16_Float);
            _temporaryBuffer2     = TargetResourceTexture.Create(Format.R16G16B16A16_Float);
            _temporaryBuffer3     = TargetResourceTexture.Create(Format.R16G16B16A16_Float);
            _outputBuffer         = TargetResourceTexture.Create(Format.R8G8B8A8_UNorm);

            _reflectionCubemap = new ReflectionCubemap(1024);
            _reflectionCubemap.Initialize(DeviceContextHolder);

            _sunShadows = new ShadowsDirectional(2048);
            _sunShadows.Initialize(DeviceContextHolder);
        }
Exemplo n.º 3
0
 protected virtual void DrawPrepareEffect(Vector3 eyesPosition, Vector3 light, [CanBeNull] ShadowsDirectional shadows,
                                          [CanBeNull] ReflectionCubemap reflection)
 {
     DeviceContextHolder.GetEffect <EffectSimpleMaterial>().FxEyePosW.Set(ActualCamera.Position);
 }
Exemplo n.º 4
0
        protected override void DrawPrepareEffect(Vector3 eyesPosition, Vector3 light, ShadowsDirectional shadows, ReflectionCubemap reflection)
        {
            var effect = Effect;

            effect.FxEyePosW.Set(eyesPosition);

            _light = light;
            effect.FxLightDir.Set(light);

            effect.FxLightColor.Set(LightColor.ToVector3() * LightBrightness);
            effect.FxReflectionPower.Set(MaterialsReflectiveness);
            effect.FxCubemapReflections.Set(reflection != null);
            effect.FxCubemapAmbient.Set(reflection == null ? 0f : FxCubemapAmbientValue);

            // shadows
            var useShadows = EnableShadows && shadows != null;

            effect.FxNumSplits.Set(useShadows ? _numSplits : 0);

            if (useShadows)
            {
                effect.FxPcssEnabled.Set(UsePcss);
                if (UsePcss)
                {
                    PreparePcss(shadows);
                }
            }

            // colors
            effect.FxAmbientDown.Set(AmbientDown.ToVector3() * AmbientBrightness);
            effect.FxAmbientRange.Set((AmbientUp.ToVector3() - AmbientDown.ToVector3()) * AmbientBrightness);
            effect.FxBackgroundColor.Set(BackgroundColor.ToVector3() * BackgroundBrightness);

            // flat mirror
            if (FlatMirror && ShowroomNode == null)
            {
                effect.FxFlatMirrorPower.Set(FlatMirrorReflectiveness);
            }

            if (reflection != null)
            {
                effect.FxReflectionCubemap.SetResource(reflection.View);
            }
        }