private void LoadAndAdjustKn5() {
            _materialsProvider = new DepthMaterialProvider();
            _texturesProvider = new TexturesProvider();
            DeviceContextHolder.Set(_materialsProvider);
            DeviceContextHolder.Set(_texturesProvider);

            _materialsProvider.SetKn5(_kn5);

            _carNode = (Kn5RenderableList)Kn5Converter.Convert(_kn5.RootNode, DeviceContextHolder);
            _scene.Add(_carNode);

            _carNode.UpdateBoundingBox();
            _carNode.LocalMatrix = Matrix.Translation(0, UpDelta - (_carNode.BoundingBox?.Minimum.Y ?? 0f), 0) * _carNode.LocalMatrix;
            _scene.UpdateBoundingBox();
        }
Пример #2
0
        protected override void InitializeInner() {
            base.InitializeInner();

            _materialsProvider = new MaterialsProviderDeferred();
            _texturesProvider = new TexturesProvider();
            DeviceContextHolder.Set(_materialsProvider);
            DeviceContextHolder.Set(_texturesProvider);
            
            Scene.Add(SkyObject.Create(500f));

            IRenderableObject mainNode = null;
            foreach (var kn5 in _kn5) {
                if (mainNode == null) {
                    _carHelper.SetKn5(DeviceContextHolder);
                } else {
                    _materialsProvider.SetKn5(kn5);
                    _texturesProvider.SetKn5(kn5.OriginalFilename, kn5);
                }

                var node = Kn5Converter.Convert(kn5.RootNode, DeviceContextHolder);
                Scene.Add(node);

                if (mainNode != null) continue;
                node.IsReflectable = false;
                mainNode = node;
            }

            var asList = mainNode as Kn5RenderableList;
            if (asList != null) {
                Scene.AddRange(_carHelper.LoadAmbientShadows(asList, 0.001f));

                _carHelper.AdjustPosition(asList);
                _carHelper.LoadMirrors(asList, DeviceContextHolder);
                LoadLights(asList);
            }

            Scene.UpdateBoundingBox();

            Camera = new CameraOrbit(32) {
                Alpha = 0.9f,
                Beta = 0.1f,
                NearZ = 0.2f,
                FarZ = 500f,
                Radius = mainNode?.BoundingBox?.GetSize().Length() * 1.2f ?? 4.8f,
                Target = (mainNode?.BoundingBox?.GetCenter() ?? Vector3.Zero) - new Vector3(0f, 0.05f, 0f)
            };

            _resetCamera = (CameraOrbit)Camera.Clone();

            Sun = new DirectionalLight {
                Color = FixLight(new Vector3(1.2f, 1.0f, 0.9f)) * 5f,
                Direction = Vector3.Normalize(new Vector3(-1.2f, -3.4f, -2.2f))
            };

            _effect = DeviceContextHolder.GetEffect<EffectDeferredGObject>();
        }
Пример #3
0
        protected override void InitializeInner() {
            base.InitializeInner();

            MaterialsProvider = new MaterialsProviderSimple();
            TexturesProvider = new TexturesProvider();
            DeviceContextHolder.Set(MaterialsProvider);
            DeviceContextHolder.Set(TexturesProvider);
            
            CarHelper.SetKn5(DeviceContextHolder);
            CarHelper.SkinTextureUpdated += (sender, args) => IsDirty = true;

            var node = Kn5Converter.Convert(Kn5.RootNode, DeviceContextHolder);
            Scene.Add(node);

            CarNode = node as Kn5RenderableList;
            if (CarNode != null) {
                Scene.InsertRange(0, CarHelper.LoadAmbientShadows(CarNode, 0f));
                CarHelper.AdjustPosition(CarNode);
                CarHelper.LoadMirrors(CarNode, DeviceContextHolder);

                _carLights = CarHelper.LoadLights(CarNode).ToList();
            }

            Scene.UpdateBoundingBox();
            TrianglesCount = node.TrianglesCount;
            ObjectsCount = node.ObjectsCount;

            Camera = CreateCamera(node);
            _resetCamera = (CameraOrbit)Camera.Clone();

            if (_selectSkin != null) {
                SelectSkin(_selectSkin);
                _selectSkin = null;
            }
        }