Ejemplo n.º 1
0
        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());
            }
        }
Ejemplo n.º 2
0
        public async Task LamborghiniTest()
        {
            var path = Path.Combine(AcRootFinder.Find(), @"content\cars");

            if (!Directory.Exists(path))
            {
                Debug.WriteLine("REQUIRED ASSET IS MISSING, TEST CANNOT BE DONE");
                return;
            }

            var cars = Directory.GetDirectories(path, "ks_lamborghini_*").Select(x => new {
                CarId        = Path.GetFileName(x),
                CarDirectory = x,
                Kn5          = FileUtils.GetMainCarFilename(x)
            }).ToList();

            var sw = Stopwatch.StartNew();
            var i  = 0;

            using (var e = cars.GetEnumerator()) {
                if (!e.MoveNext())
                {
                    return;
                }

                var first = e.Current;
                if (first == null)
                {
                    return;
                }

                using (var renderer = new DarkKn5ObjectRenderer(new CarDescription(first.Kn5, first.CarDirectory))) {
                    renderer.UseMsaa    = false;
                    renderer.UseFxaa    = false;
                    renderer.AutoRotate = false;
                    renderer.SetCamera(new Vector3(3.867643f, 1.42359f, 4.70381f), new Vector3(0.0f, 0.7f, 0.5f), (float)(Math.PI / 180d * 30f));
                    renderer.BackgroundColor = Color.FromArgb(220, 220, 220);

                    renderer.Initialize();
                    renderer.Width  = CommonAcConsts.PreviewWidth;
                    renderer.Height = CommonAcConsts.PreviewHeight;

                    do
                    {
                        if (e.Current != first)
                        {
                            first = e.Current;
                            if (first == null)
                            {
                                return;
                            }

                            await renderer.SetCarAsync(new CarDescription(first.Kn5, first.CarDirectory));
                        }

                        Console.WriteLine(first.CarId);

                        foreach (var skinDirectory in Directory.GetDirectories(Path.Combine(first.CarDirectory, "skins")))
                        {
                            // Console.WriteLine(skinDirectory);

                            renderer.Shot(4d, 1d, true)
                            .HighQualityResize(new Size(CommonAcConsts.PreviewWidth, CommonAcConsts.PreviewHeight))
                            .Save(Path.Combine(skinDirectory, "preview_new.jpg"));
                            renderer.SelectNextSkin();
                            i++;
                        }
                    } while (e.MoveNext());
                }
            }

            Console.WriteLine($"Done: {i} skins ({sw.Elapsed.TotalMilliseconds / i:F1} ms per skin)");
        }
Ejemplo n.º 3
0
        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;
            }
        }