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(); }
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)); }); }