@anov/3d-ability 0.0.14 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/camera/index.d.ts +1 -1
- package/dist/camera/index.js.map +1 -1
- package/dist/postEffects/bloomSelect.js +21 -15
- package/dist/postEffects/bloomSelect.js.map +1 -1
- package/dist/postEffects/index.js +4 -1
- package/dist/postEffects/index.js.map +1 -1
- package/dist/weather/index.d.ts +3 -2
- package/dist/weather/index.js +59 -40
- package/dist/weather/index.js.map +1 -1
- package/dist/weather/objects/CloudMesh.d.ts +2 -3
- package/dist/weather/objects/CloudMesh.js +22 -7
- package/dist/weather/objects/CloudMesh.js.map +1 -1
- package/dist/weather/objects/RainMesh.d.ts +21 -0
- package/dist/weather/objects/RainMesh.js +146 -0
- package/dist/weather/objects/RainMesh.js.map +1 -0
- package/dist/weather/objects/SkyMesh.d.ts +2 -3
- package/dist/weather/objects/SkyMesh.js +23 -7
- package/dist/weather/objects/SkyMesh.js.map +1 -1
- package/dist/weather/shaders/RainPlane.d.ts +28 -0
- package/dist/weather/shaders/RainPlane.js +29 -0
- package/dist/weather/shaders/RainPlane.js.map +1 -0
- package/dist/weather/shaders/cloud.js +1 -1
- package/dist/weather/shaders/cloud.js.map +1 -1
- package/dist/weather/utils/constant.d.ts +9 -0
- package/dist/weather/utils/constant.js.map +1 -1
- package/package.json +5 -5
package/dist/camera/index.d.ts
CHANGED
package/dist/camera/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Box3","MathUtils","TWEEN","Vector3","Camera","camera","controls","sceneControl","isTrigger","handleChanged","currentPos","pitch","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","length","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","position","clone","sub","target","normalize","lastPosition","multiplyScalar","add","lastLookat","caclTargetByPitch","subVectors","upVector","localPitchAxis","crossVectors","applyAxisAngle","degToRad","distance","distanceTo","newTarget","prevTarget","prevPosition","lastTarget","params","Promise","res","duration","moveOptions","onUpdate","lookat","onComplate","toArray","userInput","Array","isArray","caclCurrentPos","moveCameraTo","caclSingleCoordinate","fromArray","_","x","y","z","options","currentPoition","currentPositionInterpolation","copy","requestAnimationFrame","renderer","render","scene","tween","stop","Tween","t","p","to","rotation","onStart","enabled","isTransitionPeriod","easing","Easing","Quadratic","InOut","rotationParent","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../src/camera/index.ts"],"sourcesContent":["import type { OrbitControls, PerspectiveCamera, SceneControl } from '@anov/3d-core'\nimport { Box3, MathUtils, TWEEN, Vector3 } from '@anov/3d-core'\n\ntype vector3Array = [number, number, number]\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n isTrigger?: boolean\n}\n\nclass Camera {\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private sceneControl: SceneControl\n private isTransitionPeriod = false\n private isTrigger = true\n private tween: any\n\n constructor(camera: PerspectiveCamera, controls: OrbitControls, sceneControl: SceneControl) {\n this.isTrigger = true\n this.camera = sceneControl.camera!\n this.controls = sceneControl.controls!\n this.sceneControl = sceneControl\n this.handleChanged()\n }\n\n /**\n * caclCurrentPos\n * @param currentPos\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], pitch: number) {\n const box = new Box3()\n\n box.setFromPoints(currentPos.map(item => new Vector3(item[0], item[1], item[2])))\n\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n const halfDiagonal = size.length() * 0.5\n\n const maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180)\n const cameraToCenterDistance = maxDistance\n const directionVector = (this.camera.position.clone()).sub(this.controls.target).normalize() // 相机指向物体中心的向量\n\n const lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center)\n const lastLookat = this.caclTargetByPitch(pitch, center, lastPosition)\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclTargetByPitch\n * @param pitch\n * @param target\n * @param position\n * @returns\n */\n private caclTargetByPitch(pitch: number, target: Vector3, position: Vector3) {\n const directionVector = new Vector3().subVectors(target, position)\n const upVector = new Vector3(0, 1, 0)\n const localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize()\n\n directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch))\n\n const distance = position.distanceTo(target)\n const newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance))\n\n return newTarget\n }\n\n /**\n * caclSingleCoordinate\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3) {\n const directionVector = lastTarget.clone().sub(prevTarget).normalize()\n return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition)\n }\n\n /**\n * handle camera changed\n */\n private handleChanged() {\n // this.controls.addEventListener('change', () => {\n // // if (this.isTransitionPeriod)\n // // this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n // })\n }\n\n /**\n * focus On Position\n * @param params\n */\n focus(params: { target: vector3Array | vector3Array[]; pitch?: number; duration?: number; isTrigger?: boolean }) {\n return new Promise((res) => {\n const { target: position, pitch, duration } = params\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n isTrigger: params.isTrigger ?? true,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, 0)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos))\n const lastLookat = this.caclTargetByPitch(0, new Vector3().fromArray(currentPos), lastPosition)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera\n * @param params\n */\n set(params: { position: vector3Array; target: vector3Array; isTrigger?: boolean; duration?: number }) {\n return new Promise((res, _) => {\n this.moveCameraTo(\n new Vector3(params.position[0], params.position[1], params.position[2]),\n new Vector3(params.target[0], params.target[1], params.target[2]),\n 0,\n {\n isTrigger: params.isTrigger ?? true,\n duration: (params.duration && params.duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n })\n },\n })\n })\n }\n\n /**\n * get Camera info\n * @returns\n */\n get() {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n }\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param options\n */\n private moveCameraTo(position: Vector3, target: Vector3, pitch = 0, options?: ChangeCameraPresetOptions) {\n const currentPoition = this.camera.position.clone()\n const currentPositionInterpolation = new Vector3()\n\n if (options?.duration === 0) {\n this.isTrigger = !options.isTrigger\n this.camera.position.copy(position)\n this.controls.target.copy(target)\n\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n })\n\n return\n }\n\n if (this.tween)\n this.tween.stop()\n\n this.tween = new TWEEN.Tween({ t: 0, lookat: this.controls.target.clone(), p: 0 }).to({ t: 1, lookat: target, p: (-this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)) }, options?.duration || 1000)\n .onStart(() => {\n options?.onStart && options.onStart()\n this.controls.enabled = false\n this.isTransitionPeriod = true\n })\n .easing(TWEEN.Easing.Quadratic.InOut)\n .onUpdate(({ t, lookat, p }) => {\n this.controls.target.copy(lookat)\n\n if (pitch)\n // @ts-ignore\n this.camera.rotationParent.x = p\n\n const currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t)\n this.camera.position.copy(currentPosition)\n options?.onUpdate && options.onUpdate({ position: currentPosition, lookat })\n })\n .onComplete(() => {\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n this.controls.enabled = true\n\n setTimeout(() => {\n this.isTransitionPeriod = false\n })\n })\n .start()\n }\n}\n\nexport default Camera"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Box3","MathUtils","TWEEN","Vector3","Camera","camera","controls","sceneControl","isTrigger","handleChanged","currentPos","pitch","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","length","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","position","clone","sub","target","normalize","lastPosition","multiplyScalar","add","lastLookat","caclTargetByPitch","subVectors","upVector","localPitchAxis","crossVectors","applyAxisAngle","degToRad","distance","distanceTo","newTarget","prevTarget","prevPosition","lastTarget","params","Promise","res","duration","moveOptions","onUpdate","lookat","onComplate","toArray","userInput","Array","isArray","caclCurrentPos","moveCameraTo","caclSingleCoordinate","fromArray","_","x","y","z","options","currentPoition","currentPositionInterpolation","copy","requestAnimationFrame","renderer","render","scene","tween","stop","Tween","t","p","to","rotation","onStart","enabled","isTransitionPeriod","easing","Easing","Quadratic","InOut","rotationParent","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../src/camera/index.ts"],"sourcesContent":["import type { OrbitControls, PerspectiveCamera, SceneControl } from '@anov/3d-core'\nimport { Box3, MathUtils, TWEEN, Vector3 } from '@anov/3d-core'\n\ntype vector3Array = number[]\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n isTrigger?: boolean\n}\n\nclass Camera {\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private sceneControl: SceneControl\n private isTransitionPeriod = false\n private isTrigger = true\n private tween: any\n\n constructor(camera: PerspectiveCamera, controls: OrbitControls, sceneControl: SceneControl) {\n this.isTrigger = true\n this.camera = sceneControl.camera!\n this.controls = sceneControl.controls!\n this.sceneControl = sceneControl\n this.handleChanged()\n }\n\n /**\n * caclCurrentPos\n * @param currentPos\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], pitch: number) {\n const box = new Box3()\n\n box.setFromPoints(currentPos.map(item => new Vector3(item[0], item[1], item[2])))\n\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n const halfDiagonal = size.length() * 0.5\n\n const maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180)\n const cameraToCenterDistance = maxDistance\n const directionVector = (this.camera.position.clone()).sub(this.controls.target).normalize() // 相机指向物体中心的向量\n\n const lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center)\n const lastLookat = this.caclTargetByPitch(pitch, center, lastPosition)\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclTargetByPitch\n * @param pitch\n * @param target\n * @param position\n * @returns\n */\n private caclTargetByPitch(pitch: number, target: Vector3, position: Vector3) {\n const directionVector = new Vector3().subVectors(target, position)\n const upVector = new Vector3(0, 1, 0)\n const localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize()\n\n directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch))\n\n const distance = position.distanceTo(target)\n const newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance))\n\n return newTarget\n }\n\n /**\n * caclSingleCoordinate\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3) {\n const directionVector = lastTarget.clone().sub(prevTarget).normalize()\n return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition)\n }\n\n /**\n * handle camera changed\n */\n private handleChanged() {\n // this.controls.addEventListener('change', () => {\n // // if (this.isTransitionPeriod)\n // // this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n // })\n }\n\n /**\n * focus On Position\n * @param params\n */\n focus(params: { target: vector3Array | vector3Array[]; pitch?: number; duration?: number; isTrigger?: boolean }) {\n return new Promise((res) => {\n const { target: position, pitch, duration } = params\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n isTrigger: params.isTrigger ?? true,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, 0)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos))\n const lastLookat = this.caclTargetByPitch(0, new Vector3().fromArray(currentPos), lastPosition)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera\n * @param params\n */\n set(params: { position: vector3Array; target: vector3Array; isTrigger?: boolean; duration?: number }) {\n return new Promise((res, _) => {\n this.moveCameraTo(\n new Vector3(params.position[0], params.position[1], params.position[2]),\n new Vector3(params.target[0], params.target[1], params.target[2]),\n 0,\n {\n isTrigger: params.isTrigger ?? true,\n duration: (params.duration && params.duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n this.isTrigger = params.isTrigger ?? true\n },\n onComplate: () => {\n this.isTrigger = false\n\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n })\n },\n })\n })\n }\n\n /**\n * get Camera info\n * @returns\n */\n get() {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n }\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param options\n */\n private moveCameraTo(position: Vector3, target: Vector3, pitch = 0, options?: ChangeCameraPresetOptions) {\n const currentPoition = this.camera.position.clone()\n const currentPositionInterpolation = new Vector3()\n\n if (options?.duration === 0) {\n this.isTrigger = !options.isTrigger\n this.camera.position.copy(position)\n this.controls.target.copy(target)\n\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n })\n\n return\n }\n\n if (this.tween)\n this.tween.stop()\n\n this.tween = new TWEEN.Tween({ t: 0, lookat: this.controls.target.clone(), p: 0 }).to({ t: 1, lookat: target, p: (-this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)) }, options?.duration || 1000)\n .onStart(() => {\n options?.onStart && options.onStart()\n this.controls.enabled = false\n this.isTransitionPeriod = true\n })\n .easing(TWEEN.Easing.Quadratic.InOut)\n .onUpdate(({ t, lookat, p }) => {\n this.controls.target.copy(lookat)\n\n if (pitch)\n // @ts-ignore\n this.camera.rotationParent.x = p\n\n const currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t)\n this.camera.position.copy(currentPosition)\n options?.onUpdate && options.onUpdate({ position: currentPosition, lookat })\n })\n .onComplete(() => {\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n this.controls.enabled = true\n\n setTimeout(() => {\n this.isTransitionPeriod = false\n })\n })\n .start()\n }\n}\n\nexport default Camera"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Color, Layers, MeshBasicMaterial, ShaderMaterial, SpriteMaterial, Vector2, lib, use } from '@anov/3d-core';
|
|
1
|
+
import { Color, Layers, MeshBasicMaterial, ShaderMaterial, SpriteMaterial, Vector2, lib, use, utils } from '@anov/3d-core';
|
|
2
2
|
import ColorifyShader from "./shader/colorify";
|
|
3
3
|
var EffectComposer = lib.EffectComposer,
|
|
4
4
|
RenderPass = lib.RenderPass,
|
|
@@ -7,6 +7,7 @@ var EffectComposer = lib.EffectComposer,
|
|
|
7
7
|
GammaCorrectionShader = lib.GammaCorrectionShader,
|
|
8
8
|
CopyShader = lib.CopyShader,
|
|
9
9
|
FXAAShader = lib.FXAAShader;
|
|
10
|
+
var storeManagement = utils.storeManagement;
|
|
10
11
|
var createBloomSelectedTool = function createBloomSelectedTool(highParams) {
|
|
11
12
|
var _use$useScene = use.useScene(),
|
|
12
13
|
scene = _use$useScene.scene,
|
|
@@ -19,7 +20,11 @@ var createBloomSelectedTool = function createBloomSelectedTool(highParams) {
|
|
|
19
20
|
radius = _ref$radius === void 0 ? 0.4 : _ref$radius,
|
|
20
21
|
_ref$threshold = _ref.threshold,
|
|
21
22
|
threshold = _ref$threshold === void 0 ? 0.85 : _ref$threshold;
|
|
23
|
+
var composer = storeManagement.get('composer');
|
|
22
24
|
if (!scene || !camera || !renderer) throw new Error('scene or camera is not defined,');
|
|
25
|
+
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
composer.isNeedRender = false;
|
|
23
28
|
var BLOOM_SCENE = 1;
|
|
24
29
|
var bloomLayer = new Layers();
|
|
25
30
|
bloomLayer.set(BLOOM_SCENE);
|
|
@@ -51,21 +56,23 @@ var createBloomSelectedTool = function createBloomSelectedTool(highParams) {
|
|
|
51
56
|
defines: {}
|
|
52
57
|
}), 'baseTexture');
|
|
53
58
|
mixPass.needsSwap = true;
|
|
54
|
-
var finalComposer = new EffectComposer(renderer);
|
|
55
59
|
var gammaCorrectionShader = new ShaderPass(GammaCorrectionShader);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// finalComposer.addPass(effectFXAA)
|
|
62
|
-
|
|
60
|
+
composer.addPass(renderScene);
|
|
61
|
+
composer.addPass(mixPass);
|
|
62
|
+
composer.addPass(gammaCorrectionShader);
|
|
63
|
+
composer.addPass(effectCopy);
|
|
64
|
+
composer.addPass(colorify);
|
|
63
65
|
var materials = {};
|
|
64
66
|
var darkMaterial = new MeshBasicMaterial({
|
|
65
67
|
color: 'black'
|
|
66
68
|
});
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* 性能消耗太大了
|
|
72
|
+
*/
|
|
67
73
|
var cleanBloomBefore = use.useframeAfter(function () {
|
|
68
74
|
scene.traverse(function (obj) {
|
|
75
|
+
if (!obj.visible) return;
|
|
69
76
|
if (obj.type === 'SpritePoi') {
|
|
70
77
|
if (obj.material && obj.material.map) {
|
|
71
78
|
obj.material = new SpriteMaterial({
|
|
@@ -87,18 +94,14 @@ var createBloomSelectedTool = function createBloomSelectedTool(highParams) {
|
|
|
87
94
|
});
|
|
88
95
|
bloomComposer.render();
|
|
89
96
|
scene.traverse(function (obj) {
|
|
97
|
+
if (!obj.visible) return;
|
|
90
98
|
if (materials[obj.uuid]) {
|
|
91
99
|
obj.material = materials[obj.uuid];
|
|
92
100
|
delete materials[obj.uuid];
|
|
93
101
|
}
|
|
94
102
|
});
|
|
95
|
-
|
|
103
|
+
composer.render();
|
|
96
104
|
});
|
|
97
|
-
|
|
98
|
-
// const cleanBloomAfter = use.useComposerFrame(() => {
|
|
99
|
-
|
|
100
|
-
// })
|
|
101
|
-
|
|
102
105
|
var bloomSelected = function bloomSelected(object3dArray) {
|
|
103
106
|
object3dArray.forEach(function (object3d) {
|
|
104
107
|
if (object3d.type === 'Mesh') {
|
|
@@ -114,6 +117,9 @@ var createBloomSelectedTool = function createBloomSelectedTool(highParams) {
|
|
|
114
117
|
bloomSelected: bloomSelected,
|
|
115
118
|
clean: function clean() {
|
|
116
119
|
cleanBloomBefore();
|
|
120
|
+
|
|
121
|
+
// @ts-ignore
|
|
122
|
+
composer.isNeedRender = true;
|
|
117
123
|
}
|
|
118
124
|
};
|
|
119
125
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Color","Layers","MeshBasicMaterial","ShaderMaterial","SpriteMaterial","Vector2","lib","use","ColorifyShader","EffectComposer","RenderPass","UnrealBloomPass","ShaderPass","GammaCorrectionShader","CopyShader","FXAAShader","createBloomSelectedTool","highParams","useScene","scene","camera","renderer","strength","radius","threshold","Error","BLOOM_SCENE","bloomLayer","set","renderScene","bloomPass","window","innerWidth","innerHeight","bloomComposer","renderToScreen","addPass","effectCopy","colorify","enabled","uniforms","color","value","alpha","effectFXAA","resolution","mixPass","baseTexture","bloomTexture","renderTarget2","texture","vertexShader","fragmentShader","defines","needsSwap","
|
|
1
|
+
{"version":3,"names":["Color","Layers","MeshBasicMaterial","ShaderMaterial","SpriteMaterial","Vector2","lib","use","utils","ColorifyShader","EffectComposer","RenderPass","UnrealBloomPass","ShaderPass","GammaCorrectionShader","CopyShader","FXAAShader","storeManagement","createBloomSelectedTool","highParams","useScene","scene","camera","renderer","strength","radius","threshold","composer","get","Error","isNeedRender","BLOOM_SCENE","bloomLayer","set","renderScene","bloomPass","window","innerWidth","innerHeight","bloomComposer","renderToScreen","addPass","effectCopy","colorify","enabled","uniforms","color","value","alpha","effectFXAA","resolution","mixPass","baseTexture","bloomTexture","renderTarget2","texture","vertexShader","fragmentShader","defines","needsSwap","gammaCorrectionShader","materials","darkMaterial","cleanBloomBefore","useframeAfter","traverse","obj","visible","type","material","map","transparent","opacity","depthTest","uuid","isMesh","test","layers","render","bloomSelected","object3dArray","forEach","object3d","enable","child","clean"],"sources":["../../src/postEffects/bloomSelect.ts"],"sourcesContent":["import type { Object3D } from '@anov/3d-core'\nimport { Color, Layers, MeshBasicMaterial, ShaderMaterial, SpriteMaterial, Vector2, lib, use, utils } from '@anov/3d-core'\nimport ColorifyShader from './shader/colorify'\n\nconst { EffectComposer, RenderPass, UnrealBloomPass, ShaderPass, GammaCorrectionShader, CopyShader, FXAAShader } = lib\nconst { storeManagement } = utils\n\ntype HighParams = {\n strength?: number\n radius?: number\n threshold?: number\n}\n\nconst createBloomSelectedTool = (highParams?: HighParams) => {\n const { scene, camera, renderer } = use.useScene()\n const { strength = 1.5, radius = 0.4, threshold = 0.85 } = highParams || {}\n\n const composer = storeManagement.get('composer') as lib.EffectComposer\n\n if (!scene || !camera || !renderer)\n throw new Error('scene or camera is not defined,')\n\n // @ts-ignore\n composer.isNeedRender = false\n\n const BLOOM_SCENE = 1\n const bloomLayer = new Layers()\n\n bloomLayer.set(BLOOM_SCENE)\n\n const renderScene = new RenderPass(scene, camera)\n const bloomPass = new UnrealBloomPass(new Vector2(window.innerWidth, window.innerHeight), strength, radius, threshold)\n\n const bloomComposer = new EffectComposer(renderer)\n\n bloomComposer.renderToScreen = false\n bloomComposer.addPass(renderScene)\n bloomComposer.addPass(bloomPass)\n\n const effectCopy = new ShaderPass(CopyShader)\n effectCopy.renderToScreen = true\n\n const colorify = new ShaderPass(ColorifyShader)\n colorify.enabled = true\n\n colorify.uniforms.color.value = new Color('#000')\n colorify.uniforms.alpha.value = 0.2\n\n const effectFXAA = new ShaderPass(FXAAShader)\n effectFXAA.uniforms.resolution.value.set(1 / window.innerWidth, 1 / window.innerHeight)\n\n const mixPass = new ShaderPass(\n new ShaderMaterial({\n uniforms: {\n baseTexture: { value: null },\n bloomTexture: { value: bloomComposer.renderTarget2.texture },\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}\n `,\n fragmentShader: `\n uniform sampler2D baseTexture;\n uniform sampler2D bloomTexture;\n varying vec2 vUv;\n\n void main() {\n gl_FragColor = ( texture2D( baseTexture, vUv ) + vec4( 1.0 ) * texture2D( bloomTexture, vUv ) );\n }\n `,\n defines: {},\n }), 'baseTexture',\n )\n mixPass.needsSwap = true\n\n const gammaCorrectionShader = new ShaderPass(GammaCorrectionShader)\n\n composer.addPass(renderScene)\n composer.addPass(mixPass)\n composer.addPass(gammaCorrectionShader)\n composer.addPass(effectCopy)\n composer.addPass(colorify)\n\n const materials = {} as any\n const darkMaterial = new MeshBasicMaterial({ color: 'black' })\n\n /**\n * 性能消耗太大了\n */\n const cleanBloomBefore = use.useframeAfter(() => {\n scene.traverse((obj: any) => {\n if (!obj.visible)\n return\n if (obj.type === 'SpritePoi') {\n if (obj.material && obj.material.map) {\n obj.material = new SpriteMaterial({ map: obj.material.map, transparent: true, opacity: obj.material.opacity, depthTest: obj.material.depthTest })\n materials[obj.uuid] = obj.material\n obj.material = new SpriteMaterial({ color: 'black' })\n }\n }\n\n if (obj.isMesh && bloomLayer.test(obj.layers) === false) {\n materials[obj.uuid] = obj.material\n obj.material = darkMaterial\n }\n })\n\n bloomComposer.render()\n\n scene.traverse((obj: any) => {\n if (!obj.visible)\n return\n\n if (materials[obj.uuid]) {\n obj.material = materials[obj.uuid]\n delete materials[obj.uuid]\n }\n })\n\n composer.render()\n })\n\n const bloomSelected = (object3dArray: Object3D[]) => {\n object3dArray.forEach((object3d) => {\n if (object3d.type === 'Mesh') {\n object3d.layers.enable(BLOOM_SCENE)\n }\n\n else if (object3d.type === 'Group') {\n object3d.traverse((child) => {\n if (child.type === 'Mesh')\n child.layers.enable(BLOOM_SCENE)\n })\n }\n })\n }\n\n return {\n bloomSelected,\n clean: () => {\n cleanBloomBefore()\n\n // @ts-ignore\n composer.isNeedRender = true\n },\n }\n}\n\nexport default createBloomSelectedTool"],"mappings":"AACA,SAASA,KAAK,EAAEC,MAAM,EAAEC,iBAAiB,EAAEC,cAAc,EAAEC,cAAc,EAAEC,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAEC,KAAK,QAAQ,eAAe;AAC1H,OAAOC,cAAc;AAErB,IAAQC,cAAc,GAA6FJ,GAAG,CAA9GI,cAAc;EAAEC,UAAU,GAAiFL,GAAG,CAA9FK,UAAU;EAAEC,eAAe,GAAgEN,GAAG,CAAlFM,eAAe;EAAEC,UAAU,GAAoDP,GAAG,CAAjEO,UAAU;EAAEC,qBAAqB,GAA6BR,GAAG,CAArDQ,qBAAqB;EAAEC,UAAU,GAAiBT,GAAG,CAA9BS,UAAU;EAAEC,UAAU,GAAKV,GAAG,CAAlBU,UAAU;AAC9G,IAAQC,eAAe,GAAKT,KAAK,CAAzBS,eAAe;AAQvB,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuB,CAAIC,UAAuB,EAAK;EAC3D,oBAAoCZ,GAAG,CAACa,QAAQ,EAAE;IAA1CC,KAAK,iBAALA,KAAK;IAAEC,MAAM,iBAANA,MAAM;IAAEC,QAAQ,iBAARA,QAAQ;EAC/B,WAA2DJ,UAAU,IAAI,CAAC,CAAC;IAAA,qBAAnEK,QAAQ;IAARA,QAAQ,8BAAG,GAAG;IAAA,mBAAEC,MAAM;IAANA,MAAM,4BAAG,GAAG;IAAA,sBAAEC,SAAS;IAATA,SAAS,+BAAG,IAAI;EAEtD,IAAMC,QAAQ,GAAGV,eAAe,CAACW,GAAG,CAAC,UAAU,CAAuB;EAEtE,IAAI,CAACP,KAAK,IAAI,CAACC,MAAM,IAAI,CAACC,QAAQ,EAChC,MAAM,IAAIM,KAAK,CAAC,iCAAiC,CAAC;;EAEpD;EACAF,QAAQ,CAACG,YAAY,GAAG,KAAK;EAE7B,IAAMC,WAAW,GAAG,CAAC;EACrB,IAAMC,UAAU,GAAG,IAAI/B,MAAM,EAAE;EAE/B+B,UAAU,CAACC,GAAG,CAACF,WAAW,CAAC;EAE3B,IAAMG,WAAW,GAAG,IAAIvB,UAAU,CAACU,KAAK,EAAEC,MAAM,CAAC;EACjD,IAAMa,SAAS,GAAG,IAAIvB,eAAe,CAAC,IAAIP,OAAO,CAAC+B,MAAM,CAACC,UAAU,EAAED,MAAM,CAACE,WAAW,CAAC,EAAEd,QAAQ,EAAEC,MAAM,EAAEC,SAAS,CAAC;EAEtH,IAAMa,aAAa,GAAG,IAAI7B,cAAc,CAACa,QAAQ,CAAC;EAElDgB,aAAa,CAACC,cAAc,GAAG,KAAK;EACpCD,aAAa,CAACE,OAAO,CAACP,WAAW,CAAC;EAClCK,aAAa,CAACE,OAAO,CAACN,SAAS,CAAC;EAEhC,IAAMO,UAAU,GAAG,IAAI7B,UAAU,CAACE,UAAU,CAAC;EAC7C2B,UAAU,CAACF,cAAc,GAAG,IAAI;EAEhC,IAAMG,QAAQ,GAAG,IAAI9B,UAAU,CAACJ,cAAc,CAAC;EAC/CkC,QAAQ,CAACC,OAAO,GAAG,IAAI;EAEvBD,QAAQ,CAACE,QAAQ,CAACC,KAAK,CAACC,KAAK,GAAG,IAAI/C,KAAK,CAAC,MAAM,CAAC;EACjD2C,QAAQ,CAACE,QAAQ,CAACG,KAAK,CAACD,KAAK,GAAG,GAAG;EAEnC,IAAME,UAAU,GAAG,IAAIpC,UAAU,CAACG,UAAU,CAAC;EAC7CiC,UAAU,CAACJ,QAAQ,CAACK,UAAU,CAACH,KAAK,CAACd,GAAG,CAAC,CAAC,GAAGG,MAAM,CAACC,UAAU,EAAE,CAAC,GAAGD,MAAM,CAACE,WAAW,CAAC;EAEvF,IAAMa,OAAO,GAAG,IAAItC,UAAU,CAC5B,IAAIV,cAAc,CAAC;IACjB0C,QAAQ,EAAE;MACRO,WAAW,EAAE;QAAEL,KAAK,EAAE;MAAK,CAAC;MAC5BM,YAAY,EAAE;QAAEN,KAAK,EAAER,aAAa,CAACe,aAAa,CAACC;MAAQ;IAC7D,CAAC;IACDC,YAAY,6JAMb;IACCC,cAAc,gPAQf;IACCC,OAAO,EAAE,CAAC;EACZ,CAAC,CAAC,EAAE,aAAa,CAClB;EACDP,OAAO,CAACQ,SAAS,GAAG,IAAI;EAExB,IAAMC,qBAAqB,GAAG,IAAI/C,UAAU,CAACC,qBAAqB,CAAC;EAEnEa,QAAQ,CAACc,OAAO,CAACP,WAAW,CAAC;EAC7BP,QAAQ,CAACc,OAAO,CAACU,OAAO,CAAC;EACzBxB,QAAQ,CAACc,OAAO,CAACmB,qBAAqB,CAAC;EACvCjC,QAAQ,CAACc,OAAO,CAACC,UAAU,CAAC;EAC5Bf,QAAQ,CAACc,OAAO,CAACE,QAAQ,CAAC;EAE1B,IAAMkB,SAAS,GAAG,CAAC,CAAQ;EAC3B,IAAMC,YAAY,GAAG,IAAI5D,iBAAiB,CAAC;IAAE4C,KAAK,EAAE;EAAQ,CAAC,CAAC;;EAE9D;AACF;AACA;EACE,IAAMiB,gBAAgB,GAAGxD,GAAG,CAACyD,aAAa,CAAC,YAAM;IAC/C3C,KAAK,CAAC4C,QAAQ,CAAC,UAACC,GAAQ,EAAK;MAC3B,IAAI,CAACA,GAAG,CAACC,OAAO,EACd;MACF,IAAID,GAAG,CAACE,IAAI,KAAK,WAAW,EAAE;QAC5B,IAAIF,GAAG,CAACG,QAAQ,IAAIH,GAAG,CAACG,QAAQ,CAACC,GAAG,EAAE;UACpCJ,GAAG,CAACG,QAAQ,GAAG,IAAIjE,cAAc,CAAC;YAAEkE,GAAG,EAAEJ,GAAG,CAACG,QAAQ,CAACC,GAAG;YAAEC,WAAW,EAAE,IAAI;YAAEC,OAAO,EAAEN,GAAG,CAACG,QAAQ,CAACG,OAAO;YAAEC,SAAS,EAAEP,GAAG,CAACG,QAAQ,CAACI;UAAU,CAAC,CAAC;UACjJZ,SAAS,CAACK,GAAG,CAACQ,IAAI,CAAC,GAAGR,GAAG,CAACG,QAAQ;UAClCH,GAAG,CAACG,QAAQ,GAAG,IAAIjE,cAAc,CAAC;YAAE0C,KAAK,EAAE;UAAQ,CAAC,CAAC;QACvD;MACF;MAEA,IAAIoB,GAAG,CAACS,MAAM,IAAI3C,UAAU,CAAC4C,IAAI,CAACV,GAAG,CAACW,MAAM,CAAC,KAAK,KAAK,EAAE;QACvDhB,SAAS,CAACK,GAAG,CAACQ,IAAI,CAAC,GAAGR,GAAG,CAACG,QAAQ;QAClCH,GAAG,CAACG,QAAQ,GAAGP,YAAY;MAC7B;IACF,CAAC,CAAC;IAEFvB,aAAa,CAACuC,MAAM,EAAE;IAEtBzD,KAAK,CAAC4C,QAAQ,CAAC,UAACC,GAAQ,EAAK;MAC3B,IAAI,CAACA,GAAG,CAACC,OAAO,EACd;MAEF,IAAIN,SAAS,CAACK,GAAG,CAACQ,IAAI,CAAC,EAAE;QACvBR,GAAG,CAACG,QAAQ,GAAGR,SAAS,CAACK,GAAG,CAACQ,IAAI,CAAC;QAClC,OAAOb,SAAS,CAACK,GAAG,CAACQ,IAAI,CAAC;MAC5B;IACF,CAAC,CAAC;IAEF/C,QAAQ,CAACmD,MAAM,EAAE;EACnB,CAAC,CAAC;EAEF,IAAMC,aAAa,GAAG,SAAhBA,aAAa,CAAIC,aAAyB,EAAK;IACnDA,aAAa,CAACC,OAAO,CAAC,UAACC,QAAQ,EAAK;MAClC,IAAIA,QAAQ,CAACd,IAAI,KAAK,MAAM,EAAE;QAC5Bc,QAAQ,CAACL,MAAM,CAACM,MAAM,CAACpD,WAAW,CAAC;MACrC,CAAC,MAEI,IAAImD,QAAQ,CAACd,IAAI,KAAK,OAAO,EAAE;QAClCc,QAAQ,CAACjB,QAAQ,CAAC,UAACmB,KAAK,EAAK;UAC3B,IAAIA,KAAK,CAAChB,IAAI,KAAK,MAAM,EACvBgB,KAAK,CAACP,MAAM,CAACM,MAAM,CAACpD,WAAW,CAAC;QACpC,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ,CAAC;EAED,OAAO;IACLgD,aAAa,EAAbA,aAAa;IACbM,KAAK,EAAE,iBAAM;MACXtB,gBAAgB,EAAE;;MAElB;MACApC,QAAQ,CAACG,YAAY,GAAG,IAAI;IAC9B;EACF,CAAC;AACH,CAAC;AAED,eAAeZ,uBAAuB"}
|
|
@@ -32,9 +32,12 @@ export var initPostEffects = function initPostEffects(scene, renderer, camera, o
|
|
|
32
32
|
storeManagement.set('renderPass', renderPass);
|
|
33
33
|
composer.addPass(renderPass);
|
|
34
34
|
composer.renderToScreen = renderToScreen;
|
|
35
|
+
// @ts-ignore
|
|
36
|
+
composer.isNeedRender = true;
|
|
35
37
|
var cleanEffectsframe = func(function () {
|
|
36
38
|
beforehooks && beforehooks();
|
|
37
|
-
|
|
39
|
+
// @ts-ignore
|
|
40
|
+
composer.isNeedRender && composer.render();
|
|
38
41
|
afterhooks && afterhooks();
|
|
39
42
|
});
|
|
40
43
|
clean = function clean() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["lib","use","utils","EffectComposer","RenderPass","storeManagement","useSubComposerFrame","useComposerFrame","clean","initPostEffects","scene","renderer","camera","options","composer","renderPass","type","beforehooks","afterhooks","renderToScreen","func","set","addPass","cleanEffectsframe","render","delete"],"sources":["../../src/postEffects/index.ts"],"sourcesContent":["import type { Camera, Scene, WebGLRenderer } from '@anov/3d-core'\nimport { lib, use, utils } from '@anov/3d-core'\n\nconst { EffectComposer, RenderPass } = lib\nconst { storeManagement } = utils\nconst { useSubComposerFrame, useComposerFrame } = use\n\ntype InitPostEffectsOptions = {\n type: 'main' | 'sub'\n beforehooks?: () => void\n afterhooks?: () => void\n renderToScreen?: boolean\n}\n\nlet clean: () => void\n\n/**\n * init post effects\n * @param scene\n * @param renderer\n * @param camera\n * @param beforehooks composer render before hook\n * @param afterhooks composer render after hook\n * @returns\n */\nexport const initPostEffects = (\n scene: Scene,\n renderer: WebGLRenderer,\n camera: Camera,\n options?: InitPostEffectsOptions,\n) => {\n const composer = new EffectComposer(renderer)\n const renderPass = new RenderPass(scene, camera)\n\n const { type, beforehooks, afterhooks, renderToScreen = true } = options || { type: 'main' }\n\n const func = type === 'main' ? useComposerFrame : useSubComposerFrame\n\n clean && clean()\n\n storeManagement.set('composer', composer)\n storeManagement.set('renderPass', renderPass)\n\n composer.addPass(renderPass)\n composer.renderToScreen = renderToScreen\n\n const cleanEffectsframe = func (() => {\n beforehooks && beforehooks()\n composer.render()\n afterhooks && afterhooks()\n })\n\n clean = () => {\n storeManagement.delete('composer')\n storeManagement.delete('renderPass')\n\n cleanEffectsframe()\n }\n\n return {\n composer,\n clean,\n }\n}"],"mappings":"AACA,SAASA,GAAG,EAAEC,GAAG,EAAEC,KAAK,QAAQ,eAAe;AAE/C,IAAQC,cAAc,GAAiBH,GAAG,CAAlCG,cAAc;EAAEC,UAAU,GAAKJ,GAAG,CAAlBI,UAAU;AAClC,IAAQC,eAAe,GAAKH,KAAK,CAAzBG,eAAe;AACvB,IAAQC,mBAAmB,GAAuBL,GAAG,CAA7CK,mBAAmB;EAAEC,gBAAgB,GAAKN,GAAG,CAAxBM,gBAAgB;AAS7C,IAAIC,KAAiB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAe,CAC1BC,KAAY,EACZC,QAAuB,EACvBC,MAAc,EACdC,OAAgC,EAC7B;EACH,IAAMC,QAAQ,GAAG,IAAIX,cAAc,CAACQ,QAAQ,CAAC;EAC7C,IAAMI,UAAU,GAAG,IAAIX,UAAU,CAACM,KAAK,EAAEE,MAAM,CAAC;EAEhD,WAAiEC,OAAO,IAAI;MAAEG,IAAI,EAAE;IAAO,CAAC;IAApFA,IAAI,QAAJA,IAAI;IAAEC,WAAW,QAAXA,WAAW;IAAEC,UAAU,QAAVA,UAAU;IAAA,2BAAEC,cAAc;IAAdA,cAAc,oCAAG,IAAI;EAE5D,IAAMC,IAAI,GAAGJ,IAAI,KAAK,MAAM,GAAGT,gBAAgB,GAAGD,mBAAmB;EAErEE,KAAK,IAAIA,KAAK,EAAE;EAEhBH,eAAe,CAACgB,GAAG,CAAC,UAAU,EAAEP,QAAQ,CAAC;EACzCT,eAAe,CAACgB,GAAG,CAAC,YAAY,EAAEN,UAAU,CAAC;EAE7CD,QAAQ,CAACQ,OAAO,CAACP,UAAU,CAAC;EAC5BD,QAAQ,CAACK,cAAc,GAAGA,cAAc;
|
|
1
|
+
{"version":3,"names":["lib","use","utils","EffectComposer","RenderPass","storeManagement","useSubComposerFrame","useComposerFrame","clean","initPostEffects","scene","renderer","camera","options","composer","renderPass","type","beforehooks","afterhooks","renderToScreen","func","set","addPass","isNeedRender","cleanEffectsframe","render","delete"],"sources":["../../src/postEffects/index.ts"],"sourcesContent":["import type { Camera, Scene, WebGLRenderer } from '@anov/3d-core'\nimport { lib, use, utils } from '@anov/3d-core'\n\nconst { EffectComposer, RenderPass } = lib\nconst { storeManagement } = utils\nconst { useSubComposerFrame, useComposerFrame } = use\n\ntype InitPostEffectsOptions = {\n type: 'main' | 'sub'\n beforehooks?: () => void\n afterhooks?: () => void\n renderToScreen?: boolean\n}\n\nlet clean: () => void\n\n/**\n * init post effects\n * @param scene\n * @param renderer\n * @param camera\n * @param beforehooks composer render before hook\n * @param afterhooks composer render after hook\n * @returns\n */\nexport const initPostEffects = (\n scene: Scene,\n renderer: WebGLRenderer,\n camera: Camera,\n options?: InitPostEffectsOptions,\n) => {\n const composer = new EffectComposer(renderer)\n const renderPass = new RenderPass(scene, camera)\n\n const { type, beforehooks, afterhooks, renderToScreen = true } = options || { type: 'main' }\n\n const func = type === 'main' ? useComposerFrame : useSubComposerFrame\n\n clean && clean()\n\n storeManagement.set('composer', composer)\n storeManagement.set('renderPass', renderPass)\n\n composer.addPass(renderPass)\n composer.renderToScreen = renderToScreen\n // @ts-ignore\n composer.isNeedRender = true\n\n const cleanEffectsframe = func (() => {\n beforehooks && beforehooks()\n // @ts-ignore\n composer.isNeedRender && composer.render()\n afterhooks && afterhooks()\n })\n\n clean = () => {\n storeManagement.delete('composer')\n storeManagement.delete('renderPass')\n\n cleanEffectsframe()\n }\n\n return {\n composer,\n clean,\n }\n}"],"mappings":"AACA,SAASA,GAAG,EAAEC,GAAG,EAAEC,KAAK,QAAQ,eAAe;AAE/C,IAAQC,cAAc,GAAiBH,GAAG,CAAlCG,cAAc;EAAEC,UAAU,GAAKJ,GAAG,CAAlBI,UAAU;AAClC,IAAQC,eAAe,GAAKH,KAAK,CAAzBG,eAAe;AACvB,IAAQC,mBAAmB,GAAuBL,GAAG,CAA7CK,mBAAmB;EAAEC,gBAAgB,GAAKN,GAAG,CAAxBM,gBAAgB;AAS7C,IAAIC,KAAiB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAe,CAC1BC,KAAY,EACZC,QAAuB,EACvBC,MAAc,EACdC,OAAgC,EAC7B;EACH,IAAMC,QAAQ,GAAG,IAAIX,cAAc,CAACQ,QAAQ,CAAC;EAC7C,IAAMI,UAAU,GAAG,IAAIX,UAAU,CAACM,KAAK,EAAEE,MAAM,CAAC;EAEhD,WAAiEC,OAAO,IAAI;MAAEG,IAAI,EAAE;IAAO,CAAC;IAApFA,IAAI,QAAJA,IAAI;IAAEC,WAAW,QAAXA,WAAW;IAAEC,UAAU,QAAVA,UAAU;IAAA,2BAAEC,cAAc;IAAdA,cAAc,oCAAG,IAAI;EAE5D,IAAMC,IAAI,GAAGJ,IAAI,KAAK,MAAM,GAAGT,gBAAgB,GAAGD,mBAAmB;EAErEE,KAAK,IAAIA,KAAK,EAAE;EAEhBH,eAAe,CAACgB,GAAG,CAAC,UAAU,EAAEP,QAAQ,CAAC;EACzCT,eAAe,CAACgB,GAAG,CAAC,YAAY,EAAEN,UAAU,CAAC;EAE7CD,QAAQ,CAACQ,OAAO,CAACP,UAAU,CAAC;EAC5BD,QAAQ,CAACK,cAAc,GAAGA,cAAc;EACxC;EACAL,QAAQ,CAACS,YAAY,GAAG,IAAI;EAE5B,IAAMC,iBAAiB,GAAGJ,IAAI,CAAE,YAAM;IACpCH,WAAW,IAAIA,WAAW,EAAE;IAC5B;IACAH,QAAQ,CAACS,YAAY,IAAIT,QAAQ,CAACW,MAAM,EAAE;IAC1CP,UAAU,IAAIA,UAAU,EAAE;EAC5B,CAAC,CAAC;EAEFV,KAAK,GAAG,iBAAM;IACZH,eAAe,CAACqB,MAAM,CAAC,UAAU,CAAC;IAClCrB,eAAe,CAACqB,MAAM,CAAC,YAAY,CAAC;IAEpCF,iBAAiB,EAAE;EACrB,CAAC;EAED,OAAO;IACLV,QAAQ,EAARA,QAAQ;IACRN,KAAK,EAALA;EACF,CAAC;AACH,CAAC"}
|
package/dist/weather/index.d.ts
CHANGED
|
@@ -2,15 +2,16 @@ import Fog2DMesh from './objects/Fog2DMesh';
|
|
|
2
2
|
import CloudMesh from './objects/CloudMesh';
|
|
3
3
|
import SkyMesh from './objects/SkyMesh';
|
|
4
4
|
import SnowMesh from './objects/SnowMesh';
|
|
5
|
+
import RainMesh from './objects/RainMesh';
|
|
5
6
|
declare class Weather {
|
|
6
7
|
fog: Fog2DMesh;
|
|
7
8
|
sky: SkyMesh;
|
|
8
9
|
cloud: CloudMesh;
|
|
10
|
+
rain: RainMesh;
|
|
9
11
|
snow: SnowMesh;
|
|
10
|
-
loaded: Promise<boolean>;
|
|
11
12
|
eventListener: Set<Function>;
|
|
12
13
|
constructor();
|
|
13
|
-
init(): Promise<
|
|
14
|
+
init(): Promise<void>;
|
|
14
15
|
/**
|
|
15
16
|
* 天气设置
|
|
16
17
|
* @param weatherType 天气枚举值
|
package/dist/weather/index.js
CHANGED
|
@@ -8,50 +8,44 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
8
8
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
9
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
10
10
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
11
|
-
import {
|
|
11
|
+
import { use } from '@anov/3d-core';
|
|
12
12
|
import { EWeatherType } from "./utils/type";
|
|
13
13
|
import { Rain_Icon, Snow_Icon } from "./utils/constant";
|
|
14
14
|
import Fog2DMesh from "./objects/Fog2DMesh";
|
|
15
15
|
import CloudMesh from "./objects/CloudMesh";
|
|
16
16
|
import SkyMesh from "./objects/SkyMesh";
|
|
17
17
|
import SnowMesh from "./objects/SnowMesh";
|
|
18
|
-
|
|
18
|
+
import RainMesh from "./objects/RainMesh";
|
|
19
19
|
var Weather = /*#__PURE__*/function () {
|
|
20
20
|
function Weather() {
|
|
21
21
|
_classCallCheck(this, Weather);
|
|
22
22
|
_defineProperty(this, "fog", void 0);
|
|
23
23
|
_defineProperty(this, "sky", void 0);
|
|
24
24
|
_defineProperty(this, "cloud", void 0);
|
|
25
|
+
_defineProperty(this, "rain", void 0);
|
|
25
26
|
_defineProperty(this, "snow", void 0);
|
|
26
|
-
_defineProperty(this, "loaded", void 0);
|
|
27
27
|
_defineProperty(this, "eventListener", new Set());
|
|
28
|
-
this.
|
|
28
|
+
this.init();
|
|
29
29
|
}
|
|
30
30
|
_createClass(Weather, [{
|
|
31
31
|
key: "init",
|
|
32
32
|
value: function () {
|
|
33
33
|
var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
34
34
|
var _this = this;
|
|
35
|
-
var
|
|
35
|
+
var _use$useScene, scene;
|
|
36
36
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
37
37
|
while (1) switch (_context.prev = _context.next) {
|
|
38
38
|
case 0:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
case 2:
|
|
42
|
-
gltf = _context.sent;
|
|
43
|
-
mesh = gltf.scene;
|
|
44
|
-
this.sky = new SkyMesh(mesh.clone());
|
|
45
|
-
this.cloud = new CloudMesh(mesh.clone());
|
|
39
|
+
this.sky = new SkyMesh();
|
|
40
|
+
this.cloud = new CloudMesh();
|
|
46
41
|
_use$useScene = use.useScene(), scene = _use$useScene.scene;
|
|
47
|
-
scene === null || scene === void 0 ? void 0 : scene.add(this.sky
|
|
48
|
-
scene === null || scene === void 0 ? void 0 : scene.add(this.cloud
|
|
42
|
+
scene === null || scene === void 0 ? void 0 : scene.add(this.sky);
|
|
43
|
+
scene === null || scene === void 0 ? void 0 : scene.add(this.cloud);
|
|
49
44
|
use.useframe(function () {
|
|
50
45
|
var _this$cloud;
|
|
51
46
|
(_this$cloud = _this.cloud) === null || _this$cloud === void 0 ? void 0 : _this$cloud.update();
|
|
52
47
|
});
|
|
53
|
-
|
|
54
|
-
case 11:
|
|
48
|
+
case 6:
|
|
55
49
|
case "end":
|
|
56
50
|
return _context.stop();
|
|
57
51
|
}
|
|
@@ -74,25 +68,22 @@ var Weather = /*#__PURE__*/function () {
|
|
|
74
68
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
75
69
|
while (1) switch (_context2.prev = _context2.next) {
|
|
76
70
|
case 0:
|
|
77
|
-
_context2.next = 2;
|
|
78
|
-
return this.loaded;
|
|
79
|
-
case 2:
|
|
80
71
|
this._reset();
|
|
81
72
|
_context2.t0 = weatherType;
|
|
82
|
-
_context2.next = _context2.t0 === EWeatherType.Foggy ?
|
|
73
|
+
_context2.next = _context2.t0 === EWeatherType.Foggy ? 4 : _context2.t0 === EWeatherType.Sand_Dust_Calm ? 4 : _context2.t0 === EWeatherType.Clear_Skies ? 5 : _context2.t0 === EWeatherType.Cloudy ? 5 : _context2.t0 === EWeatherType.Overcast ? 5 : _context2.t0 === EWeatherType.Rain ? 7 : _context2.t0 === EWeatherType.Rain_Thunderstorm ? 7 : _context2.t0 === EWeatherType.Snow ? 7 : _context2.t0 === EWeatherType.Snow_Blizzard ? 7 : 9;
|
|
83
74
|
break;
|
|
84
|
-
case
|
|
75
|
+
case 4:
|
|
85
76
|
// 沙尘暴
|
|
86
77
|
this._createFogMesh(weatherType);
|
|
87
|
-
case
|
|
78
|
+
case 5:
|
|
88
79
|
// 阴天
|
|
89
80
|
this._createCloudMesh(weatherType);
|
|
90
|
-
return _context2.abrupt("break",
|
|
91
|
-
case
|
|
81
|
+
return _context2.abrupt("break", 9);
|
|
82
|
+
case 7:
|
|
92
83
|
// 暴雪
|
|
93
84
|
this._createSnowMesh(weatherType);
|
|
94
|
-
return _context2.abrupt("break",
|
|
95
|
-
case
|
|
85
|
+
return _context2.abrupt("break", 9);
|
|
86
|
+
case 9:
|
|
96
87
|
case "end":
|
|
97
88
|
return _context2.stop();
|
|
98
89
|
}
|
|
@@ -114,7 +105,7 @@ var Weather = /*#__PURE__*/function () {
|
|
|
114
105
|
case EWeatherType.Clear_Skies:
|
|
115
106
|
this.cloud.setEffect(type, {
|
|
116
107
|
cloudalpha: 3.0,
|
|
117
|
-
cloudscale:
|
|
108
|
+
cloudscale: 5.0,
|
|
118
109
|
speed: 0.2,
|
|
119
110
|
flash: 0.0
|
|
120
111
|
});
|
|
@@ -122,7 +113,7 @@ var Weather = /*#__PURE__*/function () {
|
|
|
122
113
|
case EWeatherType.Cloudy:
|
|
123
114
|
this.cloud.setEffect(type, {
|
|
124
115
|
cloudalpha: 0.8,
|
|
125
|
-
cloudscale:
|
|
116
|
+
cloudscale: 5.0,
|
|
126
117
|
speed: 0.3,
|
|
127
118
|
flash: 0.0
|
|
128
119
|
});
|
|
@@ -146,7 +137,7 @@ var Weather = /*#__PURE__*/function () {
|
|
|
146
137
|
case EWeatherType.Foggy:
|
|
147
138
|
this.cloud.setEffect(type, {
|
|
148
139
|
cloudalpha: 2.0,
|
|
149
|
-
cloudscale:
|
|
140
|
+
cloudscale: 5.0,
|
|
150
141
|
speed: 0.2,
|
|
151
142
|
flash: 0.0
|
|
152
143
|
});
|
|
@@ -197,48 +188,75 @@ var Weather = /*#__PURE__*/function () {
|
|
|
197
188
|
var _this3 = this;
|
|
198
189
|
var _use$useScene3 = use.useScene(),
|
|
199
190
|
scene = _use$useScene3.scene;
|
|
200
|
-
if (!this.snow) this.snow = new SnowMesh();
|
|
191
|
+
if (!this.snow && !this.rain) this.snow = new SnowMesh();
|
|
192
|
+
this.rain = new RainMesh();
|
|
201
193
|
switch (type) {
|
|
202
194
|
case EWeatherType.Rain:
|
|
203
195
|
// 雨
|
|
204
196
|
this.snow.setEffect({
|
|
205
|
-
speed: [0,
|
|
197
|
+
speed: [0, 4, 0],
|
|
206
198
|
size: 2,
|
|
207
199
|
icon: Rain_Icon,
|
|
208
|
-
count:
|
|
200
|
+
count: 1000
|
|
201
|
+
});
|
|
202
|
+
this.rain.setEffect({
|
|
203
|
+
size: 20,
|
|
204
|
+
snowT1density: 0.0,
|
|
205
|
+
rainT1density: 0.5,
|
|
206
|
+
snowSpeed: 0.4
|
|
209
207
|
});
|
|
210
208
|
break;
|
|
211
209
|
case EWeatherType.Rain_Thunderstorm:
|
|
212
210
|
// 强雷阵雨
|
|
213
211
|
this.snow.setEffect({
|
|
214
|
-
speed: [0,
|
|
212
|
+
speed: [0, 6, 0],
|
|
215
213
|
size: 2,
|
|
216
214
|
icon: Rain_Icon,
|
|
217
|
-
count:
|
|
215
|
+
count: 2000
|
|
216
|
+
});
|
|
217
|
+
this.rain.setEffect({
|
|
218
|
+
size: 15,
|
|
219
|
+
snowT1density: 0.0,
|
|
220
|
+
rainT1density: 0.8,
|
|
221
|
+
snowSpeed: 0.8
|
|
218
222
|
});
|
|
219
223
|
break;
|
|
220
224
|
case EWeatherType.Snow:
|
|
221
225
|
// 雪
|
|
222
226
|
this.snow.setEffect({
|
|
223
|
-
speed: [0,
|
|
224
|
-
size:
|
|
227
|
+
speed: [0, 1.5, 0],
|
|
228
|
+
size: 4,
|
|
225
229
|
icon: Snow_Icon,
|
|
226
|
-
count:
|
|
230
|
+
count: 800
|
|
231
|
+
});
|
|
232
|
+
this.rain.setEffect({
|
|
233
|
+
size: 30,
|
|
234
|
+
snowT1density: 0.5,
|
|
235
|
+
rainT1density: 0,
|
|
236
|
+
snowSpeed: 2
|
|
227
237
|
});
|
|
228
238
|
break;
|
|
229
239
|
case EWeatherType.Snow_Blizzard:
|
|
230
240
|
// 暴雪
|
|
231
241
|
this.snow.setEffect({
|
|
232
|
-
speed: [0,
|
|
233
|
-
size:
|
|
242
|
+
speed: [0, 2, 0],
|
|
243
|
+
size: 5,
|
|
234
244
|
icon: Snow_Icon,
|
|
235
|
-
count:
|
|
245
|
+
count: 1600
|
|
246
|
+
});
|
|
247
|
+
this.rain.setEffect({
|
|
248
|
+
size: 20,
|
|
249
|
+
snowT1density: 0.8,
|
|
250
|
+
rainT1density: 0,
|
|
251
|
+
snowSpeed: 1.5
|
|
236
252
|
});
|
|
237
253
|
break;
|
|
238
254
|
}
|
|
239
255
|
scene === null || scene === void 0 ? void 0 : scene.add(this.snow);
|
|
256
|
+
scene === null || scene === void 0 ? void 0 : scene.add(this.rain.mesh);
|
|
240
257
|
var unSnowFrame = use.useframe(function () {
|
|
241
258
|
_this3.snow.update();
|
|
259
|
+
_this3.rain.update();
|
|
242
260
|
});
|
|
243
261
|
this.eventListener.add(unSnowFrame);
|
|
244
262
|
}
|
|
@@ -247,6 +265,7 @@ var Weather = /*#__PURE__*/function () {
|
|
|
247
265
|
value: function _reset() {
|
|
248
266
|
if (this.fog) this.fog.removeFromParent();
|
|
249
267
|
if (this.snow) this.snow.removeFromParent();
|
|
268
|
+
if (this.rain) this.rain.mesh.removeFromParent();
|
|
250
269
|
this.eventListener && this.eventListener.forEach(function (unEvent) {
|
|
251
270
|
return unEvent();
|
|
252
271
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ModelLoader","use","EWeatherType","Rain_Icon","Snow_Icon","Fog2DMesh","CloudMesh","SkyMesh","SnowMesh","load","Weather","Set","loaded","init","loadGLTF","gltf","mesh","scene","sky","clone","cloud","useScene","add","useframe","update","weatherType","_reset","Foggy","Sand_Dust_Calm","Clear_Skies","Cloudy","Overcast","Rain","Rain_Thunderstorm","Snow","Snow_Blizzard","_createFogMesh","_createCloudMesh","_createSnowMesh","type","setEffect","cloudalpha","cloudscale","speed","flash","fog","color","alpha","setColor","setAlpha","unFogFrame","eventListener","snow","size","icon","count","unSnowFrame","removeFromParent","forEach","unEvent","clear","remove","_destroy"],"sources":["../../src/weather/index.ts"],"sourcesContent":["import type { Group } from '@anov/3d-core'\nimport { ModelLoader, use } from '@anov/3d-core'\nimport { EWeatherType } from './utils/type'\nimport { Rain_Icon, Snow_Icon } from './utils/constant'\nimport Fog2DMesh from './objects/Fog2DMesh'\nimport CloudMesh from './objects/CloudMesh'\nimport SkyMesh from './objects/SkyMesh'\nimport SnowMesh from './objects/SnowMesh'\n\nconst load = new ModelLoader()\nclass Weather {\n fog!: Fog2DMesh\n sky!: SkyMesh\n cloud!: CloudMesh\n snow!: SnowMesh\n loaded!: Promise<boolean>\n eventListener: Set<Function> = new Set()\n\n constructor() {\n this.loaded = this.init()\n }\n\n async init() {\n const gltf = await load.loadGLTF('./skySphereMesh.glb', false, true, './draco/')\n const mesh = gltf.scene as Group\n\n this.sky = new SkyMesh(mesh.clone())\n this.cloud = new CloudMesh(mesh.clone())\n\n const { scene } = use.useScene()\n scene?.add(this.sky.mesh)\n scene?.add(this.cloud.mesh)\n\n use.useframe(() => {\n this.cloud?.update()\n })\n return true\n }\n\n /**\n * 天气设置\n * @param weatherType 天气枚举值\n * @param option 配置参数\n */\n async setWeather(weatherType: string) {\n await this.loaded\n\n this._reset()\n switch (weatherType) {\n case EWeatherType.Foggy: // 有雾\n case EWeatherType.Sand_Dust_Calm: // 沙尘暴\n this._createFogMesh(weatherType)\n // eslint-disable-next-line no-fallthrough\n case EWeatherType.Clear_Skies: // 晴天\n case EWeatherType.Cloudy: // 多云\n case EWeatherType.Overcast: // 阴天\n this._createCloudMesh(weatherType)\n break\n case EWeatherType.Rain: // 雨\n case EWeatherType.Rain_Thunderstorm: // 强雷阵雨\n case EWeatherType.Snow: // 雪\n case EWeatherType.Snow_Blizzard: // 暴雪\n this._createSnowMesh(weatherType)\n break\n }\n }\n\n /**\n * 设置不同天气的预设值:晴天、多云、阴天\n * @param type\n */\n private _createCloudMesh(type: string) {\n switch (type) {\n case EWeatherType.Clear_Skies:\n this.cloud.setEffect(type, {\n cloudalpha: 3.0,\n cloudscale: 8.0,\n speed: 0.2,\n flash: 0.0,\n })\n break\n case EWeatherType.Cloudy:\n this.cloud.setEffect(type, {\n cloudalpha: 0.8,\n cloudscale: 8.0,\n speed: 0.3,\n flash: 0.0,\n })\n break\n case EWeatherType.Overcast:\n this.cloud.setEffect(type, {\n cloudalpha: 1.8,\n cloudscale: 1.0,\n speed: 0.4,\n flash: 1.0,\n })\n break\n case EWeatherType.Sand_Dust_Calm:\n this.cloud.setEffect(type, {\n cloudalpha: 1.6,\n cloudscale: 3.0,\n speed: 0.5,\n flash: 0,\n })\n break\n case EWeatherType.Foggy:\n this.cloud.setEffect(type, {\n cloudalpha: 2.0,\n cloudscale: 8.0,\n speed: 0.2,\n flash: 0.0,\n })\n break\n }\n }\n\n /**\n * 雾、沙尘暴\n * @param type\n */\n private _createFogMesh(type: string) {\n const { scene } = use.useScene()\n if (!this.fog)\n this.fog = new Fog2DMesh()\n\n let color: [number, number, number], alpha\n switch (type) {\n case EWeatherType.Foggy: // 雾\n color = [0.9, 0.9, 0.9]\n alpha = 0.4\n break\n case EWeatherType.Sand_Dust_Calm: // 沙尘暴\n color = [1.0, 0.69, 0.48]\n alpha = 0.6\n break\n }\n this.fog.setColor(color!)\n this.fog.setAlpha(alpha!)\n scene?.add(this.fog)\n const unFogFrame = use.useframe(() => {\n this.fog.update()\n })\n this.eventListener.add(unFogFrame)\n }\n\n /**\n * 雨、雪\n * @param type\n */\n private _createSnowMesh(type: string) {\n const { scene } = use.useScene()\n if (!this.snow)\n this.snow = new SnowMesh()\n switch (type) {\n case EWeatherType.Rain: // 雨\n this.snow.setEffect({\n speed: [0, 5, 0],\n size: 2,\n icon: Rain_Icon,\n count: 3000,\n })\n break\n case EWeatherType.Rain_Thunderstorm: // 强雷阵雨\n this.snow.setEffect({\n speed: [0, 10, 0],\n size: 2,\n icon: Rain_Icon,\n count: 6000,\n })\n break\n case EWeatherType.Snow: // 雪\n this.snow.setEffect({\n speed: [0, 2, 0],\n size: 10,\n icon: Snow_Icon,\n count: 1000,\n })\n break\n case EWeatherType.Snow_Blizzard: // 暴雪\n this.snow.setEffect({\n speed: [0, 4, 0],\n size: 10,\n icon: Snow_Icon,\n count: 2000,\n })\n break\n }\n scene?.add(this.snow)\n const unSnowFrame = use.useframe(() => {\n this.snow.update()\n })\n this.eventListener.add(unSnowFrame)\n }\n\n private _reset() {\n if (this.fog)\n this.fog.removeFromParent()\n if (this.snow)\n this.snow.removeFromParent()\n this.eventListener && this.eventListener.forEach(unEvent => unEvent())\n this.eventListener.clear()\n }\n\n private _destroy() {\n this._reset()\n this.sky.removeFromParent()\n this.sky.remove()\n this.cloud.removeFromParent()\n this.cloud.remove()\n }\n\n remove() {\n this._destroy()\n this.remove()\n }\n\n removeFromParent() {\n this._destroy()\n this.removeFromParent()\n }\n}\n\nexport default Weather"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["use","EWeatherType","Rain_Icon","Snow_Icon","Fog2DMesh","CloudMesh","SkyMesh","SnowMesh","RainMesh","Weather","Set","init","sky","cloud","useScene","scene","add","useframe","update","weatherType","_reset","Foggy","Sand_Dust_Calm","Clear_Skies","Cloudy","Overcast","Rain","Rain_Thunderstorm","Snow","Snow_Blizzard","_createFogMesh","_createCloudMesh","_createSnowMesh","type","setEffect","cloudalpha","cloudscale","speed","flash","fog","color","alpha","setColor","setAlpha","unFogFrame","eventListener","snow","rain","size","icon","count","snowT1density","rainT1density","snowSpeed","mesh","unSnowFrame","removeFromParent","forEach","unEvent","clear","remove","_destroy"],"sources":["../../src/weather/index.ts"],"sourcesContent":["import { use } from '@anov/3d-core'\nimport { EWeatherType } from './utils/type'\nimport { Rain_Icon, Snow_Icon } from './utils/constant'\nimport Fog2DMesh from './objects/Fog2DMesh'\nimport CloudMesh from './objects/CloudMesh'\nimport SkyMesh from './objects/SkyMesh'\nimport SnowMesh from './objects/SnowMesh'\nimport RainMesh from './objects/RainMesh'\n\nclass Weather {\n fog!: Fog2DMesh\n sky!: SkyMesh\n cloud!: CloudMesh\n rain!:RainMesh\n snow!: SnowMesh\n eventListener: Set<Function> = new Set()\n\n constructor() {\n this.init()\n }\n\n async init() {\n this.sky = new SkyMesh()\n this.cloud = new CloudMesh()\n\n\n const { scene } = use.useScene()\n scene?.add(this.sky)\n scene?.add(this.cloud)\n\n use.useframe(() => {\n this.cloud?.update()\n\n })\n }\n\n /**\n * 天气设置\n * @param weatherType 天气枚举值\n * @param option 配置参数\n */\n async setWeather(weatherType: string) {\n this._reset()\n switch (weatherType) {\n case EWeatherType.Foggy: // 有雾\n case EWeatherType.Sand_Dust_Calm: // 沙尘暴\n this._createFogMesh(weatherType)\n // eslint-disable-next-line no-fallthrough\n case EWeatherType.Clear_Skies: // 晴天\n case EWeatherType.Cloudy: // 多云\n case EWeatherType.Overcast: // 阴天\n this._createCloudMesh(weatherType)\n break\n case EWeatherType.Rain: // 雨\n case EWeatherType.Rain_Thunderstorm: // 强雷阵雨\n case EWeatherType.Snow: // 雪\n case EWeatherType.Snow_Blizzard: // 暴雪\n this._createSnowMesh(weatherType)\n break\n }\n }\n\n /**\n * 设置不同天气的预设值:晴天、多云、阴天\n * @param type\n */\n private _createCloudMesh(type: string) {\n switch (type) {\n case EWeatherType.Clear_Skies:\n this.cloud.setEffect(type, {\n cloudalpha: 3.0,\n cloudscale: 5.0,\n speed: 0.2,\n flash: 0.0,\n })\n break\n case EWeatherType.Cloudy:\n this.cloud.setEffect(type, {\n cloudalpha: 0.8,\n cloudscale: 5.0,\n speed: 0.3,\n flash: 0.0,\n })\n break\n case EWeatherType.Overcast:\n this.cloud.setEffect(type, {\n cloudalpha: 1.8,\n cloudscale: 1.0,\n speed: 0.4,\n flash: 1.0,\n })\n break\n case EWeatherType.Sand_Dust_Calm:\n this.cloud.setEffect(type, {\n cloudalpha: 1.6,\n cloudscale: 3.0,\n speed: 0.5,\n flash: 0,\n })\n break\n case EWeatherType.Foggy:\n this.cloud.setEffect(type, {\n cloudalpha: 2.0,\n cloudscale: 5.0,\n speed: 0.2,\n flash: 0.0,\n })\n break\n }\n }\n\n /**\n * 雾、沙尘暴\n * @param type\n */\n private _createFogMesh(type: string) {\n const { scene } = use.useScene()\n if (!this.fog)\n this.fog = new Fog2DMesh()\n\n let color: [number, number, number], alpha\n switch (type) {\n case EWeatherType.Foggy: // 雾\n color = [0.9, 0.9, 0.9]\n alpha = 0.4\n break\n case EWeatherType.Sand_Dust_Calm: // 沙尘暴\n color = [1.0, 0.69, 0.48]\n alpha = 0.6\n break\n }\n this.fog.setColor(color!)\n this.fog.setAlpha(alpha!)\n scene?.add(this.fog)\n const unFogFrame = use.useframe(() => {\n this.fog.update()\n })\n this.eventListener.add(unFogFrame)\n }\n\n /**\n * 雨、雪\n * @param type\n */\n private _createSnowMesh(type: string) {\n const { scene } = use.useScene()\n if (!this.snow&&!this.rain)\n this.snow = new SnowMesh()\n this.rain = new RainMesh()\n switch (type) {\n case EWeatherType.Rain: // 雨\n this.snow.setEffect({\n speed: [0, 4, 0],\n size: 2,\n icon: Rain_Icon,\n count: 1000,\n })\n this.rain.setEffect({\n size:20,\n snowT1density:0.0,\n rainT1density:0.5,\n snowSpeed:0.4,\n })\n break\n case EWeatherType.Rain_Thunderstorm: // 强雷阵雨\n this.snow.setEffect({\n speed: [0, 6, 0],\n size: 2,\n icon: Rain_Icon,\n count: 2000,\n })\n this.rain.setEffect({\n size:15,\n snowT1density:0.0,\n rainT1density:0.8,\n snowSpeed:0.8,\n })\n break\n case EWeatherType.Snow: // 雪\n this.snow.setEffect({\n speed: [0, 1.5, 0],\n size: 4,\n icon: Snow_Icon,\n count: 800,\n })\n this.rain.setEffect({\n size:30,\n snowT1density:0.5,\n rainT1density:0,\n snowSpeed:2,\n })\n break\n case EWeatherType.Snow_Blizzard: // 暴雪\n this.snow.setEffect({\n speed: [0, 2, 0],\n size: 5,\n icon: Snow_Icon,\n count: 1600,\n })\n this.rain.setEffect({\n size:20,\n snowT1density:0.8,\n rainT1density:0,\n snowSpeed:1.5,\n })\n break\n }\n scene?.add(this.snow)\n scene?.add(this.rain.mesh)\n\n const unSnowFrame = use.useframe(() => {\n this.snow.update()\n this.rain.update()\n })\n this.eventListener.add(unSnowFrame)\n }\n\n private _reset() {\n if (this.fog)\n this.fog.removeFromParent()\n if (this.snow)\n this.snow.removeFromParent()\n if (this.rain)\n this.rain.mesh.removeFromParent()\n\n this.eventListener && this.eventListener.forEach(unEvent => unEvent())\n this.eventListener.clear()\n }\n\n private _destroy() {\n this._reset()\n this.sky.removeFromParent()\n this.sky.remove()\n this.cloud.removeFromParent()\n this.cloud.remove()\n\n }\n\n remove() {\n this._destroy()\n this.remove()\n }\n\n removeFromParent() {\n this._destroy()\n this.removeFromParent()\n }\n}\n\nexport default Weather"],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import type { Group } from '@anov/3d-core';
|
|
2
1
|
import { Mesh } from '@anov/3d-core';
|
|
3
2
|
import type { ICloudOption } from '../utils/constant';
|
|
4
3
|
declare class CloudMesh extends Mesh {
|
|
5
4
|
option: ICloudOption;
|
|
6
5
|
uniforms: any;
|
|
7
|
-
mesh:
|
|
6
|
+
mesh: Mesh;
|
|
8
7
|
loaded: Promise<Boolean>;
|
|
9
|
-
constructor(
|
|
8
|
+
constructor();
|
|
10
9
|
/**
|
|
11
10
|
* 设置天气的Uniforms
|
|
12
11
|
* @param option
|
|
@@ -14,7 +14,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
|
|
|
14
14
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
15
15
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
16
16
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
17
|
-
import { Mesh, RepeatWrapping, ShaderMaterial, TextureLoader } from '@anov/3d-core';
|
|
17
|
+
import { BufferAttribute, Mesh, RepeatWrapping, ShaderMaterial, SphereGeometry, TextureLoader } from '@anov/3d-core';
|
|
18
18
|
import cloudShader from "../shaders/cloud";
|
|
19
19
|
import { CloudDensity } from "../utils/constant";
|
|
20
20
|
var textureLoader = new TextureLoader();
|
|
@@ -33,7 +33,7 @@ var _defaultOption = {
|
|
|
33
33
|
var CloudMesh = /*#__PURE__*/function (_Mesh) {
|
|
34
34
|
_inherits(CloudMesh, _Mesh);
|
|
35
35
|
var _super = _createSuper(CloudMesh);
|
|
36
|
-
function CloudMesh(
|
|
36
|
+
function CloudMesh() {
|
|
37
37
|
var _this;
|
|
38
38
|
_classCallCheck(this, CloudMesh);
|
|
39
39
|
_this = _super.call(this);
|
|
@@ -41,14 +41,28 @@ var CloudMesh = /*#__PURE__*/function (_Mesh) {
|
|
|
41
41
|
_defineProperty(_assertThisInitialized(_this), "uniforms", {});
|
|
42
42
|
_defineProperty(_assertThisInitialized(_this), "mesh", void 0);
|
|
43
43
|
_defineProperty(_assertThisInitialized(_this), "loaded", void 0);
|
|
44
|
-
_this.mesh = mesh;
|
|
45
44
|
if (_this.option.texture1) _this.option.texture1.wrapS = _this.option.texture1.wrapT = RepeatWrapping;
|
|
46
45
|
if (_this.option.texture2) _this.option.texture2.wrapS = _this.option.texture2.wrapT = RepeatWrapping;
|
|
47
46
|
_this.setUniforms(_objectSpread(_objectSpread({}, _this.option), {}, {
|
|
48
47
|
iTime: 0
|
|
49
48
|
}));
|
|
50
|
-
|
|
51
|
-
_this.
|
|
49
|
+
_this.geometry = new SphereGeometry(1, 320, 320, 0, Math.PI * 2, 0, 1.5);
|
|
50
|
+
var positions = _this.geometry.attributes.position.array;
|
|
51
|
+
var uvs = new Float32Array(positions.length / 3 * 2); // 创建新的 UV 数组
|
|
52
|
+
|
|
53
|
+
// 重新计算 UV 坐标
|
|
54
|
+
for (var i = 0; i < positions.length / 3; i++) {
|
|
55
|
+
var x = positions[i * 3];
|
|
56
|
+
var z = positions[i * 3 + 2];
|
|
57
|
+
var u = (x * 0.8 + 1) / 2; // 将 x 坐标映射到 [0, 1]
|
|
58
|
+
var v = (z * 0.8 + 1) / 2; // 将 z 坐标映射到 [0, 1]
|
|
59
|
+
|
|
60
|
+
uvs[i * 2] = u;
|
|
61
|
+
uvs[i * 2 + 1] = v;
|
|
62
|
+
}
|
|
63
|
+
// 将新的 UV 坐标添加到几何体
|
|
64
|
+
_this.geometry.setAttribute('uv', new BufferAttribute(uvs, 2));
|
|
65
|
+
_this.material = new ShaderMaterial({
|
|
52
66
|
uniforms: _this.uniforms,
|
|
53
67
|
vertexShader: cloudShader.vertexShader,
|
|
54
68
|
fragmentShader: cloudShader.fragmentShader,
|
|
@@ -56,7 +70,8 @@ var CloudMesh = /*#__PURE__*/function (_Mesh) {
|
|
|
56
70
|
transparent: true,
|
|
57
71
|
depthWrite: false
|
|
58
72
|
});
|
|
59
|
-
_this.
|
|
73
|
+
_this.position.y = -2500;
|
|
74
|
+
_this.scale.set(19990, 5000, 19990);
|
|
60
75
|
return _this;
|
|
61
76
|
}
|
|
62
77
|
|
|
@@ -113,7 +128,7 @@ var CloudMesh = /*#__PURE__*/function (_Mesh) {
|
|
|
113
128
|
key: "update",
|
|
114
129
|
value: function update() {
|
|
115
130
|
var iTime = this.uniforms.iTime;
|
|
116
|
-
iTime.value += 0.
|
|
131
|
+
iTime.value += 0.005;
|
|
117
132
|
}
|
|
118
133
|
}]);
|
|
119
134
|
return CloudMesh;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Mesh","RepeatWrapping","ShaderMaterial","TextureLoader","cloudShader","CloudDensity","textureLoader","_defaultOption","texture1","load","texture2","duration","cloudDensity","cloudDensity2","cloudalpha","cloudscale","speed","color","flash","CloudMesh","
|
|
1
|
+
{"version":3,"names":["BufferAttribute","Mesh","RepeatWrapping","ShaderMaterial","SphereGeometry","TextureLoader","cloudShader","CloudDensity","textureLoader","_defaultOption","texture1","load","texture2","duration","cloudDensity","cloudDensity2","cloudalpha","cloudscale","speed","color","flash","CloudMesh","option","wrapS","wrapT","setUniforms","iTime","geometry","Math","PI","positions","attributes","position","array","uvs","Float32Array","length","i","x","z","u","v","setAttribute","material","uniforms","vertexShader","fragmentShader","side","transparent","depthWrite","y","scale","set","Object","assign","keys","forEach","key","value","alpha","type","ops","density"],"sources":["../../../src/weather/objects/CloudMesh.ts"],"sourcesContent":["import type { Group, Texture } from '@anov/3d-core'\nimport { BufferAttribute, Mesh, RepeatWrapping, ShaderMaterial, SphereGeometry, TextureLoader, use } from '@anov/3d-core'\nimport cloudShader from '../shaders/cloud'\nimport type { ICloudOption } from '../utils/constant'\nimport { CloudDensity } from '../utils/constant'\n\nconst textureLoader = new TextureLoader()\n\nconst _defaultOption: ICloudOption = {\n texture1: textureLoader.load('./T_soft_smoke.png'),\n texture2: textureLoader.load('./T_TileNoise.png'),\n duration: 2,\n cloudDensity: 0.02,\n cloudDensity2: 1.6,\n cloudalpha: 0.8,\n cloudscale: 8.0,\n speed: 0.3,\n color: [0.9, 0.9, 0.9],\n flash: 0.3,\n}\n\nclass CloudMesh extends Mesh {\n option: ICloudOption = _defaultOption\n\n uniforms: any = {}\n mesh!: Mesh\n loaded!: Promise<Boolean>\n\n constructor() {\n super()\n if (this.option.texture1)\n this.option.texture1.wrapS = this.option.texture1.wrapT = RepeatWrapping\n if (this.option.texture2)\n this.option.texture2.wrapS = this.option.texture2.wrapT = RepeatWrapping\n this.setUniforms({\n ...this.option,\n iTime: 0,\n })\n\n this.geometry = new SphereGeometry(1, 320, 320, 0, Math.PI * 2, 0, 1.5)\n const positions = this.geometry.attributes.position.array\n const uvs = new Float32Array(positions.length / 3 * 2) // 创建新的 UV 数组\n\n // 重新计算 UV 坐标\n for (let i = 0; i < positions.length / 3; i++) {\n const x = positions[i * 3]\n const z = positions[i * 3 + 2]\n\n const u = (x * 0.8 + 1) / 2 // 将 x 坐标映射到 [0, 1]\n const v = (z * 0.8 + 1) / 2 // 将 z 坐标映射到 [0, 1]\n\n uvs[i * 2] = u\n uvs[i * 2 + 1] = v\n }\n // 将新的 UV 坐标添加到几何体\n this.geometry.setAttribute('uv', new BufferAttribute(uvs, 2))\n\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: cloudShader.vertexShader,\n fragmentShader: cloudShader.fragmentShader,\n side: 2,\n transparent: true,\n depthWrite: false,\n })\n this.position.y = -2500\n this.scale.set (19990, 5000, 19990)\n }\n\n /**\n * 设置天气的Uniforms\n * @param option\n */\n private setUniforms(option: ICloudOption) {\n Object.assign(this.option, option)\n\n Object.keys(option).forEach((key: string) => {\n this.uniforms[key] = { value: option[key] }\n })\n }\n\n public setAlpha(alpha: number) {\n this.setUniforms({ cloudalpha: alpha })\n }\n\n public setScale(scale: number) {\n this.setUniforms({ cloudscale: scale })\n }\n\n public setSpeed(speed: number) {\n this.setUniforms({ speed })\n }\n\n public setFlash(flash: number) {\n this.setUniforms({ flash })\n }\n\n public setEffect(type: string, ops: ICloudOption) {\n const density = CloudDensity[type] || {}\n this.setUniforms({ ...density, ...ops })\n }\n\n\n \n public update() {\n const { iTime } = this.uniforms\n iTime.value += 0.005\n }\n}\n\nexport default CloudMesh"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Group } from '@anov/3d-core';
|
|
2
|
+
import type { IRainOption } from '../utils/constant';
|
|
3
|
+
declare class RainMesh {
|
|
4
|
+
option: IRainOption;
|
|
5
|
+
uniforms: any;
|
|
6
|
+
mesh: Group;
|
|
7
|
+
loaded: Promise<Boolean>;
|
|
8
|
+
constructor();
|
|
9
|
+
/**
|
|
10
|
+
* 设置天气的Uniforms
|
|
11
|
+
* @param option
|
|
12
|
+
*/
|
|
13
|
+
private setUniforms;
|
|
14
|
+
setSize(size: number): void;
|
|
15
|
+
setSpeed(speed: number): void;
|
|
16
|
+
setRain(scale: number): void;
|
|
17
|
+
setSnow(scale: number): void;
|
|
18
|
+
setEffect(ops: IRainOption): void;
|
|
19
|
+
update(): void;
|
|
20
|
+
}
|
|
21
|
+
export default RainMesh;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
5
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
6
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
7
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
9
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
10
|
+
import { Group, PlaneGeometry } from '@anov/3d-core';
|
|
11
|
+
import { Mesh, RepeatWrapping, ShaderMaterial, TextureLoader } from '@anov/3d-core';
|
|
12
|
+
import RainShader from "../shaders/RainPlane";
|
|
13
|
+
var textureLoader = new TextureLoader();
|
|
14
|
+
var _defaultOption = {
|
|
15
|
+
// texture1: textureLoader.load('./camera.png'),
|
|
16
|
+
texture1: textureLoader.load('./weather/snow02.png'),
|
|
17
|
+
texture2rain: textureLoader.load('./weather/rain02.png'),
|
|
18
|
+
size: 10.,
|
|
19
|
+
snowT1density: 0.1,
|
|
20
|
+
rainT1density: 0.1,
|
|
21
|
+
snowSpeed: 1.
|
|
22
|
+
};
|
|
23
|
+
var RainMesh = /*#__PURE__*/function () {
|
|
24
|
+
function RainMesh() {
|
|
25
|
+
var _this = this;
|
|
26
|
+
_classCallCheck(this, RainMesh);
|
|
27
|
+
_defineProperty(this, "option", _defaultOption);
|
|
28
|
+
_defineProperty(this, "uniforms", {});
|
|
29
|
+
_defineProperty(this, "mesh", void 0);
|
|
30
|
+
_defineProperty(this, "loaded", void 0);
|
|
31
|
+
var group = new Group();
|
|
32
|
+
this.mesh = group;
|
|
33
|
+
if (this.option.texture1) this.option.texture1.wrapS = this.option.texture1.wrapT = RepeatWrapping;
|
|
34
|
+
if (this.option.texture2rain) this.option.texture2rain.wrapS = this.option.texture2rain.wrapT = RepeatWrapping;
|
|
35
|
+
this.setUniforms(_objectSpread(_objectSpread({}, this.option), {}, {
|
|
36
|
+
iTime: 0
|
|
37
|
+
}));
|
|
38
|
+
|
|
39
|
+
///////////////////////////////////////////////////RainShader
|
|
40
|
+
var createPlane = function createPlane(x, y, z, rotationX, rotationY, rotationZ) {
|
|
41
|
+
var suiji = Math.random() * 800;
|
|
42
|
+
var geometry = new PlaneGeometry(2000 + suiji, 3000 + suiji);
|
|
43
|
+
var material = new ShaderMaterial({
|
|
44
|
+
//color: 0x00ff00,
|
|
45
|
+
uniforms: _this.uniforms,
|
|
46
|
+
vertexShader: RainShader.vertexShader,
|
|
47
|
+
fragmentShader: RainShader.fragmentShader,
|
|
48
|
+
side: 2,
|
|
49
|
+
blending: 2,
|
|
50
|
+
transparent: true,
|
|
51
|
+
depthWrite: false
|
|
52
|
+
});
|
|
53
|
+
var plane = new Mesh(geometry, material);
|
|
54
|
+
plane.position.set(x, y, z);
|
|
55
|
+
plane.rotation.set(rotationX, rotationY, rotationZ);
|
|
56
|
+
return plane;
|
|
57
|
+
};
|
|
58
|
+
for (var j = -2; j <= 2; j++) {
|
|
59
|
+
var plane = createPlane(0, 0, j * 150, 0, 0, 0);
|
|
60
|
+
this.mesh.add(plane);
|
|
61
|
+
}
|
|
62
|
+
for (var _j = -2; _j <= 2; _j++) {
|
|
63
|
+
var _plane = createPlane(_j * 150, 0, 0, 0, Math.PI / 2, 0);
|
|
64
|
+
this.mesh.add(_plane);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 设置天气的Uniforms
|
|
70
|
+
* @param option
|
|
71
|
+
*/
|
|
72
|
+
_createClass(RainMesh, [{
|
|
73
|
+
key: "setUniforms",
|
|
74
|
+
value: function setUniforms(option) {
|
|
75
|
+
var _this2 = this;
|
|
76
|
+
Object.assign(this.option, option);
|
|
77
|
+
Object.keys(option).forEach(function (key) {
|
|
78
|
+
_this2.uniforms[key] = {
|
|
79
|
+
value: option[key]
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}, {
|
|
84
|
+
key: "setSize",
|
|
85
|
+
value: function setSize(size) {
|
|
86
|
+
this.setUniforms({
|
|
87
|
+
size: size
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}, {
|
|
91
|
+
key: "setSpeed",
|
|
92
|
+
value: function setSpeed(speed) {
|
|
93
|
+
this.setUniforms({
|
|
94
|
+
snowSpeed: speed
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}, {
|
|
98
|
+
key: "setRain",
|
|
99
|
+
value: function setRain(scale) {
|
|
100
|
+
this.setUniforms({
|
|
101
|
+
rainT1density: scale
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}, {
|
|
105
|
+
key: "setSnow",
|
|
106
|
+
value: function setSnow(scale) {
|
|
107
|
+
this.setUniforms({
|
|
108
|
+
snowT1density: scale
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}, {
|
|
112
|
+
key: "setEffect",
|
|
113
|
+
value: function setEffect(ops) {
|
|
114
|
+
var _this3 = this;
|
|
115
|
+
var size = ops.size,
|
|
116
|
+
snowT1density = ops.snowT1density,
|
|
117
|
+
rainT1density = ops.rainT1density,
|
|
118
|
+
snowSpeed = ops.snowSpeed;
|
|
119
|
+
Object.keys(ops).forEach(function (key) {
|
|
120
|
+
switch (key) {
|
|
121
|
+
case 'size':
|
|
122
|
+
_this3.setSize(size);
|
|
123
|
+
break;
|
|
124
|
+
case 'snowT1density':
|
|
125
|
+
_this3.setSpeed(snowSpeed);
|
|
126
|
+
break;
|
|
127
|
+
case 'rainT1density':
|
|
128
|
+
_this3.setRain(rainT1density);
|
|
129
|
+
break;
|
|
130
|
+
case 'snowSpeed':
|
|
131
|
+
_this3.setSnow(snowT1density);
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}, {
|
|
137
|
+
key: "update",
|
|
138
|
+
value: function update() {
|
|
139
|
+
var iTime = this.uniforms.iTime;
|
|
140
|
+
iTime.value += 0.1;
|
|
141
|
+
}
|
|
142
|
+
}]);
|
|
143
|
+
return RainMesh;
|
|
144
|
+
}();
|
|
145
|
+
export default RainMesh;
|
|
146
|
+
//# sourceMappingURL=RainMesh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Group","PlaneGeometry","Mesh","RepeatWrapping","ShaderMaterial","TextureLoader","RainShader","textureLoader","_defaultOption","texture1","load","texture2rain","size","snowT1density","rainT1density","snowSpeed","RainMesh","group","mesh","option","wrapS","wrapT","setUniforms","iTime","createPlane","x","y","z","rotationX","rotationY","rotationZ","suiji","Math","random","geometry","material","uniforms","vertexShader","fragmentShader","side","blending","transparent","depthWrite","plane","position","set","rotation","j","add","PI","Object","assign","keys","forEach","key","value","speed","scale","ops","setSize","setSpeed","setRain","setSnow"],"sources":["../../../src/weather/objects/RainMesh.ts"],"sourcesContent":["import { DoubleSide, Group, MeshBasicMaterial, PlaneGeometry, Texture } from '@anov/3d-core'\nimport { BufferAttribute, Mesh, RepeatWrapping, ShaderMaterial, SphereGeometry, TextureLoader, use } from '@anov/3d-core'\nimport RainShader from '../shaders/RainPlane'\nimport type { ICloudOption, IRainOption } from '../utils/constant'\nimport { CloudDensity } from '../utils/constant'\n\nconst textureLoader = new TextureLoader()\n\nconst _defaultOption: IRainOption = {\n // texture1: textureLoader.load('./camera.png'),\n texture1: textureLoader.load('./weather/snow02.png'),\n texture2rain: textureLoader.load('./weather/rain02.png'),\n size: 10.,\n snowT1density: 0.1,\n rainT1density: 0.1,\n snowSpeed: 1.,\n\n}\n\nclass RainMesh {\n option: IRainOption = _defaultOption\n\n uniforms: any = {}\n mesh!: Group\n loaded!: Promise<Boolean>\n\n constructor() {\n const group = new Group()\n this.mesh = group\n\n if (this.option.texture1)\n this.option.texture1.wrapS = this.option.texture1.wrapT = RepeatWrapping\n if (this.option.texture2rain)\n this.option.texture2rain.wrapS = this.option.texture2rain.wrapT = RepeatWrapping\n this.setUniforms({\n ...this.option,\n iTime: 0,\n })\n\n///////////////////////////////////////////////////RainShader\n const createPlane = (x: number, y: number, z: number, rotationX: number, rotationY: number, rotationZ: number) => {\n const suiji = Math.random() * 800;\n const geometry = new PlaneGeometry(2000+suiji, 3000+suiji);\n const material = new ShaderMaterial({\n //color: 0x00ff00,\n uniforms: this.uniforms,\n vertexShader: RainShader.vertexShader,\n fragmentShader: RainShader.fragmentShader,\n side: 2,\n blending: 2,\n transparent: true,\n depthWrite: false,\n });\n const plane = new Mesh(geometry, material);\n plane.position.set(x, y, z);\n plane.rotation.set(rotationX, rotationY, rotationZ);\n return plane;\n}\n for (let j = -2; j <= 2; j++) {\n const plane = createPlane(0, 0, j * 150, 0, 0, 0);\n this.mesh.add(plane);\n }\n for (let j = -2; j <= 2; j++) {\n const plane = createPlane(j * 150, 0,0 , 0, Math.PI / 2,0);\n this.mesh.add(plane);\n }\n\n\n }\n\n /**\n * 设置天气的Uniforms\n * @param option\n */\n private setUniforms(option: IRainOption) {\n Object.assign(this.option, option)\n\n Object.keys(option).forEach((key: string) => {\n this.uniforms[key] = { value: option[key] }\n })\n }\n\n\n \n public setSize(size: number) {\n this.setUniforms({ size :size})\n }\n public setSpeed(speed: number) {\n this.setUniforms({ snowSpeed :speed})\n }\n \n public setRain(scale:number){\n this.setUniforms({rainT1density:scale})\n }\n public setSnow(scale:number){\n this.setUniforms({snowT1density:scale})\n }\n\n\n public setEffect(ops: IRainOption) {\n const { size, snowT1density, rainT1density, snowSpeed } = ops\n Object.keys(ops).forEach((key: string) => {\n switch (key) {\n\n case 'size':\n this.setSize(size!)\n break\n case 'snowT1density':\n this.setSpeed(snowSpeed!)\n break\n case 'rainT1density':\n this.setRain(rainT1density!)\n break\n case 'snowSpeed':\n this.setSnow(snowT1density!)\n break\n }\n })\n }\n\n\n public update() {\n const { iTime } = this.uniforms\n iTime.value += 0.1\n }\n}\n\nexport default RainMesh"],"mappings":"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"}
|
|
@@ -12,27 +12,43 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
|
|
|
12
12
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
13
13
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
14
14
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
15
|
-
import { Mesh, ShaderMaterial } from '@anov/3d-core';
|
|
15
|
+
import { BufferAttribute, Mesh, ShaderMaterial, SphereGeometry } from '@anov/3d-core';
|
|
16
16
|
import skyShader from "../shaders/sky";
|
|
17
17
|
var SkyMesh = /*#__PURE__*/function (_Mesh) {
|
|
18
18
|
_inherits(SkyMesh, _Mesh);
|
|
19
19
|
var _super = _createSuper(SkyMesh);
|
|
20
|
-
function SkyMesh(
|
|
20
|
+
function SkyMesh() {
|
|
21
21
|
var _this;
|
|
22
22
|
_classCallCheck(this, SkyMesh);
|
|
23
23
|
_this = _super.call(this);
|
|
24
24
|
_defineProperty(_assertThisInitialized(_this), "mesh", void 0);
|
|
25
|
-
_this.
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
_this.geometry = new SphereGeometry(1, 180, 180, 0, Math.PI * 2, 0, 1.5);
|
|
26
|
+
var positions = _this.geometry.attributes.position.array;
|
|
27
|
+
var uvs = new Float32Array(positions.length / 3 * 2); // 创建新的 UV 数组
|
|
28
|
+
|
|
29
|
+
// 重新计算 UV 坐标
|
|
30
|
+
for (var i = 0; i < positions.length / 3; i++) {
|
|
31
|
+
var x = positions[i * 3];
|
|
32
|
+
var z = positions[i * 3 + 2];
|
|
33
|
+
var u = (x * 0.8 + 1) / 2; // 将 x 坐标映射到 [0, 1]
|
|
34
|
+
var v = (z * 0.8 + 1) / 2; // 将 z 坐标映射到 [0, 1]
|
|
35
|
+
|
|
36
|
+
uvs[i * 2] = u;
|
|
37
|
+
uvs[i * 2 + 1] = v;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 将新的 UV 坐标添加到几何体
|
|
41
|
+
_this.geometry.setAttribute('uv', new BufferAttribute(uvs, 2));
|
|
42
|
+
_this.material = new ShaderMaterial({
|
|
28
43
|
vertexShader: skyShader.vertexShader,
|
|
29
44
|
fragmentShader: skyShader.fragmentShader,
|
|
30
45
|
side: 2,
|
|
31
46
|
transparent: true,
|
|
32
47
|
depthWrite: false
|
|
33
48
|
});
|
|
34
|
-
_this.
|
|
35
|
-
_this.
|
|
49
|
+
_this.position.y = -2500;
|
|
50
|
+
_this.scale.set(19990, 8000, 19990);
|
|
51
|
+
_this.renderOrder = -1;
|
|
36
52
|
return _this;
|
|
37
53
|
}
|
|
38
54
|
return _createClass(SkyMesh);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Mesh","ShaderMaterial","skyShader","SkyMesh","
|
|
1
|
+
{"version":3,"names":["BufferAttribute","Mesh","ShaderMaterial","SphereGeometry","skyShader","SkyMesh","geometry","Math","PI","positions","attributes","position","array","uvs","Float32Array","length","i","x","z","u","v","setAttribute","material","vertexShader","fragmentShader","side","transparent","depthWrite","y","scale","set","renderOrder"],"sources":["../../../src/weather/objects/SkyMesh.ts"],"sourcesContent":["import { BufferAttribute, Mesh, ShaderMaterial, SphereGeometry } from '@anov/3d-core'\nimport skyShader from '../shaders/sky'\n\nclass SkyMesh extends Mesh {\n mesh!: Mesh\n\n constructor() {\n super()\n\n this.geometry = new SphereGeometry(1, 180, 180, 0, Math.PI * 2, 0, 1.5)\n\n const positions = this.geometry.attributes.position.array\n const uvs = new Float32Array(positions.length / 3 * 2) // 创建新的 UV 数组\n\n // 重新计算 UV 坐标\n for (let i = 0; i < positions.length / 3; i++) {\n const x = positions[i * 3]\n const z = positions[i * 3 + 2]\n\n const u = (x * 0.8 + 1) / 2 // 将 x 坐标映射到 [0, 1]\n const v = (z * 0.8 + 1) / 2 // 将 z 坐标映射到 [0, 1]\n\n uvs[i * 2] = u\n uvs[i * 2 + 1] = v\n }\n\n // 将新的 UV 坐标添加到几何体\n this.geometry.setAttribute('uv', new BufferAttribute(uvs, 2))\n\n this.material = new ShaderMaterial({\n vertexShader: skyShader.vertexShader,\n fragmentShader: skyShader.fragmentShader,\n side: 2,\n transparent: true,\n depthWrite: false,\n })\n\n this.position.y = -2500\n this.scale.set(19990, 8000, 19990)\n this.renderOrder = -1\n }\n}\n\nexport default SkyMesh"],"mappings":";;;;;;;;;;;;;;AAAA,SAASA,eAAe,EAAEC,IAAI,EAAEC,cAAc,EAAEC,cAAc,QAAQ,eAAe;AACrF,OAAOC,SAAS;AAAsB,IAEhCC,OAAO;EAAA;EAAA;EAGX,mBAAc;IAAA;IAAA;IACZ;IAAO;IAEP,MAAKC,QAAQ,GAAG,IAAIH,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAEI,IAAI,CAACC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAEvE,IAAMC,SAAS,GAAG,MAAKH,QAAQ,CAACI,UAAU,CAACC,QAAQ,CAACC,KAAK;IACzD,IAAMC,GAAG,GAAG,IAAIC,YAAY,CAACL,SAAS,CAACM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC;;IAEvD;IACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,SAAS,CAACM,MAAM,GAAG,CAAC,EAAEC,CAAC,EAAE,EAAE;MAC7C,IAAMC,CAAC,GAAGR,SAAS,CAACO,CAAC,GAAG,CAAC,CAAC;MAC1B,IAAME,CAAC,GAAGT,SAAS,CAACO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MAE9B,IAAMG,CAAC,GAAG,CAACF,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAC;MAC5B,IAAMG,CAAC,GAAG,CAACF,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAC;;MAE5BL,GAAG,CAACG,CAAC,GAAG,CAAC,CAAC,GAAGG,CAAC;MACdN,GAAG,CAACG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAGI,CAAC;IACpB;;IAEA;IACA,MAAKd,QAAQ,CAACe,YAAY,CAAC,IAAI,EAAE,IAAIrB,eAAe,CAACa,GAAG,EAAE,CAAC,CAAC,CAAC;IAE7D,MAAKS,QAAQ,GAAG,IAAIpB,cAAc,CAAC;MACjCqB,YAAY,EAAEnB,SAAS,CAACmB,YAAY;MACpCC,cAAc,EAAEpB,SAAS,CAACoB,cAAc;MACxCC,IAAI,EAAE,CAAC;MACPC,WAAW,EAAE,IAAI;MACjBC,UAAU,EAAE;IACd,CAAC,CAAC;IAEF,MAAKhB,QAAQ,CAACiB,CAAC,GAAG,CAAC,IAAI;IACvB,MAAKC,KAAK,CAACC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAClC,MAAKC,WAAW,GAAG,CAAC,CAAC;IAAA;EACvB;EAAC;AAAA,EArCmB9B,IAAI;AAwC1B,eAAeI,OAAO"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
declare const RainShader: {
|
|
2
|
+
uniforms: {
|
|
3
|
+
texture1: {
|
|
4
|
+
value: null;
|
|
5
|
+
};
|
|
6
|
+
texture2rain: {
|
|
7
|
+
value: null;
|
|
8
|
+
};
|
|
9
|
+
iTime: {
|
|
10
|
+
value: number;
|
|
11
|
+
};
|
|
12
|
+
size: {
|
|
13
|
+
value: number;
|
|
14
|
+
};
|
|
15
|
+
snowT1density: {
|
|
16
|
+
value: number;
|
|
17
|
+
};
|
|
18
|
+
rainT1density: {
|
|
19
|
+
value: number;
|
|
20
|
+
};
|
|
21
|
+
snowSpeed: {
|
|
22
|
+
value: number;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
vertexShader: string;
|
|
26
|
+
fragmentShader: string;
|
|
27
|
+
};
|
|
28
|
+
export default RainShader;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var RainShader = {
|
|
2
|
+
uniforms: {
|
|
3
|
+
texture1: {
|
|
4
|
+
value: null
|
|
5
|
+
},
|
|
6
|
+
texture2rain: {
|
|
7
|
+
value: null
|
|
8
|
+
},
|
|
9
|
+
iTime: {
|
|
10
|
+
value: 0
|
|
11
|
+
},
|
|
12
|
+
size: {
|
|
13
|
+
value: 5.
|
|
14
|
+
},
|
|
15
|
+
snowT1density: {
|
|
16
|
+
value: 0.5
|
|
17
|
+
},
|
|
18
|
+
rainT1density: {
|
|
19
|
+
value: 0.5
|
|
20
|
+
},
|
|
21
|
+
snowSpeed: {
|
|
22
|
+
value: 1.0
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
vertexShader: "\n varying highp vec2 vUv;\n varying vec3 vPosition;\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n//gl_Position = vec4( position, 1.0 );\n }",
|
|
26
|
+
fragmentShader: " \n #define PI 3.14159265359\n\n uniform sampler2D texture1;\n uniform sampler2D texture2rain;\n\n uniform float iTime;\n uniform float size;\n uniform float snowT1density;\n uniform float rainT1density;\n uniform float snowSpeed;\n\n varying highp vec2 vUv;\n\n void main(){\n\n\n vec2 uv= vUv*size;\n/* \n float angle = radians(10.0);\nmat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\nuv = rotationMatrix * (uv - vec2(0.5, 0.5)) + vec2(0.5, 0.5);\n*//////\u6C34\u5E73\u65CB\u8F6C\n/*\nfloat distortAmount = 0.1; // \u63A7\u5236\u626D\u66F2\u7684\u7A0B\u5EA6\nuv.x = uv.x + distortAmount * sin(uv.y * 20.0);\n*//////\u626D\u66F2\n\n// float perspectiveStrength = -0.2; // \u63A7\u5236\u900F\u89C6\u5F3A\u5EA6\n// uv.y = mix(1.0 -uv.y, uv.y, pow(uv.y, perspectiveStrength));\n\n\n vec2 sownMove= vUv*size;\n sownMove.y+=iTime*0.01*snowSpeed;\n sownMove.x+=sin(iTime*0.3)*0.01*snowSpeed;\n\n vec2 rainMove= uv;\n rainMove.y+=iTime*0.2*snowSpeed;\n \n\n vec3 T1 = texture(texture1, sownMove).rgb*snowT1density;\n vec3 T2 = texture(texture2rain, rainMove).rgb*rainT1density;\n\n gl_FragColor = vec4((T1+T2),1.);\n }"
|
|
27
|
+
};
|
|
28
|
+
export default RainShader;
|
|
29
|
+
//# sourceMappingURL=RainPlane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["RainShader","uniforms","texture1","value","texture2rain","iTime","size","snowT1density","rainT1density","snowSpeed","vertexShader","fragmentShader"],"sources":["../../../src/weather/shaders/RainPlane.ts"],"sourcesContent":["const RainShader = {\n uniforms: {\n texture1: { value: null },\n texture2rain: { value: null },\n iTime: { value: 0 },\n\n size: { value: 5. },\n snowT1density: { value: 0.5 },\n rainT1density: { value: 0.5 },\n snowSpeed: { value: 1.0 },\n\n },\n vertexShader: `\n varying highp vec2 vUv;\n varying vec3 vPosition;\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n//gl_Position = vec4( position, 1.0 );\n }`,\n fragmentShader: ` \n #define PI 3.14159265359\n\n uniform sampler2D texture1;\n uniform sampler2D texture2rain;\n\n uniform float iTime;\n uniform float size;\n uniform float snowT1density;\n uniform float rainT1density;\n uniform float snowSpeed;\n\n varying highp vec2 vUv;\n\n void main(){\n\n\n vec2 uv= vUv*size;\n/* \n float angle = radians(10.0);\nmat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\nuv = rotationMatrix * (uv - vec2(0.5, 0.5)) + vec2(0.5, 0.5);\n*//////水平旋转\n/*\nfloat distortAmount = 0.1; // 控制扭曲的程度\nuv.x = uv.x + distortAmount * sin(uv.y * 20.0);\n*//////扭曲\n\n// float perspectiveStrength = -0.2; // 控制透视强度\n// uv.y = mix(1.0 -uv.y, uv.y, pow(uv.y, perspectiveStrength));\n\n\n vec2 sownMove= vUv*size;\n sownMove.y+=iTime*0.01*snowSpeed;\n sownMove.x+=sin(iTime*0.3)*0.01*snowSpeed;\n\n vec2 rainMove= uv;\n rainMove.y+=iTime*0.2*snowSpeed;\n \n\n vec3 T1 = texture(texture1, sownMove).rgb*snowT1density;\n vec3 T2 = texture(texture2rain, rainMove).rgb*rainT1density;\n\n gl_FragColor = vec4((T1+T2),1.);\n }`,\n}\n\nexport default RainShader"],"mappings":"AAAA,IAAMA,UAAU,GAAG;EACjBC,QAAQ,EAAE;IACRC,QAAQ,EAAE;MAAEC,KAAK,EAAE;IAAK,CAAC;IACzBC,YAAY,EAAE;MAAED,KAAK,EAAE;IAAK,CAAC;IAC7BE,KAAK,EAAE;MAAEF,KAAK,EAAE;IAAE,CAAC;IAEnBG,IAAI,EAAE;MAAEH,KAAK,EAAE;IAAG,CAAC;IACnBI,aAAa,EAAE;MAAEJ,KAAK,EAAE;IAAI,CAAC;IAC7BK,aAAa,EAAE;MAAEL,KAAK,EAAE;IAAI,CAAC;IAC7BM,SAAS,EAAE;MAAEN,KAAK,EAAE;IAAI;EAE1B,CAAC;EACDO,YAAY,oOAQV;EACFC,cAAc;AA6ChB,CAAC;AAED,eAAeX,UAAU"}
|
|
@@ -32,7 +32,7 @@ var CloudShader = {
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
vertexShader: "varying highp vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }",
|
|
35
|
-
fragmentShader: "uniform float iTime;\n uniform float cloudDensity;\n uniform float cloudDensity2;\n uniform float cloudalpha;\n uniform float cloudscale;\n uniform float speed;\n uniform float flash;\n // float log;\n uniform vec3 color;\n \n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform sampler2D BackTex1;\n \n varying highp vec2 vUv;\n \n vec3 colorfix(vec3 color) {\n return vec3(color.r * 0.1, color.g * 0.1, color.b * 0.1);//0.00392\n }\n // -----------------------------------------------\n float distanceTo(vec2 src, vec2 dst) {\n float dx = src.x - dst.x;\n float dy = src.y - dst.y;\n float dv = dx * dx + dy * dy;\n return sqrt(dv);\n }\n float Zsin(float x) {\n float y = abs(fract(x * 0.3) - 0.5) * 2.;\n return y;\n }\n // -----------------------------------------------\n \n // -----------------------------------------------\n \n void mainImage(out vec4 fragColor, in vec2 fragCoord) {\n vec2 uv = vUv;\n uv -= vec2(.5);\n vec2 uvR = mat2(cos(iTime * speed), -sin(iTime * speed), sin(iTime * speed), cos(iTime * speed)) * uv;///\u65CB\u8F6C\u77E9\u9635\n // vec2 uvR= vUv;\n vec2 uvR_m = mat2(cos(iTime * 0.8 * speed), -sin(iTime * 0.8 * speed), sin(iTime * 0.8 * speed), cos(iTime * 0.8 * speed)) * uv;///\u65CB\u8F6C\u77E9\u9635\n uvR *= (sin(iTime) * 0.2 + 1.);\n vec3 T1 = texture(texture1, uvR_m * cloudscale).rgb;\n vec3 T2 = texture(texture2, uvR * cloudscale * 0.2).rgb;\n vec3 T1base = vec3(pow(T1.x, cloudDensity) * 10.);\n vec3 T2noise = vec3(pow(T2.x, cloudDensity));\n vec3 T2noiseS = vec3(pow(T2.x, 5.)) * vec3(0.1, 0.5, 0.8) * clamp((Zsin(iTime *
|
|
35
|
+
fragmentShader: "uniform float iTime;\n uniform float cloudDensity;\n uniform float cloudDensity2;\n uniform float cloudalpha;\n uniform float cloudscale;\n uniform float speed;\n uniform float flash;\n // float log;\n uniform vec3 color;\n \n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform sampler2D BackTex1;\n \n varying highp vec2 vUv;\n \n vec3 colorfix(vec3 color) {\n return vec3(color.r * 0.1, color.g * 0.1, color.b * 0.1);//0.00392\n }\n // -----------------------------------------------\n float distanceTo(vec2 src, vec2 dst) {\n float dx = src.x - dst.x;\n float dy = src.y - dst.y;\n float dv = dx * dx + dy * dy;\n return sqrt(dv);\n }\n float Zsin(float x) {\n float y = abs(fract(x * 0.3) - 0.5) * 2.;\n return y;\n }\n // -----------------------------------------------\n \n // -----------------------------------------------\n \n void mainImage(out vec4 fragColor, in vec2 fragCoord) {\n vec2 uv = vUv;\n uv -= vec2(.5);\n vec2 uvR = mat2(cos(iTime * speed), -sin(iTime * speed), sin(iTime * speed), cos(iTime * speed)) * uv;///\u65CB\u8F6C\u77E9\u9635\n // vec2 uvR= vUv;\n vec2 uvR_m = mat2(cos(iTime * 0.8 * speed), -sin(iTime * 0.8 * speed), sin(iTime * 0.8 * speed), cos(iTime * 0.8 * speed)) * uv;///\u65CB\u8F6C\u77E9\u9635\n uvR *= (sin(iTime) * 0.2 + 1.);\n vec3 T1 = texture(texture1, uvR_m * cloudscale).rgb;\n vec3 T2 = texture(texture2, uvR * cloudscale * 0.2).rgb;\n vec3 T1base = vec3(pow(T1.x, cloudDensity) * 10.);\n vec3 T2noise = vec3(pow(T2.x, cloudDensity));\n vec3 T2noiseS = vec3(pow(T2.x, 5.)) * vec3(0.1, 0.5, 0.8) * clamp((Zsin(iTime * 5.) * 100. - 99.), 0., 1.) * flash; \n float sphere = pow(distanceTo(vec2(0.5, 0.5), vUv), 9.) * 1000.;/////\u753B\u5706\u57082\n \n fragColor = vec4(T1base * T2noise * colorfix(color) + T2noiseS, pow(T1.x, cloudalpha) * cloudDensity2 * pow(T2.x, cloudalpha) - sphere);\n \n }\n \n void main() {\n vec2 fragCoord = gl_FragCoord.xy;\n mainImage(gl_FragColor, fragCoord);\n }"
|
|
36
36
|
};
|
|
37
37
|
export default CloudShader;
|
|
38
38
|
//# sourceMappingURL=cloud.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CloudShader","uniforms","texture1","value","texture2","iTime","cloudDensity","cloudDensity2","cloudalpha","cloudscale","speed","color","flash","vertexShader","fragmentShader"],"sources":["../../../src/weather/shaders/cloud.ts"],"sourcesContent":["const CloudShader = {\n uniforms: {\n texture1: { value: null },\n texture2: { value: null },\n iTime: { value: 0 },\n\n cloudDensity: { value: 0.01 },\n cloudDensity2: { value: 1 },\n cloudalpha: { value: 1 },\n cloudscale: { value: 8.0 },\n speed: { value: 0.3 },\n color: { value: [0.9, 0.9, 0.9] },\n flash: { value: 0.0 },\n },\n vertexShader: `varying highp vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `uniform float iTime;\n uniform float cloudDensity;\n uniform float cloudDensity2;\n uniform float cloudalpha;\n uniform float cloudscale;\n uniform float speed;\n uniform float flash;\n // float log;\n uniform vec3 color;\n \n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform sampler2D BackTex1;\n \n varying highp vec2 vUv;\n \n vec3 colorfix(vec3 color) {\n return vec3(color.r * 0.1, color.g * 0.1, color.b * 0.1);//0.00392\n }\n // -----------------------------------------------\n float distanceTo(vec2 src, vec2 dst) {\n float dx = src.x - dst.x;\n float dy = src.y - dst.y;\n float dv = dx * dx + dy * dy;\n return sqrt(dv);\n }\n float Zsin(float x) {\n float y = abs(fract(x * 0.3) - 0.5) * 2.;\n return y;\n }\n // -----------------------------------------------\n \n // -----------------------------------------------\n \n void mainImage(out vec4 fragColor, in vec2 fragCoord) {\n vec2 uv = vUv;\n uv -= vec2(.5);\n vec2 uvR = mat2(cos(iTime * speed), -sin(iTime * speed), sin(iTime * speed), cos(iTime * speed)) * uv;///旋转矩阵\n // vec2 uvR= vUv;\n vec2 uvR_m = mat2(cos(iTime * 0.8 * speed), -sin(iTime * 0.8 * speed), sin(iTime * 0.8 * speed), cos(iTime * 0.8 * speed)) * uv;///旋转矩阵\n uvR *= (sin(iTime) * 0.2 + 1.);\n vec3 T1 = texture(texture1, uvR_m * cloudscale).rgb;\n vec3 T2 = texture(texture2, uvR * cloudscale * 0.2).rgb;\n vec3 T1base = vec3(pow(T1.x, cloudDensity) * 10.);\n vec3 T2noise = vec3(pow(T2.x, cloudDensity));\n vec3 T2noiseS = vec3(pow(T2.x, 5.)) * vec3(0.1, 0.5, 0.8) * clamp((Zsin(iTime *
|
|
1
|
+
{"version":3,"names":["CloudShader","uniforms","texture1","value","texture2","iTime","cloudDensity","cloudDensity2","cloudalpha","cloudscale","speed","color","flash","vertexShader","fragmentShader"],"sources":["../../../src/weather/shaders/cloud.ts"],"sourcesContent":["const CloudShader = {\n uniforms: {\n texture1: { value: null },\n texture2: { value: null },\n iTime: { value: 0 },\n\n cloudDensity: { value: 0.01 },\n cloudDensity2: { value: 1 },\n cloudalpha: { value: 1 },\n cloudscale: { value: 8.0 },\n speed: { value: 0.3 },\n color: { value: [0.9, 0.9, 0.9] },\n flash: { value: 0.0 },\n },\n vertexShader: `varying highp vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `uniform float iTime;\n uniform float cloudDensity;\n uniform float cloudDensity2;\n uniform float cloudalpha;\n uniform float cloudscale;\n uniform float speed;\n uniform float flash;\n // float log;\n uniform vec3 color;\n \n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform sampler2D BackTex1;\n \n varying highp vec2 vUv;\n \n vec3 colorfix(vec3 color) {\n return vec3(color.r * 0.1, color.g * 0.1, color.b * 0.1);//0.00392\n }\n // -----------------------------------------------\n float distanceTo(vec2 src, vec2 dst) {\n float dx = src.x - dst.x;\n float dy = src.y - dst.y;\n float dv = dx * dx + dy * dy;\n return sqrt(dv);\n }\n float Zsin(float x) {\n float y = abs(fract(x * 0.3) - 0.5) * 2.;\n return y;\n }\n // -----------------------------------------------\n \n // -----------------------------------------------\n \n void mainImage(out vec4 fragColor, in vec2 fragCoord) {\n vec2 uv = vUv;\n uv -= vec2(.5);\n vec2 uvR = mat2(cos(iTime * speed), -sin(iTime * speed), sin(iTime * speed), cos(iTime * speed)) * uv;///旋转矩阵\n // vec2 uvR= vUv;\n vec2 uvR_m = mat2(cos(iTime * 0.8 * speed), -sin(iTime * 0.8 * speed), sin(iTime * 0.8 * speed), cos(iTime * 0.8 * speed)) * uv;///旋转矩阵\n uvR *= (sin(iTime) * 0.2 + 1.);\n vec3 T1 = texture(texture1, uvR_m * cloudscale).rgb;\n vec3 T2 = texture(texture2, uvR * cloudscale * 0.2).rgb;\n vec3 T1base = vec3(pow(T1.x, cloudDensity) * 10.);\n vec3 T2noise = vec3(pow(T2.x, cloudDensity));\n vec3 T2noiseS = vec3(pow(T2.x, 5.)) * vec3(0.1, 0.5, 0.8) * clamp((Zsin(iTime * 5.) * 100. - 99.), 0., 1.) * flash; \n float sphere = pow(distanceTo(vec2(0.5, 0.5), vUv), 9.) * 1000.;/////画圆圈2\n \n fragColor = vec4(T1base * T2noise * colorfix(color) + T2noiseS, pow(T1.x, cloudalpha) * cloudDensity2 * pow(T2.x, cloudalpha) - sphere);\n \n }\n \n void main() {\n vec2 fragCoord = gl_FragCoord.xy;\n mainImage(gl_FragColor, fragCoord);\n }`,\n}\n\nexport default CloudShader"],"mappings":"AAAA,IAAMA,WAAW,GAAG;EAClBC,QAAQ,EAAE;IACRC,QAAQ,EAAE;MAAEC,KAAK,EAAE;IAAK,CAAC;IACzBC,QAAQ,EAAE;MAAED,KAAK,EAAE;IAAK,CAAC;IACzBE,KAAK,EAAE;MAAEF,KAAK,EAAE;IAAE,CAAC;IAEnBG,YAAY,EAAE;MAAEH,KAAK,EAAE;IAAK,CAAC;IAC7BI,aAAa,EAAE;MAAEJ,KAAK,EAAE;IAAE,CAAC;IAC3BK,UAAU,EAAE;MAAEL,KAAK,EAAE;IAAE,CAAC;IACxBM,UAAU,EAAE;MAAEN,KAAK,EAAE;IAAI,CAAC;IAC1BO,KAAK,EAAE;MAAEP,KAAK,EAAE;IAAI,CAAC;IACrBQ,KAAK,EAAE;MAAER,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IAAE,CAAC;IACjCS,KAAK,EAAE;MAAET,KAAK,EAAE;IAAI;EACtB,CAAC;EACDU,YAAY,yJAIR;EACJC,cAAc;AAwDhB,CAAC;AAED,eAAed,WAAW"}
|
|
@@ -29,6 +29,15 @@ export interface ICloudOption {
|
|
|
29
29
|
flash?: number;
|
|
30
30
|
iTime?: number;
|
|
31
31
|
}
|
|
32
|
+
export interface IRainOption {
|
|
33
|
+
texture1?: Texture;
|
|
34
|
+
texture2rain?: Texture;
|
|
35
|
+
size?: number;
|
|
36
|
+
snowT1density?: number;
|
|
37
|
+
rainT1density?: number;
|
|
38
|
+
snowSpeed?: number;
|
|
39
|
+
iTime?: number;
|
|
40
|
+
}
|
|
32
41
|
export declare const CloudDensity: {
|
|
33
42
|
[x: string]: {
|
|
34
43
|
cloudDensity: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EWeatherType","Rain_Icon","Snow_Icon","CloudDensity","Clear_Skies","cloudDensity","cloudDensity2","Cloudy","Overcast","Sand_Dust_Calm","Foggy"],"sources":["../../../src/weather/utils/constant.ts"],"sourcesContent":["import type { Texture } from '@anov/3d-core'\nimport { EWeatherType } from './type'\n\nexport const Rain_Icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAOeSURBVHic7Zq9jxRlHMc/z8yz87K3nsCdmOMUuAMT9GJhYgyxk8IYG2sJMTQUUECBuU4aWhusoKUAEhttjH+AEopLLCxQCXLqeUi84y7L7t687lDMjsdL4Nh7npk1eeZbTZ7sfp9v9vns7/nNMyMYkRZu338ZYIeXzQEcnJ64Pooc1igm/T9JjmriA1Ot4wANS+wdDNUEjEJiVBP3gvi3PIDYAeB7cvcochhPQOU14Kc7a/sBfMd+AyAbjP++vLEPYHaP/0eVeWoCqp5wZtKbB8g2Fx+AiXH79ODybJV5jCeg8l0gTtIMQNqP//ZR0gfAbdiVZjKegMpqwHq7Mw9Pr3whR+bjK53oM4DJlnO5ilzGE1DZ/y2K0wigIa3G8z7XC9NFgDFPzlQQqyag9BrwoBudgq1XvlDTtfcD/PLX6kcAh16f+L60cNQElF8DekHcA/Bd6Q/zvW6Y3ARoeY23yshVyHgCSqsBq534LAy/8oXGXPtNgD9Xwk8A9k663+pLtynjCSitBoRx3vMXHd52tREm/wI0vUYpJ0bGE6C9Bqx1ogsAjrSK+30lynzHfgVgtROcAZhoeReUAj4h4wnQVgO++u6WC3Dyw9kAnn3Xt12l/RwoaVta61ZNgC6jdje4BNDynRMAQohSdpj1TnAeYOdL/jkdfjUBuoyeddanW0GUAOC7DS3ZjSdAuQ9YeRCdhPJXvpDn5JH/vt/7FGB6V/Oqil9NgKpBy7OO6AjyosqyvB/YOSY/HgzVBKhImQCBeFtHkBeeb9BeWMJ+T4dfTYAGjwMaPIaWEMzq8DGeAOVuKivK8oikes9hPAHKNaB4rq969jes4uKAQFE1AaoG/X52d3A5peo1jLJ+tqTDpyZA1UAI6+bgslIC+li/6vCpCVA1iNP0RwBH2h9AeWeBhYq+I4rjGzr8agJUDW4tta8BvHNw1xfqcbaWEHn3ut5LvtHhZzwB2v6v3SBZBGi69j5dno+qaPuCKF3O55HTOnyNJ0Db0+G1bvQ5QNP1vs5H9G4GYsDASntD69vkxhOgfc/uhfF1AK8hD8Nm1d6uin0/iPs3AJqufF8146MyngDtb4icurJ0BODi0ddWAVznv7fEhiUh7/iStJv7/lDK8wfjCSitb19Y7E4BzE27CwCetIu7xa3mzAA2wmQZ4M7d8F2AuZnWP2XkrAmoaqJ77XAeYNyVxwCkzWNPlJKUnwHaYXwZ4NVx78sqchlPwENsoeFfLBJUzgAAAABJRU5ErkJggg=='\nexport const Snow_Icon = 'data:image/png;base64,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'\n\ntype vector3Array = [number, number, number]\n\nexport interface ISnowOption {\n range?: number\n count?: number\n opacity?: number\n icon?: string\n size?: number\n speed?: vector3Array\n}\n\nexport interface IFogOption {\n fogcolor?: vector3Array\n alpha?: number\n speed?: number\n iTime?: number\n}\n\nexport interface ICloudOption {\n texture1?: Texture\n texture2?: Texture\n duration?: number\n cloudDensity?: number\n cloudDensity2?: number\n cloudalpha?: number\n cloudscale?: number\n speed?: number\n color?: vector3Array\n flash?: number\n iTime?: number\n}\n\nexport const CloudDensity = {\n [EWeatherType.Clear_Skies]: {\n cloudDensity: 0.05,\n cloudDensity2: 2.0,\n },\n [EWeatherType.Cloudy]: {\n cloudDensity: 0.02,\n cloudDensity2: 1.6,\n },\n [EWeatherType.Overcast]: {\n cloudDensity: 1.93,\n cloudDensity2: 2.2,\n },\n [EWeatherType.Sand_Dust_Calm]: {\n cloudDensity: 2.11,\n cloudDensity2: 2.0,\n },\n [EWeatherType.Foggy]: {\n cloudDensity: 0.01,\n cloudDensity2: 2.0,\n },\n}"],"mappings":";;;;;AACA,SAASA,YAAY;AAErB,OAAO,IAAMC,SAAS,GAAG,g2CAAg2C;AACz3C,OAAO,IAAMC,SAAS,GAAG,4xKAA4xK;
|
|
1
|
+
{"version":3,"names":["EWeatherType","Rain_Icon","Snow_Icon","CloudDensity","Clear_Skies","cloudDensity","cloudDensity2","Cloudy","Overcast","Sand_Dust_Calm","Foggy"],"sources":["../../../src/weather/utils/constant.ts"],"sourcesContent":["import type { Texture } from '@anov/3d-core'\nimport { EWeatherType } from './type'\n\nexport const Rain_Icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAOeSURBVHic7Zq9jxRlHMc/z8yz87K3nsCdmOMUuAMT9GJhYgyxk8IYG2sJMTQUUECBuU4aWhusoKUAEhttjH+AEopLLCxQCXLqeUi84y7L7t687lDMjsdL4Nh7npk1eeZbTZ7sfp9v9vns7/nNMyMYkRZu338ZYIeXzQEcnJ64Pooc1igm/T9JjmriA1Ot4wANS+wdDNUEjEJiVBP3gvi3PIDYAeB7cvcochhPQOU14Kc7a/sBfMd+AyAbjP++vLEPYHaP/0eVeWoCqp5wZtKbB8g2Fx+AiXH79ODybJV5jCeg8l0gTtIMQNqP//ZR0gfAbdiVZjKegMpqwHq7Mw9Pr3whR+bjK53oM4DJlnO5ilzGE1DZ/y2K0wigIa3G8z7XC9NFgDFPzlQQqyag9BrwoBudgq1XvlDTtfcD/PLX6kcAh16f+L60cNQElF8DekHcA/Bd6Q/zvW6Y3ARoeY23yshVyHgCSqsBq534LAy/8oXGXPtNgD9Xwk8A9k663+pLtynjCSitBoRx3vMXHd52tREm/wI0vUYpJ0bGE6C9Bqx1ogsAjrSK+30lynzHfgVgtROcAZhoeReUAj4h4wnQVgO++u6WC3Dyw9kAnn3Xt12l/RwoaVta61ZNgC6jdje4BNDynRMAQohSdpj1TnAeYOdL/jkdfjUBuoyeddanW0GUAOC7DS3ZjSdAuQ9YeRCdhPJXvpDn5JH/vt/7FGB6V/Oqil9NgKpBy7OO6AjyosqyvB/YOSY/HgzVBKhImQCBeFtHkBeeb9BeWMJ+T4dfTYAGjwMaPIaWEMzq8DGeAOVuKivK8oikes9hPAHKNaB4rq969jes4uKAQFE1AaoG/X52d3A5peo1jLJ+tqTDpyZA1UAI6+bgslIC+li/6vCpCVA1iNP0RwBH2h9AeWeBhYq+I4rjGzr8agJUDW4tta8BvHNw1xfqcbaWEHn3ut5LvtHhZzwB2v6v3SBZBGi69j5dno+qaPuCKF3O55HTOnyNJ0Db0+G1bvQ5QNP1vs5H9G4GYsDASntD69vkxhOgfc/uhfF1AK8hD8Nm1d6uin0/iPs3AJqufF8146MyngDtb4icurJ0BODi0ddWAVznv7fEhiUh7/iStJv7/lDK8wfjCSitb19Y7E4BzE27CwCetIu7xa3mzAA2wmQZ4M7d8F2AuZnWP2XkrAmoaqJ77XAeYNyVxwCkzWNPlJKUnwHaYXwZ4NVx78sqchlPwENsoeFfLBJUzgAAAABJRU5ErkJggg=='\nexport const Snow_Icon = 'data:image/png;base64,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'\n\ntype vector3Array = [number, number, number]\n\nexport interface ISnowOption {\n range?: number\n count?: number\n opacity?: number\n icon?: string\n size?: number\n speed?: vector3Array\n}\n\nexport interface IFogOption {\n fogcolor?: vector3Array\n alpha?: number\n speed?: number\n iTime?: number\n}\n\nexport interface ICloudOption {\n texture1?: Texture\n texture2?: Texture\n duration?: number\n cloudDensity?: number\n cloudDensity2?: number\n cloudalpha?: number\n cloudscale?: number\n speed?: number\n color?: vector3Array\n flash?: number\n iTime?: number\n}\n\nexport interface IRainOption {\n texture1?: Texture\n texture2rain?: Texture\n size?: number\n snowT1density?: number\n rainT1density?: number\n snowSpeed?: number\n iTime?: number\n}\nexport const CloudDensity = {\n [EWeatherType.Clear_Skies]: {\n cloudDensity: 0.05,\n cloudDensity2: 2.0,\n },\n [EWeatherType.Cloudy]: {\n cloudDensity: 0.02,\n cloudDensity2: 1.6,\n },\n [EWeatherType.Overcast]: {\n cloudDensity: 1.93,\n cloudDensity2: 2.2,\n },\n [EWeatherType.Sand_Dust_Calm]: {\n cloudDensity: 2.11,\n cloudDensity2: 2.0,\n },\n [EWeatherType.Foggy]: {\n cloudDensity: 0.01,\n cloudDensity2: 2.0,\n },\n}"],"mappings":";;;;;AACA,SAASA,YAAY;AAErB,OAAO,IAAMC,SAAS,GAAG,g2CAAg2C;AACz3C,OAAO,IAAMC,SAAS,GAAG,4xKAA4xK;AA2CrzK,OAAO,IAAMC,YAAY,uDACtBH,YAAY,CAACI,WAAW,EAAG;EAC1BC,YAAY,EAAE,IAAI;EAClBC,aAAa,EAAE;AACjB,CAAC,kCACAN,YAAY,CAACO,MAAM,EAAG;EACrBF,YAAY,EAAE,IAAI;EAClBC,aAAa,EAAE;AACjB,CAAC,kCACAN,YAAY,CAACQ,QAAQ,EAAG;EACvBH,YAAY,EAAE,IAAI;EAClBC,aAAa,EAAE;AACjB,CAAC,kCACAN,YAAY,CAACS,cAAc,EAAG;EAC7BJ,YAAY,EAAE,IAAI;EAClBC,aAAa,EAAE;AACjB,CAAC,kCACAN,YAAY,CAACU,KAAK,EAAG;EACpBL,YAAY,EAAE,IAAI;EAClBC,aAAa,EAAE;AACjB,CAAC,iBACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anov/3d-ability",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.15",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "MIT",
|
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
"readme.md",
|
|
16
16
|
"package.json"
|
|
17
17
|
],
|
|
18
|
+
"peerDependencies": {
|
|
19
|
+
"@anov/3d-core": "^0.0.16"
|
|
20
|
+
},
|
|
18
21
|
"dependencies": {
|
|
19
22
|
"@types/suncalc": "^1.9.2",
|
|
20
23
|
"anov-heat-map": "^0.0.1",
|
|
@@ -23,10 +26,7 @@
|
|
|
23
26
|
"suncalc": "^1.9.0"
|
|
24
27
|
},
|
|
25
28
|
"devDependencies": {
|
|
26
|
-
"@anov/3d-core": "^0.0.
|
|
27
|
-
},
|
|
28
|
-
"peerDependencies": {
|
|
29
|
-
"@anov/3d-core": "^0.0.13"
|
|
29
|
+
"@anov/3d-core": "^0.0.16"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "father build",
|