Browse Source

add @dc-modules/effect

tags/2.0.0
Caven Chen 4 years ago
parent
commit
bc93f9a099

+ 70
- 0
modules/effect/Effect.js View File

@@ -0,0 +1,70 @@
/**
* @Author: Caven
* @Date: 2020-08-14 23:49:14
*/

import BlackAndWhite from './type/BlackAndWhite'
import Bloom from './type/Bloom'
import Brightness from './type/Brightness'
import DepthOfField from './type/DepthOfField'
import LensFlare from './type/LensFlare'
import NightVision from './type/NightVision'
import Silhouette from './type/Silhouette'

class Effect {
constructor() {
this._comps = {
blackAndWhite: new BlackAndWhite(),
bloom: new Bloom(),
brightness: new Brightness(),
depthOfField: new DepthOfField(),
lensFlare: new LensFlare(),
night: new NightVision(),
silhouette: new Silhouette()
}
}

get blackAndWhite() {
return this._comps.blackAndWhite
}

get bloom() {
return this._comps.bloom
}

get brightness() {
return this._comps.brightness
}

get depthOfField() {
return this._comps.depthOfField
}

get lensFlare() {
return this._comps.lensFlare
}

get night() {
return this._comps.night
}

get silhouette() {
return this._comps.silhouette
}

/**
*
* @param viewer
*/
install(viewer) {
Object.keys(this._comps).forEach(key => {
this._comps[key].addTo(viewer)
})
Object.defineProperty(viewer, 'effect', {
value: this,
writable: false
})
}
}

export default Effect

+ 81
- 0
modules/effect/type/BlackAndWhite.js View File

@@ -0,0 +1,81 @@
/**
* @Author: Caven
* @Date: 2020-08-14 23:51:47
*/

import State from '@dc-modules/state/State'

const { Cesium } = DC.Namespace

class BlackAndWhite {
constructor() {
this._viewer = undefined
this._delegate = undefined
this._enable = false
this._gradations = 1
this._selected = []
this.type = 'black_and_white'
this._state = State.INITIALIZED
}

set enable(enable) {
this._enable = enable
if (enable && this._viewer && !this._delegate) {
this._createPostProcessStage()
}
this._delegate && (this._delegate.enabled = enable)
return this
}

get enable() {
return this._enable
}

set gradations(gradations) {
this._gradations = gradations
this._delegate && (this._delegate.uniforms.gradations = gradations)
return this
}

get gradations() {
return this._gradations
}

set selected(selected) {
this._selected = selected
this._delegate && (this._delegate.selected = selected)
return this
}

get selected() {
return this._selected
}

/**
*
* @private
*/
_createPostProcessStage() {
this._delegate = Cesium.PostProcessStageLibrary.createBlackAndWhiteStage()
if (this._delegate) {
this._delegate.uniforms.gradations = this._gradations
this._viewer.scene.postProcessStages.add(this._delegate)
}
}

/**
*
* @param viewer
* @returns {BlackAndWhite}
*/
addTo(viewer) {
if (!viewer) {
return this
}
this._viewer = viewer
this._state = State.ADDED
return this
}
}

export default BlackAndWhite

+ 135
- 0
modules/effect/type/Bloom.js View File

@@ -0,0 +1,135 @@
/**
* @Author: Caven
* @Date: 2020-08-14 23:50:27
*/

import State from '@dc-modules/state/State'

class Bloom {
constructor() {
this._viewer = undefined
this._enable = false
this._contrast = 128
this._brightness = -0.3
this._glowOnly = false
this._delta = 1
this._sigma = 3.8
this._stepSize = 5
this._selected = []
this.type = 'bloom'
this._state = State.INITIALIZED
}

set enable(enable) {
this._enable = enable
if (enable && this._viewer && !this._delegate) {
this._createPostProcessStage()
}
this._delegate && (this._delegate.enabled = enable)
return this
}

get enable() {
return this._enable
}

set contrast(contrast) {
this._contrast = contrast
this._delegate && (this._delegate.uniforms.contrast = contrast)
return this
}

get contrast() {
return this._contrast
}

set brightness(brightness) {
this._brightness = brightness
this._delegate && (this._delegate.uniforms.brightness = brightness)
return this
}

get brightness() {
return this._brightness
}

set glowOnly(glowOnly) {
this._glowOnly = glowOnly
this._delegate && (this._delegate.uniforms.glowOnly = glowOnly)
return this
}

get glowOnly() {
return this._glowOnly
}

set delta(delta) {
this._delta = delta
this._delegate && (this._delegate.uniforms.delta = delta)
return this
}

get delta() {
return this._delta
}

set sigma(sigma) {
this._sigma = sigma
this._delegate && (this._delegate.uniforms.sigma = sigma)
return this
}

get sigma() {
return this._sigma
}

set stepSize(stepSize) {
this._stepSize = stepSize
this._delegate && (this._delegate.uniforms.stepSize = stepSize)
return this
}

get stepSize() {
return this._stepSize
}

set selected(selected) {
this._selected = selected
this._delegate && (this._delegate.selected = selected)
return this
}

get selected() {
return this._selected
}

/**
*
* @private
*/
_createPostProcessStage() {
this._delegate = this._viewer.scene.postProcessStages.bloom
this._delegate.uniforms.contrast = this._contrast
this._delegate.uniforms.brightness = this._brightness
this._delegate.uniforms.glowOnly = this._glowOnly
this._delegate.uniforms.delta = this._delta
this._delegate.uniforms.sigma = this._sigma
this._delegate.uniforms.stepSize = this._stepSize
}

/**
*
* @param viewer
* @returns {Bloom}
*/
addTo(viewer) {
if (!viewer) {
return this
}
this._viewer = viewer
this._state = State.ADDED
return this
}
}

