private void EnableRenderer(bool cameraHigher) { try { if (_imageEx != null) { return; } var renderer = new DarkKn5ObjectRenderer(Model.Car); renderer.SelectSkin(null); renderer.Initialize(); renderer.SetCameraHigher = cameraHigher; SetRendererSize(renderer); renderer.Draw(); Model.Renderer = renderer; _imageEx = new D3DImageEx(); Scene.Source = _imageEx; _setCount = 0; _lastTarget = IntPtr.Zero; CompositionTarget.Rendering += OnRendering; VisibilityAnimation.SetVisible(Scene, true); } catch (Exception e) { MessageBox.Show(e.ToString()); } }
private async Task EnableRenderer() { if (!_loaded) { await DisableRenderer(); return; } try { _carId = ValuesStorage.Storage.GetObject <JObject>("__QuickDrive_Main")?.GetStringValueOnly("CarId") ?? @"abarth500"; var car = CarsManager.Instance.GetById(_carId); if (_imageEx != null || car == null) { return; } Progress.IsActive = true; var panoramaBg = new Uri("pack://application:,,,/Content Manager;component/Assets/Img/ShowroomPanoramaExample.jpg", UriKind.Absolute); var renderer = new DarkKn5ObjectRenderer(CarDescription.FromDirectory(car.Location, car.AcdData)) { WpfMode = true, UseMsaa = false, VisibleUi = false, TryToGuessCarLights = false, LoadCarLights = false, AnyGround = true, BackgroundColor = System.Drawing.Color.FromArgb(0x444444), BackgroundBrightness = 1f, LightBrightness = 0f, AmbientDown = System.Drawing.Color.FromArgb(0x444444), AmbientUp = System.Drawing.Color.FromArgb(0xffffff), AmbientBrightness = 4f, Light = Vector3.Normalize(new Vector3(-0.1f, 10, -0.1f)), ShadowMapSize = 512, EnableShadows = false, AutoRotate = false, AutoAdjustTarget = false, UseDof = true, UseAccumulationDof = true, AccumulationDofApertureSize = 0f, AccumulationDofIterations = 20, AccumulationDofBokeh = false, UseFxaa = false, UseSslr = true, UseAo = false, UseDither = true, MaterialsReflectiveness = 1.5f, UseCustomReflectionCubemap = true, CustomReflectionCubemap = Application.GetResourceStream(panoramaBg)?.Stream.ReadAsBytesAndDispose(), CubemapAmbientWhite = false, CubemapAmbient = 0.6f, }; var data = car.AcdData; if (data != null) { var carBasic = data.GetIniFile("car.ini")["BASIC"]; _carLength = carBasic.GetVector3F("INERTIA").ToVector3().Z; var suspensions = data.GetIniFile("suspensions.ini"); var suspensionsBasic = suspensions["BASIC"]; var go = carBasic.GetVector3F("GRAPHICS_OFFSET").ToVector3(); var center = suspensionsBasic.GetFloat("WHEELBASE", 2.5f) * suspensionsBasic.GetFloat("CG_LOCATION", 0.5f); _carOffset = new Vector3(go.X, go.Y - suspensions["REAR"].GetFloat("BASEY", 0.25f), go.Z + center); _lookAt = new Vector3(go.X, go.Y - suspensions["FRONT"].GetFloat("BASEY", 0.25f), go.Z + center); } await Task.Run(() => renderer.Initialize()); renderer.SetCameraHigher = false; SetRendererSize(renderer); if (renderer.CarNode != null) { // renderer.SelectSkin(car.SelectedSkin?.Id); renderer.CarNode.BrakeLightsEnabled = true; renderer.CarNode.CockpitLrActive = true; renderer.CarNode.CurrentLod = renderer.CarNode.LodsCount > 1 ? 1 : 0; } await Task.Run(() => renderer.Draw()); _renderer = renderer; _imageEx = new D3DImageEx(); Scene.Source = _imageEx; _setCount = 0; _lastTarget = IntPtr.Zero; CompositionTargetEx.Rendering += OnRendering; UpdateCamera(); } catch (Exception e) { NonfatalError.Notify("Can’t display chase camera preview", e); } finally { Progress.IsActive = false; } }