From e085b09bb940635558109a0b902ba90366481596 Mon Sep 17 00:00:00 2001 From: iAmAsval Date: Fri, 3 Dec 2021 22:18:52 +0100 Subject: [PATCH] emissive color support --- FModel/ViewModels/ModelViewerViewModel.cs | 73 ++++++++++++++++------- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/FModel/ViewModels/ModelViewerViewModel.cs b/FModel/ViewModels/ModelViewerViewModel.cs index 1c22b435..d49f500d 100644 --- a/FModel/ViewModels/ModelViewerViewModel.cs +++ b/FModel/ViewModels/ModelViewerViewModel.cs @@ -137,25 +137,13 @@ namespace FModel.ViewModels public void RenderingToggle() { if (SelectedModel == null) return; - foreach (var g in SelectedModel.Group3d) - { - if (g is not MeshGeometryModel3D geometryModel) - continue; - - geometryModel.IsRendering = !geometryModel.IsRendering; - } + SelectedModel.RenderingToggle = !SelectedModel.RenderingToggle; } public void WirefreameToggle() { if (SelectedModel == null) return; - foreach (var g in SelectedModel.Group3d) - { - if (g is not MeshGeometryModel3D geometryModel) - continue; - - geometryModel.RenderWireframe = !geometryModel.RenderWireframe; - } + SelectedModel.WireframeToggle = !SelectedModel.WireframeToggle; } public void MaterialColorToggle() @@ -167,7 +155,7 @@ namespace FModel.ViewModels public void DiffuseOnlyToggle() { if (SelectedModel == null) return; - SelectedModel.ShowDiffuseOnly = !SelectedModel.ShowDiffuseOnly; + SelectedModel.DiffuseOnlyToggle = !SelectedModel.DiffuseOnlyToggle; } public void FocusOnSelectedMesh() @@ -462,6 +450,17 @@ namespace FModel.ViewModels m.RenderAmbientOcclusionMap = parameters.SpecularValue > 0; }); } + + if (parameters.Emissive is UTexture2D emissive && parameters.EmissiveColor is { A: > 0 } emissiveColor) + { + var s = emissive.Decode()?.Encode().AsStream(); + var c = new Color4(emissiveColor.R, emissiveColor.G, emissiveColor.B, emissiveColor.A); + Application.Current.Dispatcher.Invoke(() => + { + m.EmissiveColor = c; + m.EmissiveMap = new TextureModel(s); + }); + } } else { @@ -528,6 +527,40 @@ namespace FModel.ViewModels set => SetProperty(ref _isVisible, value); } + private bool _renderingToggle; + public bool RenderingToggle + { + get => _renderingToggle; + set + { + SetProperty(ref _renderingToggle, value); + foreach (var g in Group3d) + { + if (g is not MeshGeometryModel3D geometryModel) + continue; + + geometryModel.IsRendering = !geometryModel.IsRendering; + } + } + } + + private bool _wireframeToggle; + public bool WireframeToggle + { + get => _wireframeToggle; + set + { + SetProperty(ref _wireframeToggle, value); + foreach (var g in Group3d) + { + if (g is not MeshGeometryModel3D geometryModel) + continue; + + geometryModel.RenderWireframe = !geometryModel.RenderWireframe; + } + } + } + private bool _showMaterialColor; public bool ShowMaterialColor { @@ -553,13 +586,13 @@ namespace FModel.ViewModels } } - private bool _showDiffuseOnly; - public bool ShowDiffuseOnly + private bool _diffuseOnlyToggle; + public bool DiffuseOnlyToggle { - get => _showDiffuseOnly; + get => _diffuseOnlyToggle; set { - SetProperty(ref _showDiffuseOnly, value); + SetProperty(ref _diffuseOnlyToggle, value); foreach (var g in Group3d) { if (g is not MeshGeometryModel3D { Material: PBRMaterial material }) @@ -567,7 +600,7 @@ namespace FModel.ViewModels material.RenderAmbientOcclusionMap = !material.RenderAmbientOcclusionMap; material.RenderDisplacementMap = !material.RenderDisplacementMap; - material.RenderEmissiveMap = !material.RenderEmissiveMap; + // material.RenderEmissiveMap = !material.RenderEmissiveMap; // material.RenderEnvironmentMap = !material.RenderEnvironmentMap; material.RenderIrradianceMap = !material.RenderIrradianceMap; material.RenderRoughnessMetallicMap = !material.RenderRoughnessMetallicMap;