export default Bloom

+ 81
- 0
modules/effect/type/Brightness.js View File

@@ -0,0 +1,81 @@
/**
* @Author: Caven
* @Date: 2020-08-14 23:51:47
*/

import State from '@dc-modules/state/State'

const { Cesium } = DC.Namespace

class Brightness {
constructor() {
this._viewer = undefined
this._delegate = undefined
this._enable = false
this._intensity = 1
this._selected = []
this.type = 'brightness'
this._state = State.INITIALIZED
}

set enable(enable) {
this._enable = enable
if (enable && this._viewer && !this._delegate) {
this._createPostProcessStage()
}
this._delegate && (this._delegate.enabled = enable)
return this
}

get enable() {
return this._enable
}

set intensity(intensity) {
this._intensity = intensity
this._delegate && (this._delegate.uniforms.brightness = intensity)
return this
}

get intensity() {
return this._intensity
}

set selected(selected) {
this._selected = selected
this._delegate && (this._delegate.selected = selected)
return this
}

get selected() {
return this._selected
}

/**
*
* @private
*/
_createPostProcessStage() {
this._delegate = Cesium.PostProcessStageLibrary.createBrightnessStage()
if (this._delegate) {
this._delegate.uniforms.brightness = this._intensity
this._viewer.scene.postProcessStages.add(this._delegate)
}
}

/**
*
* @param viewer
* @returns {Brightness}
*/
addTo(viewer) {
if (!viewer) {
return this
}
this._viewer = viewer
this._state = State.ADDED
return this
}
}

export default Brightness

+ 124
- 0
modules/effect/type/DepthOfField.js View File

@@ -0,0 +1,124 @@
/**
* @Author: Caven
* @Date: 2020-08-14 23:51:47
*/

import State from '@dc-modules/state/State'

const { Cesium } = DC.Namespace

class DepthOfField {
constructor() {
this._viewer = undefined
this._delegate = undefined
this._enable = false
this._focalDistance = 87
this._delta = 1
this._sigma = 3.8
this._stepSize = 2.5
this._selected = []
this.type = 'depth_of_field'
this._state = State.INITIALIZED
}

set enable(enable) {
this._enable = enable
if (
enable &&
this._viewer &&
Cesium.PostProcessStageLibrary.isDepthOfFieldSupported(
this._viewer.scene
) &&
!this._delegate
) {
this._createPostProcessStage()
}
this._delegate && (this._delegate.enabled = enable)
return this
}

get enable() {
return this._enable
}

set focalDistance(focalDistance) {
this._focalDistance = focalDistance
this._delegate && (this._delegate.uniforms.focalDistance = focalDistance)
return this
}

get focalDistance() {
return this._focalDistance
}

set delta(delta) {
this._delta = delta
this._delegate && (this._delegate.uniforms.delta = delta)
return this
}

get delta() {
return this._delta
}

set sigma(sigma) {
this._sigma = sigma
this._delegate && (this._delegate.uniforms.sigma = sigma)
return this
}

get sigma() {
return this._sigma
}

set stepSize(stepSize) {
this._stepSize = stepSize
this._delegate && (this._delegate.uniforms.stepSize = stepSize)
return this
}

get stepSize() {
return this._stepSize
}

set selected(selected) {
this._selected = selected
this._delegate && (this._delegate.selected = selected)
return this
}

get selected() {
return this._selected
}

/**
*
* @private
*/
_createPostProcessStage() {
this._delegate = Cesium.PostProcessStageLibrary.createDepthOfFieldStage()
if (this._delegate) {
this._delegate.uniforms.focalDistance = this._focalDistance
this._delegate.uniforms.delta = this._delta
this._delegate.uniforms.sigma = this._sigma
this._delegate.uniforms.stepSize = this._stepSize
this._viewer.scene.postProcessStages.add(this._delegate)
}
}

/**
*
* @param viewer
* @returns {DepthOfField}
*/
addTo(viewer) {
if (!viewer) {
return this
}
this._viewer = viewer
this._state = State.ADDED
return this
}
}

export default DepthOfField

+ 117
- 0
modules/effect/type/LensFlare.js View File

@@ -0,0 +1,117 @@
/**
* @Author: Caven
* @Date: 2020-08-14 23:51:47
*/

import State from '@dc-modules/state/State'

const { Cesium } = DC.Namespace

