ohzi-core 12.5.2 → 12.7.0

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.
Files changed (265) hide show
  1. package/README.md +9 -9
  2. package/build/index.mjs +1 -1
  3. package/build/index.mjs.map +1 -1
  4. package/build/index.module.js +2 -0
  5. package/build/index.module.js.map +1 -0
  6. package/package.json +64 -63
  7. package/src/.vscode/settings.json +2 -2
  8. package/src/BaseApplication.js +40 -40
  9. package/src/Browser.js +119 -119
  10. package/src/CameraManager.js +37 -37
  11. package/src/Capabilities.js +13 -13
  12. package/src/CustomBezierCurve.js +58 -58
  13. package/src/Debug.js +359 -359
  14. package/src/Graphics.js +507 -507
  15. package/src/Initializer.js +56 -56
  16. package/src/KeyboardInput.js +177 -177
  17. package/src/OS.js +59 -59
  18. package/src/OScreen.js +90 -90
  19. package/src/OrthographicCamera.js +36 -36
  20. package/src/PerspectiveCamera.js +34 -34
  21. package/src/ReflectionPlaneContext.js +22 -22
  22. package/src/RenderLayers.js +30 -30
  23. package/src/RenderLoop.js +125 -122
  24. package/src/RenderOrder.js +40 -40
  25. package/src/ResourceContainer.js +57 -57
  26. package/src/SceneManager.js +55 -55
  27. package/src/Screen.js +71 -71
  28. package/src/Time.js +99 -98
  29. package/src/UI.js +106 -106
  30. package/src/action_sequencer/ActionEvent.js +22 -22
  31. package/src/action_sequencer/ActionInterpolator.js +39 -39
  32. package/src/action_sequencer/ActionSequencer.js +338 -338
  33. package/src/action_sequencer/NumberInterpolator.js +42 -42
  34. package/src/action_sequencer/VectorInterpolator.js +34 -34
  35. package/src/blitter_index.js +14 -14
  36. package/src/canvas_drawer/CanvasDrawer.js +146 -146
  37. package/src/canvas_drawer/MultiLineTextDrawer.js +58 -58
  38. package/src/canvas_drawer/SimpleTextDrawer.js +55 -55
  39. package/src/components/AudioClip.js +67 -67
  40. package/src/components/AxisHelper.js +60 -60
  41. package/src/components/BaseObject.js +50 -50
  42. package/src/components/EdgeMesh.js +172 -172
  43. package/src/components/GeometryEdgeVisualizer.js +57 -57
  44. package/src/components/Grid.js +40 -40
  45. package/src/components/Line.js +225 -225
  46. package/src/components/MultiLinePath.js +25 -25
  47. package/src/components/MultiLineText2D.js +75 -75
  48. package/src/components/ObjectAxis.js +27 -27
  49. package/src/components/ObjectOrientedBoundingBox.js +228 -228
  50. package/src/components/PlaneHelper.js +38 -38
  51. package/src/components/Shape2D.js +52 -52
  52. package/src/components/Shape3D.js +46 -46
  53. package/src/components/Text2D.js +49 -49
  54. package/src/components/UIElement.js +246 -246
  55. package/src/components/UpdatableMaterialMesh.js +26 -26
  56. package/src/components/WorldImage.js +101 -101
  57. package/src/components/mouse_interactors/ObjectRotator.js +64 -64
  58. package/src/components/sdf_text/SDFText.js +156 -156
  59. package/src/components/sdf_text/SDFTextBatch.js +195 -195
  60. package/src/components/sdf_text/TextGlyph.js +17 -17
  61. package/src/data_textures/CustomDataTexture.js +53 -53
  62. package/src/data_textures/RGBADataTexture.js +14 -14
  63. package/src/data_textures/RGBAFloatDataTexture.js +14 -14
  64. package/src/data_textures/RGBDataTexture.js +14 -14
  65. package/src/data_textures/RGBFloatDataTexture.js +13 -13
  66. package/src/editor/ManipulatorHandle.js +73 -73
  67. package/src/editor/ObjectEditor.js +68 -68
  68. package/src/editor/ObjectManipulator.js +112 -112
  69. package/src/editor/ObjectPicker.js +77 -77
  70. package/src/editor/shaders/object_picker.frag +5 -5
  71. package/src/editor/shaders/object_picker.vert +7 -7
  72. package/src/gpu_particles/GPUParticleSystem.js +111 -111
  73. package/src/gpu_particles/ParticleAttribute.js +89 -89
  74. package/src/gpu_particles/ParticlePositionAttribute.js +42 -42
  75. package/src/html_utilities/CSSAnimator.js +66 -66
  76. package/src/html_utilities/css_animator_states/Animating.js +46 -46
  77. package/src/html_utilities/css_animator_states/Idle.js +27 -27
  78. package/src/index.js +134 -134
  79. package/src/loaders/AsyncAbstractLoader.js +160 -160
  80. package/src/loaders/AsyncAudiosLoader.js +34 -34
  81. package/src/loaders/AsyncObjectsLoader.js +44 -44
  82. package/src/loaders/AsyncTexturesLoader.js +81 -70
  83. package/src/loaders/assets_loader/AsyncAssetsLoaderWorker.js +69 -69
  84. package/src/loaders/assets_loader/ResourceContainer.js +37 -37
  85. package/src/loaders/assets_loader/ResourceLoaderChecker.js +39 -39
  86. package/src/materials/AddMaterial.js +20 -20
  87. package/src/materials/AlphaFilterMaterial.js +23 -23
  88. package/src/materials/BaseShaderMaterial.js +21 -21
  89. package/src/materials/BlitMaterial.js +30 -30
  90. package/src/materials/BloomComposeMaterial.js +24 -24
  91. package/src/materials/BoxBlurMaterial.js +16 -16
  92. package/src/materials/ClearAlphaMaterial.js +15 -15
  93. package/src/materials/ClearColorMaterial.js +33 -33
  94. package/src/materials/ClearDepthNormalMaterial.js +16 -16
  95. package/src/materials/DeferredRendererComposeMaterial.js +35 -35
  96. package/src/materials/DepthNormalMaterial.js +30 -30
  97. package/src/materials/DisplayNormalTextureMaterial.js +18 -18
  98. package/src/materials/DualFilteringBlurMaterial.js +14 -14
  99. package/src/materials/FXAAMaterial.js +12 -12
  100. package/src/materials/GaussianBlurMaterial.js +40 -40
  101. package/src/materials/LuminosityHighPassMaterial.js +26 -26
  102. package/src/materials/MedianFilterMaterial.js +45 -45
  103. package/src/materials/NormalMaterial.js +19 -19
  104. package/src/materials/SDFScreenTextMaterial.js +34 -34
  105. package/src/materials/SDFTextMaterial.js +41 -41
  106. package/src/materials/SSAOComposeMaterial.js +14 -14
  107. package/src/materials/SSAOMaterial.js +65 -65
  108. package/src/materials/ScreenSpaceTextureMaterial.js +67 -67
  109. package/src/materials/UIElementMaterial.js +30 -30
  110. package/src/materials/UnrealBloomComposeMaterial.js +100 -100
  111. package/src/materials/UnrealBlurMaterial.js +20 -20
  112. package/src/materials/UnrealComposeMaterial.js +27 -27
  113. package/src/materials/ViewPositionMaterial.js +19 -19
  114. package/src/materials/deferred/DeferredPointLightMaterial.js +42 -42
  115. package/src/materials/gpu_particles/AttributeUpdateMaterial.js +37 -37
  116. package/src/materials/gpu_particles/BasicParticleMaterial.js +25 -25
  117. package/src/materials/gpu_particles/ParticleStorageMaterial.js +37 -37
  118. package/src/materials/gpu_particles/PositionStorageMaterial.js +26 -26
  119. package/src/object_pool/Pool.js +75 -75
  120. package/src/primitives/Arrow.js +62 -62
  121. package/src/primitives/Cube.js +24 -24
  122. package/src/primitives/HorizontalPlane.js +27 -27
  123. package/src/primitives/Sphere.js +22 -22
  124. package/src/primitives/VerticalPlane.js +26 -26
  125. package/src/raycast/GroupRaycaster.js +43 -43
  126. package/src/raycast/PlaneDragResolver.js +92 -92
  127. package/src/raycast/PlaneRaycastResolver.js +24 -24
  128. package/src/raycast/PlaneRaycaster.js +25 -25
  129. package/src/raycast/RaycastResolver.js +24 -24
  130. package/src/raycast/SurfaceDragResolver.js +80 -80
  131. package/src/raycast/states/BaseState.js +18 -18
  132. package/src/raycast/states/IdleState.js +19 -19
  133. package/src/raycast/states/OnRaycastEnter.js +17 -17
  134. package/src/raycast/states/OnRaycastExit.js +18 -18
  135. package/src/raycast/states/OnRaycastHover.js +27 -27
  136. package/src/render_mode/BaseRender.js +34 -34
  137. package/src/render_mode/BloomRender.js +63 -63
  138. package/src/render_mode/DebugNormalsRender.js +22 -22
  139. package/src/render_mode/DeferredRender.js +110 -110
  140. package/src/render_mode/NormalAORender.js +72 -72
  141. package/src/render_mode/NormalRender.js +38 -38
  142. package/src/render_mode/OutlineRender.js +157 -157
  143. package/src/render_mode/PlanarReflectionsRender.js +121 -121
  144. package/src/render_mode/UnrealBloomRender.js +123 -123
  145. package/src/render_mode/VRRender.js +71 -71
  146. package/src/render_utilities/Blitter.js +101 -101
  147. package/src/render_utilities/Blurrer.js +31 -31
  148. package/src/render_utilities/DepthAndNormalsRenderer.js +47 -47
  149. package/src/render_utilities/DualFilteringBlurrer.js +58 -58
  150. package/src/render_utilities/GaussianBlurrer.js +167 -167
  151. package/src/render_utilities/MedianFilter.js +68 -68
  152. package/src/render_utilities/ViewPositionRenderer.js +50 -50
  153. package/src/resource_loader/BasisLoader.js +51 -51
  154. package/src/resource_loader/FontLoader.js +48 -48
  155. package/src/resource_loader/JSONLoader.js +35 -35
  156. package/src/resource_loader/OBJLoader.js +48 -48
  157. package/src/resource_loader/PointArrayLoader.js +72 -72
  158. package/src/resource_loader/RGBETextureLoader.js +48 -48
  159. package/src/resource_loader/VideoLoader.js +32 -32
  160. package/src/scenes/AbstractScene.js +175 -175
  161. package/src/scenes/loading_states/CompilatorManager.js +41 -41
  162. package/src/scenes/loading_states/HighQualityLoadingState.js +28 -28
  163. package/src/scenes/loading_states/LoadingState.js +117 -117
  164. package/src/scenes/loading_states/RegularLoadingState.js +41 -41
  165. package/src/shaders/add/add.frag +27 -27
  166. package/src/shaders/anti_aliasing/fxaa.frag +72 -72
  167. package/src/shaders/basic_color/basic_color.frag +5 -5
  168. package/src/shaders/basic_color/basic_color.vert +9 -9
  169. package/src/shaders/basic_line/basic_line.frag +36 -36
  170. package/src/shaders/basic_line/basic_line.vert +37 -37
  171. package/src/shaders/basic_texture/basic_texture.frag +9 -9
  172. package/src/shaders/basic_texture/basic_texture.vert +16 -16
  173. package/src/shaders/bloom/bloom_compose_frag.glsl +22 -22
  174. package/src/shaders/bloom/cheap_bloom_compose_frag.glsl +13 -13
  175. package/src/shaders/box_blur/box_blur.frag +24 -24
  176. package/src/shaders/box_blur/compose.frag +31 -31
  177. package/src/shaders/clear/clear_depth_normal.frag +24 -24
  178. package/src/shaders/copy/copy.frag +6 -6
  179. package/src/shaders/copy/copy.vert +5 -5
  180. package/src/shaders/deferred/blit_copy.vert +11 -11
  181. package/src/shaders/deferred/deferred_compose.frag +59 -59
  182. package/src/shaders/deferred/point_light.frag +66 -66
  183. package/src/shaders/deferred/point_light.vert +13 -13
  184. package/src/shaders/depth_normals/debug_normals.frag +47 -47
  185. package/src/shaders/depth_normals/depth_normals.frag +30 -30
  186. package/src/shaders/depth_normals/depth_normals.vert +12 -12
  187. package/src/shaders/dual_filter_blur/alpha_filter.frag +14 -14
  188. package/src/shaders/dual_filter_blur/downsample.frag +21 -21
  189. package/src/shaders/dual_filter_blur/upsample.frag +24 -24
  190. package/src/shaders/edge_visualizer/edge_visualizer.frag +17 -17
  191. package/src/shaders/edge_visualizer/edge_visualizer.vert +15 -15
  192. package/src/shaders/edges/corners.frag +10 -10
  193. package/src/shaders/edges/corners.vert +30 -30
  194. package/src/shaders/edges/edges.frag +6 -6
  195. package/src/shaders/edges/edges.vert +27 -27
  196. package/src/shaders/gaussian_blur/gaussian_blur.frag +43 -43
  197. package/src/shaders/gaussian_blur/unreal_bloom_compose.frag +36 -36
  198. package/src/shaders/gpu_particles/common_utils.glsl +12 -12
  199. package/src/shaders/gpu_particles/generic_storage.frag +6 -6
  200. package/src/shaders/gpu_particles/store/store_position.vert +14 -14
  201. package/src/shaders/gpu_particles/update/basic_update.frag +20 -20
  202. package/src/shaders/gpu_particles/visualize/visualize.frag +10 -10
  203. package/src/shaders/gpu_particles/visualize/visualize.vert +12 -12
  204. package/src/shaders/grid/grid.frag +16 -16
  205. package/src/shaders/grid/grid.vert +9 -9
  206. package/src/shaders/luminosity_high_pass/luminosity_high_pass.frag +37 -37
  207. package/src/shaders/median_filter/median_filter.frag +134 -134
  208. package/src/shaders/normal/normal.frag +6 -6
  209. package/src/shaders/normal/normal.vert +6 -6
  210. package/src/shaders/sdf_text/sdf_screen_text.frag +51 -51
  211. package/src/shaders/sdf_text/sdf_screen_text.vert +41 -41
  212. package/src/shaders/sdf_text/sdf_text.frag +53 -53
  213. package/src/shaders/sdf_text/sdf_text.vert +41 -41
  214. package/src/shaders/ssao/hbao.frag +264 -264
  215. package/src/shaders/ssao/ssao.frag +95 -95
  216. package/src/shaders/ssao/ssao.vert +10 -10
  217. package/src/shaders/ssao/ssao_compose.frag +14 -14
  218. package/src/shaders/transparent_mix/copy.frag +6 -6
  219. package/src/shaders/transparent_mix/transparent_mix.frag +18 -18
  220. package/src/shaders/transparent_mix/transparent_mix.vert +7 -7
  221. package/src/shaders/ui/ss_texture.frag +10 -10
  222. package/src/shaders/ui/ss_texture.vert +31 -31
  223. package/src/shaders/ui/ws_texture.vert +38 -38
  224. package/src/shaders/ui_element/ui_element.frag +11 -11
  225. package/src/shaders/ui_element/ui_element.vert +32 -32
  226. package/src/shaders/unreal_blur/unreal_blur.frag +24 -24
  227. package/src/shaders/unreal_blur/unreal_compose.frag +23 -23
  228. package/src/shaders/write_view_position/write_view_position.frag +6 -6
  229. package/src/shaders/write_view_position/write_view_position.vert +8 -8
  230. package/src/static_batcher/BatchedMesh.js +56 -56
  231. package/src/static_batcher/GeometryBatch.js +308 -308
  232. package/src/static_batcher/GeometryBatcher.js +64 -64
  233. package/src/static_batcher/MeshBatcher.js +58 -58
  234. package/src/ui/ui_element_position/ScreenSpacePosition.js +16 -16
  235. package/src/ui/ui_element_position/WorldSpacePosition.js +23 -23
  236. package/src/ui/ui_element_state/OnIdle.js +24 -24
  237. package/src/ui/ui_element_state/OnMouseEnter.js +39 -39
  238. package/src/ui/ui_element_state/OnMouseExit.js +22 -22
  239. package/src/ui/ui_element_state/OnMouseHover.js +46 -46
  240. package/src/ui/ui_element_state/UIElementState.js +34 -34
  241. package/src/utilities/ArrayUtilities.js +57 -57
  242. package/src/utilities/CameraUtilities.js +283 -283
  243. package/src/utilities/EasingFunctions.js +231 -231
  244. package/src/utilities/FrustumPointFitter.js +257 -257
  245. package/src/utilities/GeometryUtilities.js +76 -76
  246. package/src/utilities/HTMLUtilities.js +76 -76
  247. package/src/utilities/ImageUtilities.js +28 -28
  248. package/src/utilities/MeshSampler.js +206 -206
  249. package/src/utilities/ModelUtilities.js +162 -162
  250. package/src/utilities/OMath.js +158 -158
  251. package/src/utilities/OrthographicFrustumPointFitter.js +49 -49
  252. package/src/utilities/PerspectiveFrustumPointFitter.js +254 -254
  253. package/src/utilities/StringUtilities.js +43 -43
  254. package/src/utilities/TimeUtilities.js +24 -24
  255. package/src/utilities/Validation.js +36 -36
  256. package/src/view_components/ApplicationView.js +73 -73
  257. package/src/view_components/TransitionManager.js +75 -75
  258. package/src/view_components/ViewComponent.js +61 -61
  259. package/src/view_components/ViewComponentManager.js +69 -69
  260. package/src/view_components/ViewManager.js +145 -145
  261. package/src/view_components/ViewState.js +49 -49
  262. package/src/view_components/transition/ActionSequencerBuilder.js +124 -124
  263. package/src/view_components/transition/DrawIOAnimationSheet.js +92 -92
  264. package/src/view_components/transition/TransitionTable.js +54 -54
  265. package/src/view_components/transition/ViewStateTransitionHandler.js +106 -106
