diff --git a/sandbox/embed_selfhost_calculate.html b/sandbox/embed_selfhost_calculate.html index 9c1080c..98d0652 100644 --- a/sandbox/embed_selfhost_calculate.html +++ b/sandbox/embed_selfhost_calculate.html @@ -37,8 +37,8 @@ backgroundColor : new OV.RGBAColor (255, 255, 255, 255), defaultColor : new OV.RGBColor (200, 200, 200), edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1), - environmentSettings : { - environmentMap : [ + environmentSettings : new OV.EnvironmentSettings ( + [ '../website/assets/envmaps/fishermans_bastion/posx.jpg', '../website/assets/envmaps/fishermans_bastion/negx.jpg', '../website/assets/envmaps/fishermans_bastion/posy.jpg', @@ -46,8 +46,8 @@ '../website/assets/envmaps/fishermans_bastion/posz.jpg', '../website/assets/envmaps/fishermans_bastion/negz.jpg' ], - backgroundIsEnvMap : true - }, + true + ), onModelLoaded : () => { OnModelLoaded (viewer.GetModel ()); } diff --git a/sandbox/embed_selfhost_code_file.html b/sandbox/embed_selfhost_code_file.html index ad1fcac..2720442 100644 --- a/sandbox/embed_selfhost_code_file.html +++ b/sandbox/embed_selfhost_code_file.html @@ -29,8 +29,8 @@ backgroundColor : new OV.RGBAColor (255, 255, 255, 255), defaultColor : new OV.RGBColor (200, 200, 200), edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1), - environmentSettings : { - environmentMap : [ + environmentSettings : new OV.EnvironmentSettings ( + [ '../website/assets/envmaps/fishermans_bastion/posx.jpg', '../website/assets/envmaps/fishermans_bastion/negx.jpg', '../website/assets/envmaps/fishermans_bastion/posy.jpg', @@ -38,8 +38,8 @@ '../website/assets/envmaps/fishermans_bastion/posz.jpg', '../website/assets/envmaps/fishermans_bastion/negz.jpg' ], - backgroundIsEnvMap : false - } + false + ) }); // load a model selected by file input diff --git a/sandbox/embed_selfhost_code_url.html b/sandbox/embed_selfhost_code_url.html index 139b7d6..a360553 100644 --- a/sandbox/embed_selfhost_code_url.html +++ b/sandbox/embed_selfhost_code_url.html @@ -35,8 +35,8 @@ backgroundColor : new OV.RGBAColor (255, 255, 255, 255), defaultColor : new OV.RGBColor (200, 200, 200), edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1), - environmentSettings : { - environmentMap : [ + environmentSettings : new OV.EnvironmentSettings ( + [ '../website/assets/envmaps/fishermans_bastion/posx.jpg', '../website/assets/envmaps/fishermans_bastion/negx.jpg', '../website/assets/envmaps/fishermans_bastion/posy.jpg', @@ -44,8 +44,8 @@ '../website/assets/envmaps/fishermans_bastion/posz.jpg', '../website/assets/envmaps/fishermans_bastion/negz.jpg' ], - backgroundIsEnvMap : false - } + false + ) }); // load a model providing model urls diff --git a/sandbox/embed_selfhost_memory_test.html b/sandbox/embed_selfhost_memory_test.html index bd9ff84..5be4311 100644 --- a/sandbox/embed_selfhost_memory_test.html +++ b/sandbox/embed_selfhost_memory_test.html @@ -36,8 +36,8 @@ backgroundColor : new OV.RGBAColor (255, 255, 255, 255), defaultColor : new OV.RGBColor (200, 200, 200), edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1), - environmentSettings : { - environmentMap : [ + environmentSettings : new OV.EnvironmentSettings ( + [ '../website/assets/envmaps/fishermans_bastion/posx.jpg', '../website/assets/envmaps/fishermans_bastion/negx.jpg', '../website/assets/envmaps/fishermans_bastion/posy.jpg', @@ -45,8 +45,8 @@ '../website/assets/envmaps/fishermans_bastion/posz.jpg', '../website/assets/envmaps/fishermans_bastion/negz.jpg' ], - backgroundIsEnvMap : false - } + false + ) }); // load a model providing model urls diff --git a/source/engine/main.js b/source/engine/main.js index 818fe90..bd17f45 100644 --- a/source/engine/main.js +++ b/source/engine/main.js @@ -68,7 +68,7 @@ import { Camera, CameraIsEqual3D, CameraMode } from './viewer/camera.js'; import { GetIntegerFromStyle, GetDomElementExternalWidth, GetDomElementExternalHeight, GetDomElementInnerDimensions, GetDomElementClientCoordinates, CreateDomElement, AddDomElement, AddDiv, ClearDomElement, InsertDomElementBefore, InsertDomElementAfter, ShowDomElement, IsDomElementVisible, SetDomElementWidth, SetDomElementHeight, GetDomElementOuterWidth, GetDomElementOuterHeight, SetDomElementOuterWidth, SetDomElementOuterHeight, CreateDiv } from './viewer/domutils.js'; import { EmbeddedViewer, Init3DViewerElement, Init3DViewerElements } from './viewer/embeddedviewer.js'; import { MouseInteraction, TouchInteraction, ClickDetector, Navigation, NavigationType } from './viewer/navigation.js'; -import { ShadingModel } from './viewer/shadingmodel.js'; +import { EnvironmentSettings, ShadingModel } from './viewer/shadingmodel.js'; import { CameraValidator, UpVector, Viewer, GetDefaultCamera, TraverseThreeObject, GetShadingTypeOfObject } from './viewer/viewer.js'; import { ViewerModel, EdgeSettings, ViewerMainModel, SetThreeMeshPolygonOffset } from './viewer/viewermodel.js'; @@ -319,6 +319,7 @@ export { ClickDetector, Navigation, NavigationType, + EnvironmentSettings, ShadingModel, CameraValidator, UpVector, diff --git a/source/engine/viewer/embeddedviewer.js b/source/engine/viewer/embeddedviewer.js index c54b180..7c2f7c7 100644 --- a/source/engine/viewer/embeddedviewer.js +++ b/source/engine/viewer/embeddedviewer.js @@ -6,6 +6,7 @@ import { TransformFileHostUrls } from '../io/fileutils.js'; import { ParameterConverter } from '../parameters/parameterlist.js'; import { ThreeModelLoader } from '../threejs/threemodelloader.js'; import { Viewer } from './viewer.js'; +import { EnvironmentSettings } from './shadingmodel.js'; export class EmbeddedViewer { @@ -40,9 +41,7 @@ export class EmbeddedViewer } if (this.parameters.environmentSettings) { - let environmentMap = this.parameters.environmentSettings.environmentMap; - let backgroundIsEnvMap = this.parameters.environmentSettings.backgroundIsEnvMap; - this.viewer.SetEnvironmentMapSettings (environmentMap, backgroundIsEnvMap); + this.viewer.SetEnvironmentMapSettings (this.parameters.environmentSettings); } this.model = null; @@ -213,10 +212,7 @@ export function Init3DViewerElements (onReady) if (backgroundIsEnvMapParam && backgroundIsEnvMapParam === 'true') { backgroundIsEnvMap = true; } - environmentSettings = { - environmentMap : environmentMapParts, - backgroundIsEnvMap : backgroundIsEnvMap - }; + environmentSettings = new EnvironmentSettings (environmentMapParts, backgroundIsEnvMap); } } diff --git a/source/engine/viewer/shadingmodel.js b/source/engine/viewer/shadingmodel.js index 34b4a68..8079a70 100644 --- a/source/engine/viewer/shadingmodel.js +++ b/source/engine/viewer/shadingmodel.js @@ -4,6 +4,27 @@ import { ShadingType } from '../threejs/threeutils.js'; import * as THREE from 'three'; +export class EnvironmentSettings +{ + constructor (textureNames, backgroundIsEnvMap) + { + this.textureNames = textureNames; + this.backgroundIsEnvMap = backgroundIsEnvMap; + } + + Clone () + { + let textureNames = null; + if (this.textureNames !== null) { + textureNames = []; + for (let textureName of this.textureNames) { + textureNames.push (textureName); + } + } + return new EnvironmentSettings (textureNames, this.backgroundIsEnvMap); + } +} + export class ShadingModel { constructor (scene) @@ -14,8 +35,8 @@ export class ShadingModel this.cameraMode = CameraMode.Perspective; this.ambientLight = new THREE.AmbientLight (0x888888); this.directionalLight = new THREE.DirectionalLight (0x888888); + this.environmentSettings = new EnvironmentSettings (null, false); this.environment = null; - this.backgroundIsEnvMap = false; this.scene.add (this.ambientLight); this.scene.add (this.directionalLight); @@ -44,20 +65,20 @@ export class ShadingModel this.directionalLight.color.set (0x555555); this.scene.environment = this.environment; } - if (this.backgroundIsEnvMap && this.cameraMode === CameraMode.Perspective) { + if (this.environmentSettings.backgroundIsEnvMap && this.cameraMode === CameraMode.Perspective) { this.scene.background = this.environment; } else { this.scene.background = null; } } - SetEnvironment (textures, useAsBackground, onLoaded) + SetEnvironmentMapSettings (environmentSettings, onLoaded) { let loader = new THREE.CubeTextureLoader (); - this.environment = loader.load (textures, () => { + this.environment = loader.load (environmentSettings.textureNames, () => { onLoaded (); }); - this.backgroundIsEnvMap = useAsBackground; + this.environmentSettings = environmentSettings; } UpdateByCamera (camera) diff --git a/source/engine/viewer/viewer.js b/source/engine/viewer/viewer.js index a66eeed..cb127bc 100644 --- a/source/engine/viewer/viewer.js +++ b/source/engine/viewer/viewer.js @@ -217,9 +217,17 @@ export class Viewer this.navigation.SetContextMenuHandler (onContext); } - SetEnvironmentMapSettings (textures, useAsBackground) + SetEdgeSettings (edgeSettings) { - this.shadingModel.SetEnvironment (textures, useAsBackground, () => { + let newEdgeSettings = edgeSettings.Clone (); + this.mainModel.SetEdgeSettings (newEdgeSettings); + this.Render (); + } + + SetEnvironmentMapSettings (environmentSettings) + { + let newEnvironmentSettings = environmentSettings.Clone (); + this.shadingModel.SetEnvironmentMapSettings (newEnvironmentSettings, () => { this.Render (); }); this.shadingModel.UpdateShading (); @@ -238,13 +246,6 @@ export class Viewer this.Render (); } - SetEdgeSettings (edgeSettings) - { - let newEdgeSettings = edgeSettings.Clone (); - this.mainModel.SetEdgeSettings (newEdgeSettings); - this.Render (); - } - GetCanvas () { return this.canvas; diff --git a/source/website/embed.js b/source/website/embed.js index b94a645..cfddbb5 100644 --- a/source/website/embed.js +++ b/source/website/embed.js @@ -7,6 +7,7 @@ import { HashHandler } from './hashhandler.js'; import { ThreeModelLoaderUI } from './threemodelloaderui.js'; import { Direction } from '../engine/geometry/geometry.js'; import { InputFilesFromUrls } from '../engine/import/importerfiles.js'; +import { EnvironmentSettings } from '../engine/viewer/shadingmodel.js'; export class Embed { @@ -33,10 +34,10 @@ export class Embed let envMapName = 'fishermans_bastion'; let bgIsEnvMap = false; - let environmentSettings = this.hashHandler.GetEnvironmentSettingsFromHash (); - if (environmentSettings !== null) { - envMapName = environmentSettings.environmentMapName; - bgIsEnvMap = environmentSettings.backgroundIsEnvMap; + let environmentSettingsObj = this.hashHandler.GetEnvironmentSettingsFromHash (); + if (environmentSettingsObj !== null) { + envMapName = environmentSettingsObj.environmentMapName; + bgIsEnvMap = environmentSettingsObj.backgroundIsEnvMap; } let envMapPath = 'assets/envmaps/' + envMapName + '/'; let envMapTextures = [ @@ -47,7 +48,8 @@ export class Embed envMapPath + 'posz.jpg', envMapPath + 'negz.jpg' ]; - this.viewer.SetEnvironmentMapSettings (envMapTextures, bgIsEnvMap); + let environmentSettings = new EnvironmentSettings (envMapTextures, bgIsEnvMap); + this.viewer.SetEnvironmentMapSettings (environmentSettings); let cameraMode = this.hashHandler.GetCameraModeFromHash (); if (cameraMode !== null) { diff --git a/source/website/website.js b/source/website/website.js index 0b83125..9801401 100644 --- a/source/website/website.js +++ b/source/website/website.js @@ -27,6 +27,7 @@ import { CreateVerticalSplitter } from './splitter.js'; import { EnumeratePlugins, PluginType } from './pluginregistry.js'; import * as THREE from 'three'; +import { EnvironmentSettings } from '../engine/viewer/shadingmodel.js'; const WebsiteUIState = { @@ -551,7 +552,8 @@ export class Website envMapPath + 'posz.jpg', envMapPath + 'negz.jpg' ]; - this.viewer.SetEnvironmentMapSettings (envMapTextures, this.settings.backgroundIsEnvMap); + let environmentSettings = new EnvironmentSettings (envMapTextures, this.settings.backgroundIsEnvMap); + this.viewer.SetEnvironmentMapSettings (environmentSettings); } SwitchTheme (newThemeId, resetColors)