@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.
@@ -1,5 +1,5 @@
1
1
  import type { OrbitControls, PerspectiveCamera, SceneControl } from '@anov/3d-core';
2
- declare type vector3Array = [number, number, number];
2
+ declare type vector3Array = number[];
3
3
  declare class Camera {
4
4
  private camera;
5
5
  private controls;
@@ -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
- finalComposer.addPass(renderScene);
57
- finalComposer.addPass(mixPass);
58
- finalComposer.addPass(gammaCorrectionShader);
59
- finalComposer.addPass(effectCopy);
60
- finalComposer.addPass(colorify);
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
- finalComposer.render();
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","finalComposer","gammaCorrectionShader","materials","darkMaterial","cleanBloomBefore","useframeAfter","traverse","obj","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 } from '@anov/3d-core'\nimport ColorifyShader from './shader/colorify'\n\nconst { EffectComposer, RenderPass, UnrealBloomPass, ShaderPass, GammaCorrectionShader, CopyShader, FXAAShader } = lib\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 if (!scene || !camera || !renderer)\n throw new Error('scene or camera is not defined,')\n\n const BLOOM_SCENE = 1\n\n const bloomLayer = new Layers()\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 finalComposer = new EffectComposer(renderer)\n\n const gammaCorrectionShader = new ShaderPass(GammaCorrectionShader)\n\n finalComposer.addPass(renderScene)\n finalComposer.addPass(mixPass)\n finalComposer.addPass(gammaCorrectionShader)\n finalComposer.addPass(effectCopy)\n finalComposer.addPass(colorify)\n // finalComposer.addPass(effectFXAA)\n\n const materials = {} as any\n const darkMaterial = new MeshBasicMaterial({ color: 'black' })\n\n const cleanBloomBefore = use.useframeAfter(() => {\n scene.traverse((obj: any) => {\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 (materials[obj.uuid]) {\n obj.material = materials[obj.uuid]\n delete materials[obj.uuid]\n }\n })\n\n finalComposer.render()\n })\n\n // const cleanBloomAfter = use.useComposerFrame(() => {\n\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 }\n}\n\nexport default createBloomSelectedTool"],"mappings":"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"}
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":"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"}
@@ -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
- composer.render();
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;EAExC,IAAMI,iBAAiB,GAAGH,IAAI,CAAE,YAAM;IACpCH,WAAW,IAAIA,WAAW,EAAE;IAC5BH,QAAQ,CAACU,MAAM,EAAE;IACjBN,UAAU,IAAIA,UAAU,EAAE;EAC5B,CAAC,CAAC;EAEFV,KAAK,GAAG,iBAAM;IACZH,eAAe,CAACoB,MAAM,CAAC,UAAU,CAAC;IAClCpB,eAAe,CAACoB,MAAM,CAAC,YAAY,CAAC;IAEpCF,iBAAiB,EAAE;EACrB,CAAC;EAED,OAAO;IACLT,QAAQ,EAARA,QAAQ;IACRN,KAAK,EAALA;EACF,CAAC;AACH,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"}
@@ -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<boolean>;
14
+ init(): Promise<void>;
14
15
  /**
15
16
  * 天气设置
16
17
  * @param weatherType 天气枚举值
@@ -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 { ModelLoader, use } from '@anov/3d-core';
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
- var load = new ModelLoader();
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.loaded = this.init();
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 gltf, mesh, _use$useScene, scene;
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
- _context.next = 2;
40
- return load.loadGLTF('./skySphereMesh.glb', false, true, './draco/');
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.mesh);
48
- scene === null || scene === void 0 ? void 0 : scene.add(this.cloud.mesh);
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
- return _context.abrupt("return", true);
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 ? 6 : _context2.t0 === EWeatherType.Sand_Dust_Calm ? 6 : _context2.t0 === EWeatherType.Clear_Skies ? 7 : _context2.t0 === EWeatherType.Cloudy ? 7 : _context2.t0 === EWeatherType.Overcast ? 7 : _context2.t0 === EWeatherType.Rain ? 9 : _context2.t0 === EWeatherType.Rain_Thunderstorm ? 9 : _context2.t0 === EWeatherType.Snow ? 9 : _context2.t0 === EWeatherType.Snow_Blizzard ? 9 : 11;
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 6:
75
+ case 4:
85
76
  // 沙尘暴
86
77
  this._createFogMesh(weatherType);
87
- case 7:
78
+ case 5:
88
79
  // 阴天
89
80
  this._createCloudMesh(weatherType);
90
- return _context2.abrupt("break", 11);
91
- case 9:
81
+ return _context2.abrupt("break", 9);
82
+ case 7:
92
83
  // 暴雪
93
84
  this._createSnowMesh(weatherType);
94
- return _context2.abrupt("break", 11);
95
- case 11:
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: 8.0,
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: 8.0,
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: 8.0,
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, 5, 0],
197
+ speed: [0, 4, 0],
206
198
  size: 2,
207
199
  icon: Rain_Icon,
208
- count: 3000
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, 10, 0],
212
+ speed: [0, 6, 0],
215
213
  size: 2,
216
214
  icon: Rain_Icon,
217
- count: 6000
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, 2, 0],
224
- size: 10,
227
+ speed: [0, 1.5, 0],
228
+ size: 4,
225
229
  icon: Snow_Icon,
226
- count: 1000
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, 4, 0],
233
- size: 10,
242
+ speed: [0, 2, 0],
243
+ size: 5,
234
244
  icon: Snow_Icon,
235
- count: 2000
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: Group;
6
+ mesh: Mesh;
8
7
  loaded: Promise<Boolean>;
9
- constructor(mesh: Group);
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(mesh) {
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
- // @ts-ignore
51
- _this.mesh.children[0].material = new ShaderMaterial({
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.mesh.scale.set(997, 997, 997);
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.01;
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","mesh","option","wrapS","wrapT","setUniforms","iTime","children","material","uniforms","vertexShader","fragmentShader","side","transparent","depthWrite","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 { Mesh, RepeatWrapping, ShaderMaterial, 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!: Group\n loaded!: Promise<Boolean>\n\n constructor(mesh: Group) {\n super()\n this.mesh = mesh\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 // @ts-ignore\n this.mesh.children[0].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.mesh.scale.set(997, 997, 997)\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 public update() {\n const { iTime } = this.uniforms\n iTime.value += 0.01\n }\n}\n\nexport default CloudMesh"],"mappings":"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"}
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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"}
@@ -1,7 +1,6 @@
1
- import type { Group } from '@anov/3d-core';
2
1
  import { Mesh } from '@anov/3d-core';
3
2
  declare class SkyMesh extends Mesh {
4
- mesh: Group;
5
- constructor(mesh: Group);
3
+ mesh: Mesh;
4
+ constructor();
6
5
  }
7
6
  export default SkyMesh;
@@ -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(mesh) {
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.mesh = mesh;
26
- // @ts-ignore
27
- _this.mesh.children[0].material = new ShaderMaterial({
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.mesh.scale.set(1000, 1000, 1000);
35
- _this.mesh.renderOrder = -1;
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","mesh","children","material","vertexShader","fragmentShader","side","transparent","depthWrite","scale","set","renderOrder"],"sources":["../../../src/weather/objects/SkyMesh.ts"],"sourcesContent":["import type { Group } from '@anov/3d-core'\nimport { Mesh, ShaderMaterial } from '@anov/3d-core'\nimport skyShader from '../shaders/sky'\n\nclass SkyMesh extends Mesh {\n mesh!: Group\n\n constructor(mesh: Group) {\n super()\n this.mesh = mesh\n // @ts-ignore\n this.mesh.children[0].material = new ShaderMaterial({\n vertexShader: skyShader.vertexShader,\n fragmentShader: skyShader.fragmentShader,\n side: 2,\n transparent: true,\n depthWrite: false,\n })\n this.mesh.scale.set(1000, 1000, 1000)\n this.mesh.renderOrder = -1\n }\n}\n\nexport default SkyMesh"],"mappings":";;;;;;;;;;;;;;AACA,SAASA,IAAI,EAAEC,cAAc,QAAQ,eAAe;AACpD,OAAOC,SAAS;AAAsB,IAEhCC,OAAO;EAAA;EAAA;EAGX,iBAAYC,IAAW,EAAE;IAAA;IAAA;IACvB;IAAO;IACP,MAAKA,IAAI,GAAGA,IAAI;IAChB;IACA,MAAKA,IAAI,CAACC,QAAQ,CAAC,CAAC,CAAC,CAACC,QAAQ,GAAG,IAAIL,cAAc,CAAC;MAClDM,YAAY,EAAEL,SAAS,CAACK,YAAY;MACpCC,cAAc,EAAEN,SAAS,CAACM,cAAc;MACxCC,IAAI,EAAE,CAAC;MACPC,WAAW,EAAE,IAAI;MACjBC,UAAU,EAAE;IACd,CAAC,CAAC;IACF,MAAKP,IAAI,CAACQ,KAAK,CAACC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACrC,MAAKT,IAAI,CAACU,WAAW,GAAG,CAAC,CAAC;IAAA;EAC5B;EAAC;AAAA,EAhBmBd,IAAI;AAmB1B,eAAeG,OAAO"}
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 * 50.) * 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 }"
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 * 50.) * 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"}
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;AAkCrzK,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"}
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.14",
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.13"
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",