Пример #1
0
        public WpfScene(TextureProvider<BitmapSource> textureProvider, MeshViewSettingsViewModel settingsViewModel)
        {
            _viewPort = new Viewport3D();
            
            _rendererCamera = new WpfRendererCamera(_viewPort, Vector3.Zero);

            _textureProvider = textureProvider;
            var lightGroup = new Model3DGroup();
            var light = new PointLight(Colors.Cornsilk, _rendererCamera.Position.AsPoint3D());
            CameraLight = new WpfLight(light);
            lightGroup.Children.Add(light);

            _viewPort.Children.Add(new ModelVisual3D {Content = lightGroup});

            _meshModelGroup = new Model3DGroup();
            _wireFrameModelGroup = new Model3DGroup();

            _allModelGroup = new Model3DGroup();
            _allModelGroup.Children.Add(_meshModelGroup);
            _allModelGroup.Children.Add(_wireFrameModelGroup);

            var rotation = new RotateTransform3D();
            _quaternionRotation = new QuaternionRotation3D();
            rotation.Rotation = _quaternionRotation;
            _allModelGroup.Transform = rotation;

            var visual = new ModelVisual3D {Content = _allModelGroup};

            _viewPort.Children.Add(visual);

            var border = new Border{Background = Brushes.Black};
            border.Child = _viewPort;
            Visual = border;
            MouseInput = new WpfMouseInput(border);


            settingsViewModel.WhenAnyValue(s => s.MeshEnabled,
                s => s.WireFrameEnabled).Subscribe(_ =>
            {
                ToggleMesh(settingsViewModel.MeshEnabled);
                ToggleWireFrame(settingsViewModel.WireFrameEnabled);
            });

            settingsViewModel.WhenAnyValue(
                s => s.YRotation,
                s => s.XRotation,
                s => s.ZRotation).Subscribe(_ =>
            {
                SetRootRotation(
                    new Quaternion(new Vector3D(1, 0, 0), settingsViewModel.XRotation) *
                    new Quaternion(new Vector3D(0, 1, 0), settingsViewModel.YRotation) *
                    new Quaternion(new Vector3D(0, 0, 1), settingsViewModel.ZRotation));
            });
        }