@@ -1,225 +1,225 @@
1
- // @ts-check
2
- // @ts-ignore
3
- import line_vs from '../shaders/basic_line/basic_line.vert';
4
- // @ts-ignore
5
- import line_fs from '../shaders/basic_line/basic_line.frag';
6
-
7
- import { Mesh, Vector3 } from 'three'; // eslint-disable-line no-unused-vars
8
- import { BufferAttribute } from 'three';
9
- import { BufferGeometry } from 'three';
10
- import { ShaderMaterial } from 'three';
11
- import { Color } from 'three';
12
-
13
- class Line extends Mesh
14
- {
15
- /**
16
- * @param {Vector3[]} [points]
17
- */
18
- constructor(points)
19
- {
20
- const geometry = new BufferGeometry();
21
- geometry.setAttribute('position', new BufferAttribute(new Float32Array([]), 3));
22
- geometry.setAttribute('next_position', new BufferAttribute(new Float32Array([]), 3));
23
- geometry.setAttribute('previous_position', new BufferAttribute(new Float32Array([]), 3));
24
- geometry.setAttribute('orientation', new BufferAttribute(new Float32Array([]), 1));
25
- geometry.setAttribute('coverage', new BufferAttribute(new Float32Array([]), 1));
26
-
27
- const material = new ShaderMaterial({
28
- uniforms: {
29
- _Thickness: { value: 0.2 },
30
- _Length: { value: 0 },
31
- _ElapsedTime: { value: 0 },
32
- _Color: { value: new Color('#FF0000') }
33
- },
34
- vertexShader: line_vs,
35
- fragmentShader: line_fs,
36
- transparent: true,
37
- depthWrite: false,
38
- // @ts-ignore
39
- extensions: { derivatives: true }
40
-
41
- });
42
-
43
- super(geometry, material);
44
- this.material = material;
45
- if (points)
46
- {
47
- this.setup(points);
48
- }
49
- }
50
-
51
- /**
52
- * @param {Vector3[]} points
53
- */
54
- setup(points)
55
- {
56
- const vertices = [];
57
- const next_position = [];
58
- const previous_position = [];
59
- const orientation = [];
60
- const coverage = [];
61
- let accumulated_length = 0;
62
-
63
- for (let i = 0; i < points.length; i++)
64
- {
65
- vertices.push(points[i].x);
66
- vertices.push(points[i].y);
67
- vertices.push(points[i].z);
68
- orientation.push(1);
69
-
70
- vertices.push(points[i].x);
71
- vertices.push(points[i].y);
72
- vertices.push(points[i].z);
73
- orientation.push(-1);
74
-
75
- const next_point = this.__get_next_position(points, i);
76
- next_position.push(next_point.x);
77
- next_position.push(next_point.y);
78
- next_position.push(next_point.z);
79
-
80
- next_position.push(next_point.x);
81
- next_position.push(next_point.y);
82
- next_position.push(next_point.z);
83
-
84
- const previous_point = this.__get_previous_position(points, i);
85
- previous_position.push(previous_point.x);
86
- previous_position.push(previous_point.y);
87
- previous_position.push(previous_point.z);
88
-
89
- previous_position.push(previous_point.x);
90
- previous_position.push(previous_point.y);
91
- previous_position.push(previous_point.z);
92
-
93
- coverage.push(accumulated_length);
94
- coverage.push(accumulated_length);
95
-
96
- if (i < points.length - 1)
97
- {
98
- accumulated_length += points[i].distanceTo(next_point);
99
- }
100
- }
101
- const vertexList = new Float32Array(vertices);
102
- const nextPositionList = new Float32Array(next_position);
103
- const previousPositionList = new Float32Array(previous_position);
104
- const orientationList = new Float32Array(orientation);
105
- const coverageList = new Float32Array(coverage);
106
-
107
- const indices = [];
108
- for (let i = 0; i < ((vertexList.length / 3) - 2) / 2; i++)
109
- {
110
- const index = (i * 2) + 1;
111
- indices.push(index);
112
- indices.push(index + 1);
113
- indices.push(index - 1);
114
-
115
- indices.push(index);
116
- indices.push(index + 2);
117
- indices.push(index + 1);
118
- }
119
-
120
- this.geometry.setIndex(indices);
121
- /** @type {BufferAttribute} */(this.geometry.getAttribute('position')).copy(new BufferAttribute(vertexList, 3));
122
- /** @type {BufferAttribute} */(this.geometry.getAttribute('next_position')).copy(new BufferAttribute(nextPositionList, 3));
123
- /** @type {BufferAttribute} */(this.geometry.getAttribute('previous_position')).copy(new BufferAttribute(previousPositionList, 3));
124
- /** @type {BufferAttribute} */(this.geometry.getAttribute('orientation')).copy(new BufferAttribute(orientationList, 1));
125
- /** @type {BufferAttribute} */(this.geometry.getAttribute('coverage')).copy(new BufferAttribute(coverageList, 1));
126
-
127
- this.geometry.getAttribute('position').needsUpdate = true;
128
- this.geometry.getAttribute('next_position').needsUpdate = true;
129
- this.geometry.getAttribute('previous_position').needsUpdate = true;
130
- this.geometry.getAttribute('orientation').needsUpdate = true;
131
- this.geometry.getAttribute('coverage').needsUpdate = true;
132
-
133
- this.material.uniforms._Length.value = accumulated_length;
134
- this._length = accumulated_length;
135
- this.accumulated_length = accumulated_length;
136
- }
137
-
138
- set thickness(value)
139
- {
140
- this.material.uniforms._Thickness.value = value;
141
- }
142
-
143
- get thickness()
144
- {
145
- return this.material.uniforms._Thickness.value;
146
- }
147
-
148
- /**
149
- * @param {Vector3[]} points
150
- * @param {number} i
151
- * @returns {Vector3}
152
- */
153
- __get_previous_position(points, i)
154
- {
155
- if (i === 0)
156
- {
157
- return points[1].clone().sub(points[0]).multiplyScalar(-1).add(points[0]);
158
- }
159
- else
160
- {
161
- return points[i - 1];
162
- }
163
- }
164
-
165
- /**
166
- * @param {Vector3[]} points
167
- * @param {number} i
168
- * @returns {Vector3}
169
- */
170
- __get_next_position(points, i)
171
- {
172
- if (i === points.length - 1)
173
- {
174
- return points[points.length - 2].clone().sub(points[points.length - 1]).multiplyScalar(-1).add(points[points.length - 1]);
175
- }
176
- else
177
- {
178
- return points[i + 1];
179
- }
180
- }
181
-
182
- update()
183
- {
184
- }
185
-
186
- distance()
187
- {
188
- return this.accumulated_length;
189
- }
190
-
191
- total_length()
192
- {
193
- return this.accumulated_length;
194
- }
195
-
196
- dispose()
197
- {
198
- this.geometry.dispose();
199
- this.material.dispose();
200
- if (this.parent)
201
- {
202
- this.parent.remove(this);
203
- }
204
- }
205
-
206
- set color(col)
207
- {
208
- this.material.uniforms._Color.value.set(col);
209
- }
210
-
211
- get color()
212
- {
213
- return this.material.uniforms._Color.value;
214
- }
215
-
216
- /**
217
- * @param {Color} col
218
- */
219
- copy_color(col)
220
- {
221
- this.material.uniforms._Color.value.copy(col);
222
- }
223
- }
224
-
225
- export { Line };
1
+ // @ts-check
2
+ // @ts-ignore
3
+ import line_vs from '../shaders/basic_line/basic_line.vert';
4
+ // @ts-ignore
5
+ import line_fs from '../shaders/basic_line/basic_line.frag';
6
+
7
+ import { Mesh, Vector3 } from 'three'; // eslint-disable-line no-unused-vars
8
+ import { BufferAttribute } from 'three';
9
+ import { BufferGeometry } from 'three';
10
+ import { ShaderMaterial } from 'three';
11
+ import { Color } from 'three';
12
+
13
+ class Line extends Mesh
14
+ {
15
+ /**
16
+ * @param {Vector3[]} [points]
17
+ */
18
+ constructor(points)
19
+ {
20
+ const geometry = new BufferGeometry();
21
+ geometry.setAttribute('position', new BufferAttribute(new Float32Array([]), 3));
22
+ geometry.setAttribute('next_position', new BufferAttribute(new Float32Array([]), 3));
23
+ geometry.setAttribute('previous_position', new BufferAttribute(new Float32Array([]), 3));
24
+ geometry.setAttribute('orientation', new BufferAttribute(new Float32Array([]), 1));
25
+ geometry.setAttribute('coverage', new BufferAttribute(new Float32Array([]), 1));
26
+
27
+ const material = new ShaderMaterial({
28
+ uniforms: {
29
+ _Thickness: { value: 0.2 },
30
+ _Length: { value: 0 },
31
+ _ElapsedTime: { value: 0 },
32
+ _Color: { value: new Color('#FF0000') }
33
+ },
34
+ vertexShader: line_vs,
35
+ fragmentShader: line_fs,
36
+ transparent: true,
37
+ depthWrite: false,
38
+ // @ts-ignore
39
+ extensions: { derivatives: true }
40
+
41
+ });
42
+
43
+ super(geometry, material);
44
+ this.material = material;
45
+ if (points)
46
+ {
47
+ this.setup(points);
48
+ }
49
+ }
50
+
51
+ /**
52
+ * @param {Vector3[]} points
53
+ */
54
+ setup(points)
55
+ {
56
+ const vertices = [];
57
+ const next_position = [];
58
+ const previous_position = [];
59
+ const orientation = [];
60
+ const coverage = [];
61
+ let accumulated_length = 0;
62
+
63
+ for (let i = 0; i < points.length; i++)
64
+ {
65
+ vertices.push(points[i].x);
66
+ vertices.push(points[i].y);
67
+ vertices.push(points[i].z);
68
+ orientation.push(1);
69
+
70
+ vertices.push(points[i].x);
71
+ vertices.push(points[i].y);
72
+ vertices.push(points[i].z);
73
+ orientation.push(-1);
74
+
75
+ const next_point = this.__get_next_position(points, i);
76
+ next_position.push(next_point.x);
77
+ next_position.push(next_point.y);
78
+ next_position.push(next_point.z);
79
+
80
+ next_position.push(next_point.x);
81
+ next_position.push(next_point.y);
82
+ next_position.push(next_point.z);
83
+
84
+ const previous_point = this.__get_previous_position(points, i);
85
+ previous_position.push(previous_point.x);
86
+ previous_position.push(previous_point.y);
87
+ previous_position.push(previous_point.z);
88
+
89
+ previous_position.push(previous_point.x);
90
+ previous_position.push(previous_point.y);
91
+ previous_position.push(previous_point.z);
92
+
93
+ coverage.push(accumulated_length);
94
+ coverage.push(accumulated_length);
95
+
96
+ if (i < points.length - 1)
97
+ {
98
+ accumulated_length += points[i].distanceTo(next_point);
99
+ }
100
+ }
101
+ const vertexList = new Float32Array(vertices);
102
+ const nextPositionList = new Float32Array(next_position);
103
+ const previousPositionList = new Float32Array(previous_position);
104
+ const orientationList = new Float32Array(orientation);
105
+ const coverageList = new Float32Array(coverage);
106
+
107
+ const indices = [];
108
+ for (let i = 0; i < ((vertexList.length / 3) - 2) / 2; i++)
109
+ {
110
+ const index = (i * 2) + 1;
111
+ indices.push(index);
112
+ indices.push(index + 1);
113
+ indices.push(index - 1);
114
+
115
+ indices.push(index);
116
+ indices.push(index + 2);
117
+ indices.push(index + 1);
118
+ }
119
+
120
+ this.geometry.setIndex(indices);
121
+ /** @type {BufferAttribute} */(this.geometry.getAttribute('position')).copy(new BufferAttribute(vertexList, 3));
122
+ /** @type {BufferAttribute} */(this.geometry.getAttribute('next_position')).copy(new BufferAttribute(nextPositionList, 3));
123
+ /** @type {BufferAttribute} */(this.geometry.getAttribute('previous_position')).copy(new BufferAttribute(previousPositionList, 3));
124
+ /** @type {BufferAttribute} */(this.geometry.getAttribute('orientation')).copy(new BufferAttribute(orientationList, 1));
125
+ /** @type {BufferAttribute} */(this.geometry.getAttribute('coverage')).copy(new BufferAttribute(coverageList, 1));
126
+
127
+ this.geometry.getAttribute('position').needsUpdate = true;
128
+ this.geometry.getAttribute('next_position').needsUpdate = true;
129
+ this.geometry.getAttribute('previous_position').needsUpdate = true;
130
+ this.geometry.getAttribute('orientation').needsUpdate = true;
131
+ this.geometry.getAttribute('coverage').needsUpdate = true;
132
+
133
+ this.material.uniforms._Length.value = accumulated_length;
134
+ this._length = accumulated_length;
135
+ this.accumulated_length = accumulated_length;
136
+ }
137
+
138
+ set thickness(value)
139
+ {
140
+ this.material.uniforms._Thickness.value = value;
141
+ }
142
+
143
+ get thickness()
144
+ {
145
+ return this.material.uniforms._Thickness.value;
146
+ }
147
+
148
+ /**
149
+ * @param {Vector3[]} points
150
+ * @param {number} i
151
+ * @returns {Vector3}
152
+ */
153
+ __get_previous_position(points, i)
154
+ {
155
+ if (i === 0)
156
+ {
157
+ return points[1].clone().sub(points[0]).multiplyScalar(-1).add(points[0]);
158
+ }
159
+ else
160
+ {
161
+ return points[i - 1];
162
+ }
163
+ }
164
+
165
+ /**
166
+ * @param {Vector3[]} points
167
+ * @param {number} i
168
+ * @returns {Vector3}
169
+ */
170
+ __get_next_position(points, i)
171
+ {
172
+ if (i === points.length - 1)
173
+ {
174
+ return points[points.length - 2].clone().sub(points[points.length - 1]).multiplyScalar(-1).add(points[points.length - 1]);
175
+ }
176
+ else
177
+ {
178
+ return points[i + 1];
179
+ }
180
+ }
181
+
182
+ update()
183
+ {
184
+ }
185
+
186
+ distance()
187
+ {
188
+ return this.accumulated_length;
189
+ }
190
+
191
+ total_length()
192
+ {
193
+ return this.accumulated_length;
194
+ }
195
+
196
+ dispose()
197
+ {
198
+ this.geometry.dispose();
199
+ this.material.dispose();
200
+ if (this.parent)
201
+ {
202
+ this.parent.remove(this);
203
+ }
204
+ }
205
+
206
+ set color(col)
207
+ {
208
+ this.material.uniforms._Color.value.set(col);
209
+ }
210
+
211
+ get color()
212
+ {
213
+ return this.material.uniforms._Color.value;
214
+ }
215
+
216
+ /**
217
+ * @param {Color} col
218
+ */
219
+ copy_color(col)
220
+ {
221
+ this.material.uniforms._Color.value.copy(col);
222
+ }
223
+ }
224
+
225
+ export { Line };
@@ -1,25 +1,25 @@
1
- // @ts-check
2
- import { Line } from './Line';
3
-
4
- import { Object3D, Vector3 } from 'three'; // eslint-disable-line no-unused-vars
5
-
6
- class MultiLinePath extends Object3D
7
- {
8
- /**
9
- * @param {Array<Vector3[]>} paths
10
- */
11
- constructor(paths)
12
- {
13
- super();
14
-
15
- this.paths = [];
16
- for (let i = 0; i < paths.length; i++)
17
- {
18
- const line = new Line(paths[i]);
19
- this.paths.push(line);
20
- this.add(line);
21
- }
22
- }
23
- }
24
-
25
- export { MultiLinePath };
1
+ // @ts-check
2
+ import { Line } from './Line';
3
+
4
+ import { Object3D, Vector3 } from 'three'; // eslint-disable-line no-unused-vars
5
+
6
+ class MultiLinePath extends Object3D
7
+ {
8
+ /**
9
+ * @param {Array<Vector3[]>} paths
10
+ */
11
+ constructor(paths)
12
+ {
13
+ super();
14
+
15
+ this.paths = [];
16
+ for (let i = 0; i < paths.length; i++)
17
+ {
18
+ const line = new Line(paths[i]);
19
+ this.paths.push(line);
20
+ this.add(line);
21
+ }
22
+ }
23
+ }
24
+
25
+ export { MultiLinePath };
@@ -1,75 +1,75 @@
1
- // @ts-check
2
- import { Text2D } from './Text2D';
3
-
4
- import { Object3D } from 'three';
5
- import { Vector2 } from 'three';
6
-
7
- class MultiLineText2D extends Object3D
8
- {
9
- /**
10
- * @param {string[]} text_array
11
- * @param {string} [font]
12
- * @param {string | number} [color]
13
- * @param {Vector2} [pivot]
14
- * @param {boolean} [is_static]
15
- */
16
- constructor(text_array, font, color, pivot, is_static) // eslint-disable-line no-unused-vars
17
- {
18
- super();
19
-
20
- font = font || '200px Arial';
21
- color = color || '#000000';
22
- pivot = pivot || new Vector2();
23
-
24
- this.text_array = [];
25
-
26
- for (let i = 0; i < text_array.length; i++)
27
- {
28
- const text2D = new Text2D(text_array[i], font, color, pivot);
29
- this.text_array.push(text2D);
30
- this.add(text2D);
31
- }
32
-
33
- this.update_text_positions();
34
- }
35
-
36
- update_text_positions()
37
- {
38
- for (let i = 0; i < this.text_array.length; i++)
39
- {
40
- this.text_array[i].position.y = -this.text_array[i].size.y * i;
41
- }
42
- }
43
-
44
- set texts(text_array)
45
- {
46
- for (let i = 0; i < this.text_array.length; i++)
47
- {
48
- this.text_array[i].text = text_array[i];
49
- }
50
- }
51
-
52
- set size(value)
53
- {
54
- for (let i = 0; i < this.text_array.length; i++)
55
- {
56
- this.text_array[i].size.set(value, value, value);
57
- }
58
- this.update_text_positions();
59
- }
60
-
61
- /**
62
- * @returns {string[]}
63
- */
64
- get texts()
65
- {
66
- return [];
67
- }
68
-
69
- get size()
70
- {
71
- return 1;
72
- }
73
- }
74
-
75
- export { MultiLineText2D };
1
+ // @ts-check
2
+ import { Text2D } from './Text2D';
3
+
4
+ import { Object3D } from 'three';
5
+ import { Vector2 } from 'three';
6
+
7
+ class MultiLineText2D extends Object3D
8
+ {
9
+ /**
10
+ * @param {string[]} text_array
11
+ * @param {string} [font]
12
+ * @param {string | number} [color]
13
+ * @param {Vector2} [pivot]
14
+ * @param {boolean} [is_static]
15
+ */
16
+ constructor(text_array, font, color, pivot, is_static) // eslint-disable-line no-unused-vars
17
+ {
18
+ super();
19
+
20
+ font = font || '200px Arial';
21
+ color = color || '#000000';
22
+ pivot = pivot || new Vector2();
23
+
24
+ this.text_array = [];
25
+
26
+ for (let i = 0; i < text_array.length; i++)
27
+ {
28
+ const text2D = new Text2D(text_array[i], font, color, pivot);
29
+ this.text_array.push(text2D);
30
+ this.add(text2D);
31
+ }
32
+
33
+ this.update_text_positions();
34
+ }
35
+
36
+ update_text_positions()
37
+ {
38
+ for (let i = 0; i < this.text_array.length; i++)
39
+ {
40
+ this.text_array[i].position.y = -this.text_array[i].size.y * i;
41
+ }
42
+ }
43
+
44
+ set texts(text_array)
45
+ {
46
+ for (let i = 0; i < this.text_array.length; i++)
47
+ {
48
+ this.text_array[i].text = text_array[i];
49
+ }
50
+ }
51
+
52
+ set size(value)
53
+ {
54
+ for (let i = 0; i < this.text_array.length; i++)
55
+ {
56
+ this.text_array[i].size.set(value, value, value);
57
+ }
58
+ this.update_text_positions();
59
+ }
60
+
61
+ /**
62
+ * @returns {string[]}
63
+ */
64
+ get texts()
65
+ {
66
+ return [];
67
+ }
68
+
69
+ get size()
70
+ {
71
+ return 1;
72
+ }
73
+ }
74
+
75
+ export { MultiLineText2D };