Пример #1
0
        public OpenGLScene(MeshLoader meshLoader, MeshViewSettingsViewModel settingsViewModel)
        {
            _meshLoader        = meshLoader;
            _settingsViewModel = settingsViewModel;
            var glControl = new GlControl
            {
                Animation       = true,
                DepthBits       = 24,
                MultisampleBits = 32,
            };

            glControl.ContextCreated += GlControlOnContextCreated;
            glControl.Render         += GlControlOnRender;


            var grid = new Grid {
                Background = Brushes.Aqua
            };

            var windowsFormsHost = new WindowsFormsHost {
                Child = glControl
            };

            MouseInput = new WinFormsMouseInput(glControl);

            grid.Children.Add(windowsFormsHost);

            Visual = grid;

            CameraLight   = new OpenGLLight();
            _openGLCamera = new OpenGLRendererCamera(-Vector3.UnitZ, Vector3.UnitZ, Vector3.UnitY);

            glControl.CreateControl();
        }
Пример #2
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));
            });
        }