class LensFlare {
constructor() {
this._viewer = undefined
this._delegate = undefined
this._enable = false
this._intensity = 6
this._distortion = 61
this._dirtAmount = 0.4
this._haloWidth = 0.4
this._selected = []
this.type = 'lens_flare'
this._state = State.INITIALIZED
}

set enable(enable) {
this._enable = enable
if (enable && this._viewer && !this._delegate) {
this._createPostProcessStage()
}
this._delegate && (this._delegate.enabled = enable)
return this
}

get enable() {
return this._enable
}

set intensity(intensity) {
this._intensity = intensity
this._delegate && (this._delegate.uniforms.intensity = intensity)
return this
}

get intensity() {
return this._intensity
}

set distortion(distortion) {
this._distortion = distortion
this._delegate && (this._delegate.uniforms.distortion = distortion)
return this
}

get distortion() {
return this._distortion
}

set dirtAmount(dirtAmount) {
this._dirtAmount = dirtAmount
this._delegate && (this._delegate.uniforms.dirtAmount = dirtAmount)
return this
}

get dirtAmount() {
return this._dirtAmount
}

set haloWidth(haloWidth) {
this._haloWidth = haloWidth
this._delegate && (this._delegate.uniforms.haloWidth = haloWidth)
return this
}

get haloWidth() {
return this._haloWidth
}

set selected(selected) {
this._selected = selected
this._delegate && (this._delegate.selected = selected)
return this
}

get selected() {
return this._selected
}

/**
*
* @private
*/
_createPostProcessStage() {
this._delegate = Cesium.PostProcessStageLibrary.createLensFlareStage()
if (this._delegate) {
this._delegate.uniforms.intensity = this._intensity
this._delegate.uniforms.distortion = this._distortion
this._delegate.uniforms.dirtAmount = this._dirtAmount
this._delegate.uniforms.haloWidth = this._haloWidth
this._viewer.scene.postProcessStages.add(this._delegate)
}
}

/**
*
* @param viewer
* @returns {LensFlare}
*/
addTo(viewer) {
if (!viewer) {
return this
}
this._viewer = viewer
this._state = State.ADDED
return this
}
}

export default LensFlare

+ 67
- 0
modules/effect/type/NightVision.js View File

@@ -0,0 +1,67 @@
/**
* @Author: Caven
* @Date: 2020-08-14 23:10:14
*/

import State from '@dc-modules/state/State'

const { Cesium } = DC.Namespace

class NightVision {
constructor() {
this._enable = false
this._selected = []
this.type = 'night'
this._state = State.INITIALIZED
}

set enable(enable) {
this._enable = enable
if (enable && this._viewer && !this._delegate) {
this._createPostProcessStage()
}
this._delegate && (this._delegate.enabled = enable)
return this
}

get enable() {
return this._enable
}

set selected(selected) {
this._selected = selected
this._delegate && (this._delegate.selected = selected)
return this
}

get selected() {
return this._selected
}

/**
*
* @private
*/
_createPostProcessStage() {
this._delegate = Cesium.PostProcessStageLibrary.createNightVisionStage()
if (this._delegate) {
this._viewer.scene.postProcessStages.add(this._delegate)
}
}

/**
*
* @param viewer
* @returns {NightVision}
*/
addTo(viewer) {
if (!viewer) {
return this
}
this._viewer = viewer
this._state = State.ADDED
return this
}
}

export default NightVision

+ 100
- 0
modules/effect/type/Silhouette.js View File

@@ -0,0 +1,100 @@
/**
* @Author: Caven
* @Date: 2020-08-14 23:51:47
*/

import State from '@dc-modules/state/State'

const { Cesium } = DC.Namespace

class Silhouette {
constructor() {
this._viewer = undefined
this._delegate = undefined
this._enable = false
this._color = Cesium.Color.GREEN
this._length = 0.5
this._selected = []
this.type = 'silhouette'
this._state = State.INITIALIZED
}

set enable(enable) {
this._enable = enable
if (
enable &&
this._viewer &&
Cesium.PostProcessStageLibrary.isSilhouetteSupported(
this._viewer.scene
) &&
!this._delegate
) {
this._createPostProcessStage()
}
this._delegate && (this._delegate.enabled = enable)
return this
}

get enable() {
return this._enable
}

set color(color) {
this._color = color
this._delegate && (this._delegate.uniforms.color = color)
return this
}

get color() {
return this._color
}

set length(length) {
this._length = length
this._delegate && (this._delegate.uniforms.length = length)
return this
}

get length() {
return this._length
}

set selected(selected) {
this._selected = selected
this._delegate && (this._delegate.selected = selected)
return this
}

get selected() {
return this._selected
}

/**
*
* @private
*/
_createPostProcessStage() {
this._delegate = Cesium.PostProcessStageLibrary.createSilhouetteStage()
if (this._delegate) {
this._delegate.uniforms.color = this._color
this._delegate.uniforms.length = this._length
this._viewer.scene.postProcessStages.add(this._delegate)
}
}

/**
*
* @param viewer
* @returns {Silhouette}
*/
addTo(viewer) {
if (!viewer) {
return this
}
this._viewer = viewer
this._state = State.ADDED
return this
}
}

export default Silhouette

+ 0
- 0
modules/effect/type/Sun.js View File


Loading…
Cancel
Save