ohzi-core 12.6.0 → 12.8.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 (263) 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/package.json +63 -63
  5. package/src/.vscode/settings.json +2 -2
  6. package/src/BaseApplication.js +40 -40
  7. package/src/Browser.js +119 -119
  8. package/src/CameraManager.js +37 -37
  9. package/src/Capabilities.js +13 -13
  10. package/src/CustomBezierCurve.js +58 -58
  11. package/src/Debug.js +359 -359
  12. package/src/Graphics.js +507 -507
  13. package/src/Initializer.js +56 -56
  14. package/src/KeyboardInput.js +177 -177
  15. package/src/OS.js +59 -59
  16. package/src/OScreen.js +90 -90
  17. package/src/OrthographicCamera.js +36 -36
  18. package/src/PerspectiveCamera.js +34 -34
  19. package/src/ReflectionPlaneContext.js +22 -22
  20. package/src/RenderLayers.js +30 -30
  21. package/src/RenderLoop.js +125 -122
  22. package/src/RenderOrder.js +40 -40
  23. package/src/ResourceContainer.js +57 -57
  24. package/src/SceneManager.js +55 -55
  25. package/src/Screen.js +71 -71
  26. package/src/Time.js +97 -98
  27. package/src/UI.js +106 -106
  28. package/src/action_sequencer/ActionEvent.js +22 -22
  29. package/src/action_sequencer/ActionInterpolator.js +39 -39
  30. package/src/action_sequencer/ActionSequencer.js +358 -338
  31. package/src/action_sequencer/NumberInterpolator.js +42 -42
  32. package/src/action_sequencer/VectorInterpolator.js +34 -34
  33. package/src/blitter_index.js +14 -14
  34. package/src/canvas_drawer/CanvasDrawer.js +146 -146
  35. package/src/canvas_drawer/MultiLineTextDrawer.js +58 -58
  36. package/src/canvas_drawer/SimpleTextDrawer.js +55 -55
  37. package/src/components/AudioClip.js +67 -67
  38. package/src/components/AxisHelper.js +60 -60
  39. package/src/components/BaseObject.js +50 -50
  40. package/src/components/EdgeMesh.js +172 -172
  41. package/src/components/GeometryEdgeVisualizer.js +57 -57
  42. package/src/components/Grid.js +40 -40
  43. package/src/components/Line.js +225 -225
  44. package/src/components/MultiLinePath.js +25 -25
  45. package/src/components/MultiLineText2D.js +75 -75
  46. package/src/components/ObjectAxis.js +27 -27
  47. package/src/components/ObjectOrientedBoundingBox.js +228 -228
  48. package/src/components/PlaneHelper.js +38 -38
  49. package/src/components/Shape2D.js +52 -52
  50. package/src/components/Shape3D.js +46 -46
  51. package/src/components/Text2D.js +49 -49
  52. package/src/components/UIElement.js +246 -246
  53. package/src/components/UpdatableMaterialMesh.js +26 -26
  54. package/src/components/WorldImage.js +101 -101
  55. package/src/components/mouse_interactors/ObjectRotator.js +64 -64
  56. package/src/components/sdf_text/SDFText.js +156 -156
  57. package/src/components/sdf_text/SDFTextBatch.js +195 -195
  58. package/src/components/sdf_text/TextGlyph.js +17 -17
  59. package/src/data_textures/CustomDataTexture.js +53 -53
  60. package/src/data_textures/RGBADataTexture.js +14 -14
  61. package/src/data_textures/RGBAFloatDataTexture.js +14 -14
  62. package/src/data_textures/RGBDataTexture.js +14 -14
  63. package/src/data_textures/RGBFloatDataTexture.js +13 -13
  64. package/src/editor/ManipulatorHandle.js +73 -73
  65. package/src/editor/ObjectEditor.js +68 -68
  66. package/src/editor/ObjectManipulator.js +112 -112
  67. package/src/editor/ObjectPicker.js +77 -77
  68. package/src/editor/shaders/object_picker.frag +5 -5
  69. package/src/editor/shaders/object_picker.vert +7 -7
  70. package/src/gpu_particles/GPUParticleSystem.js +111 -111
  71. package/src/gpu_particles/ParticleAttribute.js +89 -89
  72. package/src/gpu_particles/ParticlePositionAttribute.js +42 -42
  73. package/src/html_utilities/CSSAnimator.js +66 -66
  74. package/src/html_utilities/css_animator_states/Animating.js +46 -46
  75. package/src/html_utilities/css_animator_states/Idle.js +27 -27
  76. package/src/index.js +134 -134
  77. package/src/loaders/AsyncAbstractLoader.js +160 -160
  78. package/src/loaders/AsyncAudiosLoader.js +34 -34
  79. package/src/loaders/AsyncObjectsLoader.js +44 -44
  80. package/src/loaders/AsyncTexturesLoader.js +81 -81
  81. package/src/loaders/assets_loader/AsyncAssetsLoaderWorker.js +69 -69
  82. package/src/loaders/assets_loader/ResourceContainer.js +37 -37
  83. package/src/loaders/assets_loader/ResourceLoaderChecker.js +39 -39
  84. package/src/materials/AddMaterial.js +20 -20
  85. package/src/materials/AlphaFilterMaterial.js +23 -23
  86. package/src/materials/BaseShaderMaterial.js +21 -21
  87. package/src/materials/BlitMaterial.js +30 -30
  88. package/src/materials/BloomComposeMaterial.js +24 -24
  89. package/src/materials/BoxBlurMaterial.js +16 -16
  90. package/src/materials/ClearAlphaMaterial.js +15 -15
  91. package/src/materials/ClearColorMaterial.js +33 -33
  92. package/src/materials/ClearDepthNormalMaterial.js +16 -16
  93. package/src/materials/DeferredRendererComposeMaterial.js +35 -35
  94. package/src/materials/DepthNormalMaterial.js +30 -30
  95. package/src/materials/DisplayNormalTextureMaterial.js +18 -18
  96. package/src/materials/DualFilteringBlurMaterial.js +14 -14
  97. package/src/materials/FXAAMaterial.js +12 -12
  98. package/src/materials/GaussianBlurMaterial.js +40 -40
  99. package/src/materials/LuminosityHighPassMaterial.js +26 -26
  100. package/src/materials/MedianFilterMaterial.js +45 -45
  101. package/src/materials/NormalMaterial.js +19 -19
  102. package/src/materials/SDFScreenTextMaterial.js +34 -34
  103. package/src/materials/SDFTextMaterial.js +41 -41
  104. package/src/materials/SSAOComposeMaterial.js +14 -14
  105. package/src/materials/SSAOMaterial.js +65 -65
  106. package/src/materials/ScreenSpaceTextureMaterial.js +67 -67
  107. package/src/materials/UIElementMaterial.js +30 -30
  108. package/src/materials/UnrealBloomComposeMaterial.js +100 -100
  109. package/src/materials/UnrealBlurMaterial.js +20 -20
  110. package/src/materials/UnrealComposeMaterial.js +27 -27
  111. package/src/materials/ViewPositionMaterial.js +19 -19
  112. package/src/materials/deferred/DeferredPointLightMaterial.js +42 -42
  113. package/src/materials/gpu_particles/AttributeUpdateMaterial.js +37 -37
  114. package/src/materials/gpu_particles/BasicParticleMaterial.js +25 -25
  115. package/src/materials/gpu_particles/ParticleStorageMaterial.js +37 -37
  116. package/src/materials/gpu_particles/PositionStorageMaterial.js +26 -26
  117. package/src/object_pool/Pool.js +75 -75
  118. package/src/primitives/Arrow.js +62 -62
  119. package/src/primitives/Cube.js +24 -24
  120. package/src/primitives/HorizontalPlane.js +27 -27
  121. package/src/primitives/Sphere.js +22 -22
  122. package/src/primitives/VerticalPlane.js +26 -26
  123. package/src/raycast/GroupRaycaster.js +43 -43
  124. package/src/raycast/PlaneDragResolver.js +92 -92
  125. package/src/raycast/PlaneRaycastResolver.js +24 -24
  126. package/src/raycast/PlaneRaycaster.js +25 -25
  127. package/src/raycast/RaycastResolver.js +24 -24
  128. package/src/raycast/SurfaceDragResolver.js +80 -80
  129. package/src/raycast/states/BaseState.js +18 -18
  130. package/src/raycast/states/IdleState.js +19 -19
  131. package/src/raycast/states/OnRaycastEnter.js +17 -17
  132. package/src/raycast/states/OnRaycastExit.js +18 -18
  133. package/src/raycast/states/OnRaycastHover.js +27 -27
  134. package/src/render_mode/BaseRender.js +34 -34
  135. package/src/render_mode/BloomRender.js +63 -63
  136. package/src/render_mode/DebugNormalsRender.js +22 -22
  137. package/src/render_mode/DeferredRender.js +110 -110
  138. package/src/render_mode/NormalAORender.js +72 -72
  139. package/src/render_mode/NormalRender.js +38 -38
  140. package/src/render_mode/OutlineRender.js +157 -157
  141. package/src/render_mode/PlanarReflectionsRender.js +121 -121
  142. package/src/render_mode/UnrealBloomRender.js +123 -123
  143. package/src/render_mode/VRRender.js +71 -71
  144. package/src/render_utilities/Blitter.js +101 -101
  145. package/src/render_utilities/Blurrer.js +31 -31
  146. package/src/render_utilities/DepthAndNormalsRenderer.js +47 -47
  147. package/src/render_utilities/DualFilteringBlurrer.js +58 -58
  148. package/src/render_utilities/GaussianBlurrer.js +167 -167
  149. package/src/render_utilities/MedianFilter.js +68 -68
  150. package/src/render_utilities/ViewPositionRenderer.js +50 -50
  151. package/src/resource_loader/BasisLoader.js +51 -51
  152. package/src/resource_loader/FontLoader.js +48 -48
  153. package/src/resource_loader/JSONLoader.js +35 -35
  154. package/src/resource_loader/OBJLoader.js +48 -48
  155. package/src/resource_loader/PointArrayLoader.js +72 -72
  156. package/src/resource_loader/RGBETextureLoader.js +48 -48
  157. package/src/resource_loader/VideoLoader.js +32 -32
  158. package/src/scenes/AbstractScene.js +175 -175
  159. package/src/scenes/loading_states/CompilatorManager.js +41 -41
  160. package/src/scenes/loading_states/HighQualityLoadingState.js +28 -28
  161. package/src/scenes/loading_states/LoadingState.js +117 -117
  162. package/src/scenes/loading_states/RegularLoadingState.js +41 -41
  163. package/src/shaders/add/add.frag +27 -27
  164. package/src/shaders/anti_aliasing/fxaa.frag +72 -72
  165. package/src/shaders/basic_color/basic_color.frag +5 -5
  166. package/src/shaders/basic_color/basic_color.vert +9 -9
  167. package/src/shaders/basic_line/basic_line.frag +36 -36
  168. package/src/shaders/basic_line/basic_line.vert +37 -37
  169. package/src/shaders/basic_texture/basic_texture.frag +9 -9
  170. package/src/shaders/basic_texture/basic_texture.vert +16 -16
  171. package/src/shaders/bloom/bloom_compose_frag.glsl +22 -22
  172. package/src/shaders/bloom/cheap_bloom_compose_frag.glsl +13 -13
  173. package/src/shaders/box_blur/box_blur.frag +24 -24
  174. package/src/shaders/box_blur/compose.frag +31 -31
  175. package/src/shaders/clear/clear_depth_normal.frag +24 -24
  176. package/src/shaders/copy/copy.frag +6 -6
  177. package/src/shaders/copy/copy.vert +5 -5
  178. package/src/shaders/deferred/blit_copy.vert +11 -11
  179. package/src/shaders/deferred/deferred_compose.frag +59 -59
  180. package/src/shaders/deferred/point_light.frag +66 -66
  181. package/src/shaders/deferred/point_light.vert +13 -13
  182. package/src/shaders/depth_normals/debug_normals.frag +47 -47
  183. package/src/shaders/depth_normals/depth_normals.frag +30 -30
  184. package/src/shaders/depth_normals/depth_normals.vert +12 -12
  185. package/src/shaders/dual_filter_blur/alpha_filter.frag +14 -14
  186. package/src/shaders/dual_filter_blur/downsample.frag +21 -21
  187. package/src/shaders/dual_filter_blur/upsample.frag +24 -24
  188. package/src/shaders/edge_visualizer/edge_visualizer.frag +17 -17
  189. package/src/shaders/edge_visualizer/edge_visualizer.vert +15 -15
  190. package/src/shaders/edges/corners.frag +10 -10
  191. package/src/shaders/edges/corners.vert +30 -30
  192. package/src/shaders/edges/edges.frag +6 -6
  193. package/src/shaders/edges/edges.vert +27 -27
  194. package/src/shaders/gaussian_blur/gaussian_blur.frag +43 -43
  195. package/src/shaders/gaussian_blur/unreal_bloom_compose.frag +36 -36
  196. package/src/shaders/gpu_particles/common_utils.glsl +12 -12
  197. package/src/shaders/gpu_particles/generic_storage.frag +6 -6
  198. package/src/shaders/gpu_particles/store/store_position.vert +14 -14
  199. package/src/shaders/gpu_particles/update/basic_update.frag +20 -20
  200. package/src/shaders/gpu_particles/visualize/visualize.frag +10 -10
  201. package/src/shaders/gpu_particles/visualize/visualize.vert +12 -12
  202. package/src/shaders/grid/grid.frag +16 -16
  203. package/src/shaders/grid/grid.vert +9 -9
  204. package/src/shaders/luminosity_high_pass/luminosity_high_pass.frag +37 -37
  205. package/src/shaders/median_filter/median_filter.frag +134 -134
  206. package/src/shaders/normal/normal.frag +6 -6
  207. package/src/shaders/normal/normal.vert +6 -6
  208. package/src/shaders/sdf_text/sdf_screen_text.frag +51 -51
  209. package/src/shaders/sdf_text/sdf_screen_text.vert +41 -41
  210. package/src/shaders/sdf_text/sdf_text.frag +53 -53
  211. package/src/shaders/sdf_text/sdf_text.vert +41 -41
  212. package/src/shaders/ssao/hbao.frag +264 -264
  213. package/src/shaders/ssao/ssao.frag +95 -95
  214. package/src/shaders/ssao/ssao.vert +10 -10
  215. package/src/shaders/ssao/ssao_compose.frag +14 -14
  216. package/src/shaders/transparent_mix/copy.frag +6 -6
  217. package/src/shaders/transparent_mix/transparent_mix.frag +18 -18
  218. package/src/shaders/transparent_mix/transparent_mix.vert +7 -7
  219. package/src/shaders/ui/ss_texture.frag +10 -10
  220. package/src/shaders/ui/ss_texture.vert +31 -31
  221. package/src/shaders/ui/ws_texture.vert +38 -38
  222. package/src/shaders/ui_element/ui_element.frag +11 -11
  223. package/src/shaders/ui_element/ui_element.vert +32 -32
  224. package/src/shaders/unreal_blur/unreal_blur.frag +24 -24
  225. package/src/shaders/unreal_blur/unreal_compose.frag +23 -23
  226. package/src/shaders/write_view_position/write_view_position.frag +6 -6
  227. package/src/shaders/write_view_position/write_view_position.vert +8 -8
  228. package/src/static_batcher/BatchedMesh.js +56 -56
  229. package/src/static_batcher/GeometryBatch.js +308 -308
  230. package/src/static_batcher/GeometryBatcher.js +64 -64
  231. package/src/static_batcher/MeshBatcher.js +58 -58
  232. package/src/ui/ui_element_position/ScreenSpacePosition.js +16 -16
  233. package/src/ui/ui_element_position/WorldSpacePosition.js +23 -23
  234. package/src/ui/ui_element_state/OnIdle.js +24 -24
  235. package/src/ui/ui_element_state/OnMouseEnter.js +39 -39
  236. package/src/ui/ui_element_state/OnMouseExit.js +22 -22
  237. package/src/ui/ui_element_state/OnMouseHover.js +46 -46
  238. package/src/ui/ui_element_state/UIElementState.js +34 -34
  239. package/src/utilities/ArrayUtilities.js +57 -57
  240. package/src/utilities/CameraUtilities.js +283 -283
  241. package/src/utilities/EasingFunctions.js +231 -231
  242. package/src/utilities/FrustumPointFitter.js +257 -257
  243. package/src/utilities/GeometryUtilities.js +76 -76
  244. package/src/utilities/HTMLUtilities.js +76 -76
  245. package/src/utilities/ImageUtilities.js +28 -28
  246. package/src/utilities/MeshSampler.js +206 -206
  247. package/src/utilities/ModelUtilities.js +162 -162
  248. package/src/utilities/OMath.js +158 -158
  249. package/src/utilities/OrthographicFrustumPointFitter.js +49 -49
  250. package/src/utilities/PerspectiveFrustumPointFitter.js +254 -254
  251. package/src/utilities/StringUtilities.js +43 -43
  252. package/src/utilities/TimeUtilities.js +24 -24
  253. package/src/utilities/Validation.js +36 -36
  254. package/src/view_components/ApplicationView.js +73 -73
  255. package/src/view_components/TransitionManager.js +75 -75
  256. package/src/view_components/ViewComponent.js +61 -61
  257. package/src/view_components/ViewComponentManager.js +69 -69
  258. package/src/view_components/ViewManager.js +145 -145
  259. package/src/view_components/ViewState.js +49 -49
  260. package/src/view_components/transition/ActionSequencerBuilder.js +124 -124
  261. package/src/view_components/transition/DrawIOAnimationSheet.js +92 -92
  262. package/src/view_components/transition/TransitionTable.js +54 -54
  263. package/src/view_components/transition/ViewStateTransitionHandler.js +107 -106
package/src/Debug.js CHANGED
@@ -1,359 +1,359 @@
1
- // @ts-check
2
- import { AxisHelper } from './components/AxisHelper';
3
-
4
- import { SceneManager } from './SceneManager';
5
- import { Cube } from './primitives/Cube';
6
- import { Sphere } from './primitives/Sphere';
7
- import { Arrow } from './primitives/Arrow';
8
- import { OScreen } from './OScreen';
9
- import { Graphics } from './Graphics'; // eslint-disable-line no-unused-vars
10
- import { ScreenSpaceTextureMaterial } from './materials/ScreenSpaceTextureMaterial';
11
- import { PerspectiveCamera } from './PerspectiveCamera';
12
-
13
- import { RenderTarget, Texture, Vector2, Vector3, WebGLRenderer } from 'three'; // eslint-disable-line no-unused-vars
14
- import { LineBasicMaterial } from 'three';
15
- import { BufferGeometry } from 'three';
16
- import { Line } from 'three';
17
- import { PlaneGeometry } from 'three';
18
- import { ShaderMaterial } from 'three';
19
- import { Vector4 } from 'three';
20
- import { Mesh } from 'three';
21
- import { Box3 } from 'three';
22
- import { Box3Helper } from 'three';
23
- import { Scene } from 'three';
24
- import { CatmullRomCurve3 } from 'three';
25
- import { SphereGeometry } from 'three';
26
- import { MeshBasicMaterial } from 'three';
27
- // @ts-ignore
28
- import basic_color_vert from './shaders/basic_color/basic_color.vert';
29
- // @ts-ignore
30
- import basic_color_frag from './shaders/basic_color/basic_color.frag';
31
- import { CameraManager } from './CameraManager';
32
-
33
- class Debug
34
- {
35
- init()
36
- {
37
- this.Vector3_one = new Vector3(1, 1, 1);
38
- this.Vector3_zero = new Vector3(0, 0, 0);
39
- this.canvas_renderer = undefined;
40
-
41
- /** @type { Mesh<PlaneGeometry, ScreenSpaceTextureMaterial>[] } */
42
- this.display_texture_meshes = [];
43
-
44
- this.ctx = undefined;
45
- this.scene = new Scene();
46
- this.camera = new PerspectiveCamera(60, OScreen.aspect_ratio, 0.1, 1000);
47
- this.camera.clear_alpha = 0;
48
- }
49
-
50
- /**
51
- * @param {Vector3} origin
52
- * @param {Vector3} dir
53
- * @param {number | string} color
54
- * @returns {Arrow}
55
- */
56
- draw_arrow(origin, dir, color = 0xff0000)
57
- {
58
- const arrow = new Arrow(color, dir.length(), dir.clone().normalize());
59
- arrow.position.copy(origin);
60
- this.scene.add(arrow);
61
- return arrow;
62
- }
63
-
64
- draw_axis()
65
- {
66
- const axis = new AxisHelper();
67
- this.scene.add(axis);
68
- return axis;
69
- }
70
-
71
- /**
72
- * @param {RenderTarget} RT
73
- */
74
- set_debug_RT(RT)
75
- {
76
- this.rt_debug = RT;
77
- }
78
-
79
- /**
80
- * @param {Vector2 | Vector3} position_2d
81
- * @param {number} width
82
- * @param {number} height
83
- * @param {number | string} color
84
- */
85
- draw_rectangle(position_2d, width, height, color)
86
- {
87
- width = width || 100;
88
- height = height || 100;
89
- this.ctx.fillStyle = color || 'rgba(255, 0, 0, 1)';
90
- this.ctx.fillRect(position_2d.x - width / 2,
91
- (this.ctx.canvas.height - position_2d.y) - height / 2, width, height);
92
- }
93
-
94
- clear()
95
- {
96
- if (this.ctx)
97
- {
98
- this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
99
- }
100
- }
101
-
102
- /**
103
- * @param {Vector3 | Vector2} from
104
- * @param {Vector3 | Vector2} to
105
- * @param {number | string} color
106
- */
107
- draw_line_2D(from, to, color)
108
- {
109
- this.ctx.strokeStyle = color || 'rgba(255, 0, 0, 1)';
110
- this.ctx.beginPath();
111
- this.ctx.moveTo(from.x, from.y);
112
- this.ctx.lineTo(to.x, to.y);
113
- this.ctx.closePath();
114
- this.ctx.stroke();
115
- }
116
-
117
- /**
118
- * @param {Vector3[]} points
119
- * @param {number | string} color
120
- * @returns {Line}
121
- */
122
- draw_line(points, color = 0xff0000)
123
- {
124
- const material = new LineBasicMaterial({
125
- color: color
126
- });
127
-
128
- const geometry = new BufferGeometry().setFromPoints(points);
129
-
130
- const line = new Line(geometry, material);
131
- line.frustumCulled = false;
132
- this.scene.add(line);
133
- return line;
134
- }
135
-
136
- /**
137
- * @param {Vector3} pos
138
- * @param {number} size
139
- * @param {number | string} color
140
- * @returns {Cube}
141
- */
142
- draw_cube(pos, size, color)
143
- {
144
- size = size || 1;
145
- color = color || 0xff0000;
146
- pos = pos || new Vector3();
147
-
148
- const cube = new Cube(new Vector3(size, size, size), undefined, color);
149
- cube.position.copy(pos);
150
- this.scene.add(cube);
151
- return cube;
152
- }
153
-
154
- /**
155
- * @param {Vector3} from
156
- * @param {Vector3} to
157
- * @param {number} height
158
- * @param {number | string} color
159
- * @param {number} depth
160
- * @returns {Cube}
161
- */
162
- draw_oriented_cube(from, to, height = 1, color = '#FF0000', depth = 0.1)
163
- {
164
- const size = from.distanceTo(to);
165
- const cube = new Cube(new Vector3(depth, height, size), undefined, color);
166
-
167
- const center = to.clone().sub(from).multiplyScalar(0.5);
168
- const forward_dir = center.clone().normalize();
169
- center.add(from);
170
-
171
- cube.position.copy(center);
172
-
173
- // let up = new Vector3(0, 1, 0);
174
- // let forward = forward_dir.clone();
175
- // let right = forward.clone().cross(up);
176
-
177
- // cube.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(right,up,forward));
178
- cube.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), forward_dir);
179
-
180
- this.scene.add(cube);
181
- return cube;
182
- }
183
-
184
- /**
185
- *
186
- * @param {number} [width]
187
- * @param {number} [height]
188
- * @param {number | string} [color]
189
- * @returns
190
- */
191
- draw_plane(width, height, color) // eslint-disable-line no-unused-vars
192
- {
193
- const geometry = new PlaneGeometry(width, height);
194
- const material = new ShaderMaterial({
195
- uniforms: {
196
- _Color: { value: new Vector4(0, 1, 0, 0.2) }
197
- },
198
- vertexShader: basic_color_vert,
199
- fragmentShader: basic_color_frag,
200
- transparent: true,
201
- depthWrite: false
202
- });
203
-
204
- const plane = new Mesh(geometry, material);
205
- plane.renderOrder = -10000;
206
- this.scene.add(plane);
207
- return plane;
208
- }
209
-
210
- /**
211
- * @param {Vector3} pos
212
- * @param {number} size
213
- * @param {number | string} color
214
- * @returns {Box3Helper}
215
- */
216
- draw_empty_cube(pos, size, color)
217
- {
218
- size = size || 1;
219
- color = color || 0xff0000;
220
-
221
- const box = new Box3().setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));
222
- const helper = new Box3Helper(box, color);
223
- helper.position.copy(pos || new Vector3());
224
- return helper;
225
- }
226
-
227
- /**
228
- * @param {Vector3} pos
229
- * @param {number} size
230
- * @param {number | string} color
231
- * @returns {Sphere}
232
- */
233
- draw_sphere(pos, size, color)
234
- {
235
- size = size || 1;
236
- color = color || 0xff0000;
237
- pos = pos || new Vector3();
238
-
239
- const sphere = new Sphere(size, color);
240
- sphere.position.copy(pos);
241
- this.scene.add(sphere);
242
- return sphere;
243
- }
244
-
245
- /**
246
- *
247
- * @param {Vector3[]} input_points
248
- * @param {boolean} open
249
- * @param {number | string} color
250
- * @returns {Line}
251
- */
252
- draw_point_array(input_points, open = false, color = 0xff0000) // eslint-disable-line no-unused-vars
253
- {
254
- const catmull = new CatmullRomCurve3(input_points, open);
255
- catmull.updateArcLengths();
256
- const points = catmull.getSpacedPoints(200);
257
- const line_helper = this.draw_line(points, 0x00ff00);
258
- // line_helper.position.y = 1.5;
259
- return line_helper;
260
- }
261
-
262
- /**
263
- * @param {Sphere} sphere
264
- * @param {number | string} color
265
- * @returns {Mesh}
266
- */
267
- draw_sphere_helper(sphere, color)
268
- {
269
- color = color || 0xff0000;
270
- const geometry = new SphereGeometry(sphere.radius, 32, 32);
271
- const material = new MeshBasicMaterial({ color: color });
272
- const sphere_mesh = new Mesh(geometry, material);
273
- sphere_mesh.position.copy(sphere.center);
274
- SceneManager.current.add(sphere_mesh);
275
- return sphere_mesh;
276
- }
277
-
278
- /**
279
- * @param {Sphere} sphere
280
- */
281
- draw_math_sphere(sphere)
282
- {
283
- const geometry = new SphereGeometry(sphere.radius, 32, 32);
284
- const material = new ShaderMaterial({
285
- uniforms: {
286
- _Color: { value: new Vector4(1, 0, 0, 0.2) }
287
- },
288
- vertexShader: basic_color_vert,
289
- fragmentShader: basic_color_frag,
290
- transparent: true
291
- });
292
- // var material = new MeshBasicMaterial( {color: 0xff0000, transparent = true} );
293
- const sphere1 = new Mesh(geometry, material);
294
- sphere1.position.copy(sphere.center);
295
- SceneManager.current.add(sphere1);
296
- }
297
-
298
- /**
299
- * @param {Box3} bb
300
- */
301
- draw_bounding_box(bb)
302
- {
303
- const helper = new Box3Helper(bb, 0xffff00);
304
- SceneManager.current.add(helper);
305
- }
306
-
307
- /**
308
- * @param {Vector3[]} curve
309
- * @param {object} options
310
- * @param {number} options.offset
311
- */
312
- draw_curve(curve, options)
313
- {
314
- const offset = new Vector3(0, 0, 0);
315
- if (options)
316
- {
317
- offset.y = options.offset || 0;
318
- }
319
-
320
- for (let i = 0; i < curve.length - 1; i++)
321
- {
322
- this.draw_line([curve[i].clone().add(offset), curve[i + 1].clone().add(offset)]);
323
- }
324
- }
325
-
326
- /**
327
- * @param {Texture} tex
328
- * @param {number} w
329
- * @param {number} h
330
- * @returns {Mesh}
331
- */
332
- draw_texture(tex, w, h)
333
- {
334
- const mesh = new Mesh(new PlaneGeometry(1, 1), new ScreenSpaceTextureMaterial());
335
- this.display_texture_meshes.push(mesh);
336
- this.scene.add(mesh);
337
-
338
- mesh.material.set_texture(tex, w, h);
339
- return mesh;
340
- }
341
-
342
- /**
343
- * @param {Graphics} graphics
344
- */
345
- render(graphics)
346
- {
347
- for (let i = 0; i < this.display_texture_meshes.length; i++)
348
- {
349
- this.display_texture_meshes[i].material.set_screen_size(OScreen.width, OScreen.height);
350
- }
351
- if (this.scene.children.length > 0)
352
- {
353
- graphics.render(this.scene, CameraManager.current);
354
- }
355
- }
356
- }
357
-
358
- const debug = new Debug();
359
- export { debug as Debug };
1
+ // @ts-check
2
+ import { AxisHelper } from './components/AxisHelper';
3
+
4
+ import { SceneManager } from './SceneManager';
5
+ import { Cube } from './primitives/Cube';
6
+ import { Sphere } from './primitives/Sphere';
7
+ import { Arrow } from './primitives/Arrow';
8
+ import { OScreen } from './OScreen';
9
+ import { Graphics } from './Graphics'; // eslint-disable-line no-unused-vars
10
+ import { ScreenSpaceTextureMaterial } from './materials/ScreenSpaceTextureMaterial';
11
+ import { PerspectiveCamera } from './PerspectiveCamera';
12
+
13
+ import { RenderTarget, Texture, Vector2, Vector3, WebGLRenderer } from 'three'; // eslint-disable-line no-unused-vars
14
+ import { LineBasicMaterial } from 'three';
15
+ import { BufferGeometry } from 'three';
16
+ import { Line } from 'three';
17
+ import { PlaneGeometry } from 'three';
18
+ import { ShaderMaterial } from 'three';
19
+ import { Vector4 } from 'three';
20
+ import { Mesh } from 'three';
21
+ import { Box3 } from 'three';
22
+ import { Box3Helper } from 'three';
23
+ import { Scene } from 'three';
24
+ import { CatmullRomCurve3 } from 'three';
25
+ import { SphereGeometry } from 'three';
26
+ import { MeshBasicMaterial } from 'three';
27
+ // @ts-ignore
28
+ import basic_color_vert from './shaders/basic_color/basic_color.vert';
29
+ // @ts-ignore
30
+ import basic_color_frag from './shaders/basic_color/basic_color.frag';
31
+ import { CameraManager } from './CameraManager';
32
+
33
+ class Debug
34
+ {
35
+ init()
36
+ {
37
+ this.Vector3_one = new Vector3(1, 1, 1);
38
+ this.Vector3_zero = new Vector3(0, 0, 0);
39
+ this.canvas_renderer = undefined;
40
+
41
+ /** @type { Mesh<PlaneGeometry, ScreenSpaceTextureMaterial>[] } */
42
+ this.display_texture_meshes = [];
43
+
44
+ this.ctx = undefined;
45
+ this.scene = new Scene();
46
+ this.camera = new PerspectiveCamera(60, OScreen.aspect_ratio, 0.1, 1000);
47
+ this.camera.clear_alpha = 0;
48
+ }
49
+
50
+ /**
51
+ * @param {Vector3} origin
52
+ * @param {Vector3} dir
53
+ * @param {number | string} color
54
+ * @returns {Arrow}
55
+ */
56
+ draw_arrow(origin, dir, color = 0xff0000)
57
+ {
58
+ const arrow = new Arrow(color, dir.length(), dir.clone().normalize());
59
+ arrow.position.copy(origin);
60
+ this.scene.add(arrow);
61
+ return arrow;
62
+ }
63
+
64
+ draw_axis()
65
+ {
66
+ const axis = new AxisHelper();
67
+ this.scene.add(axis);
68
+ return axis;
69
+ }
70
+
71
+ /**
72
+ * @param {RenderTarget} RT
73
+ */
74
+ set_debug_RT(RT)
75
+ {
76
+ this.rt_debug = RT;
77
+ }
78
+
79
+ /**
80
+ * @param {Vector2 | Vector3} position_2d
81
+ * @param {number} width
82
+ * @param {number} height
83
+ * @param {number | string} color
84
+ */
85
+ draw_rectangle(position_2d, width, height, color)
86
+ {
87
+ width = width || 100;
88
+ height = height || 100;
89
+ this.ctx.fillStyle = color || 'rgba(255, 0, 0, 1)';
90
+ this.ctx.fillRect(position_2d.x - width / 2,
91
+ (this.ctx.canvas.height - position_2d.y) - height / 2, width, height);
92
+ }
93
+
94
+ clear()
95
+ {
96
+ if (this.ctx)
97
+ {
98
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
99
+ }
100
+ }
101
+
102
+ /**
103
+ * @param {Vector3 | Vector2} from
104
+ * @param {Vector3 | Vector2} to
105
+ * @param {number | string} color
106
+ */
107
+ draw_line_2D(from, to, color)
108
+ {
109
+ this.ctx.strokeStyle = color || 'rgba(255, 0, 0, 1)';
110
+ this.ctx.beginPath();
111
+ this.ctx.moveTo(from.x, from.y);
112
+ this.ctx.lineTo(to.x, to.y);
113
+ this.ctx.closePath();
114
+ this.ctx.stroke();
115
+ }
116
+
117
+ /**
118
+ * @param {Vector3[]} points
119
+ * @param {number | string} color
120
+ * @returns {Line}
121
+ */
122
+ draw_line(points, color = 0xff0000)
123
+ {
124
+ const material = new LineBasicMaterial({
125
+ color: color
126
+ });
127
+
128
+ const geometry = new BufferGeometry().setFromPoints(points);
129
+
130
+ const line = new Line(geometry, material);
131
+ line.frustumCulled = false;
132
+ this.scene.add(line);
133
+ return line;
134
+ }
135
+
136
+ /**
137
+ * @param {Vector3} pos
138
+ * @param {number} size
139
+ * @param {number | string} color
140
+ * @returns {Cube}
141
+ */
142
+ draw_cube(pos, size, color)
143
+ {
144
+ size = size || 1;
145
+ color = color || 0xff0000;
146
+ pos = pos || new Vector3();
147
+
148
+ const cube = new Cube(new Vector3(size, size, size), undefined, color);
149
+ cube.position.copy(pos);
150
+ this.scene.add(cube);
151
+ return cube;
152
+ }
153
+
154
+ /**
155
+ * @param {Vector3} from
156
+ * @param {Vector3} to
157
+ * @param {number} height
158
+ * @param {number | string} color
159
+ * @param {number} depth
160
+ * @returns {Cube}
161
+ */
162
+ draw_oriented_cube(from, to, height = 1, color = '#FF0000', depth = 0.1)
163
+ {
164
+ const size = from.distanceTo(to);
165
+ const cube = new Cube(new Vector3(depth, height, size), undefined, color);
166
+
167
+ const center = to.clone().sub(from).multiplyScalar(0.5);
168
+ const forward_dir = center.clone().normalize();
169
+ center.add(from);
170
+
171
+ cube.position.copy(center);
172
+
173
+ // let up = new Vector3(0, 1, 0);
174
+ // let forward = forward_dir.clone();
175
+ // let right = forward.clone().cross(up);
176
+
177
+ // cube.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(right,up,forward));
178
+ cube.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), forward_dir);
179
+
180
+ this.scene.add(cube);
181
+ return cube;
182
+ }
183
+
184
+ /**
185
+ *
186
+ * @param {number} [width]
187
+ * @param {number} [height]
188
+ * @param {number | string} [color]
189
+ * @returns
190
+ */
191
+ draw_plane(width, height, color) // eslint-disable-line no-unused-vars
192
+ {
193
+ const geometry = new PlaneGeometry(width, height);
194
+ const material = new ShaderMaterial({
195
+ uniforms: {
196
+ _Color: { value: new Vector4(0, 1, 0, 0.2) }
197
+ },
198
+ vertexShader: basic_color_vert,
199
+ fragmentShader: basic_color_frag,
200
+ transparent: true,
201
+ depthWrite: false
202
+ });
203
+
204
+ const plane = new Mesh(geometry, material);
205
+ plane.renderOrder = -10000;
206
+ this.scene.add(plane);
207
+ return plane;
208
+ }
209
+
210
+ /**
211
+ * @param {Vector3} pos
212
+ * @param {number} size
213
+ * @param {number | string} color
214
+ * @returns {Box3Helper}
215
+ */
216
+ draw_empty_cube(pos, size, color)
217
+ {
218
+ size = size || 1;
219
+ color = color || 0xff0000;
220
+
221
+ const box = new Box3().setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));
222
+ const helper = new Box3Helper(box, color);
223
+ helper.position.copy(pos || new Vector3());
224
+ return helper;
225
+ }
226
+
227
+ /**
228
+ * @param {Vector3} pos
229
+ * @param {number} size
230
+ * @param {number | string} color
231
+ * @returns {Sphere}
232
+ */
233
+ draw_sphere(pos, size, color)
234
+ {
235
+ size = size || 1;
236
+ color = color || 0xff0000;
237
+ pos = pos || new Vector3();
238
+
239
+ const sphere = new Sphere(size, color);
240
+ sphere.position.copy(pos);
241
+ this.scene.add(sphere);
242
+ return sphere;
243
+ }
244
+
245
+ /**
246
+ *
247
+ * @param {Vector3[]} input_points
248
+ * @param {boolean} open
249
+ * @param {number | string} color
250
+ * @returns {Line}
251
+ */
252
+ draw_point_array(input_points, open = false, color = 0xff0000) // eslint-disable-line no-unused-vars
253
+ {
254
+ const catmull = new CatmullRomCurve3(input_points, open);
255
+ catmull.updateArcLengths();
256
+ const points = catmull.getSpacedPoints(200);
257
+ const line_helper = this.draw_line(points, 0x00ff00);
258
+ // line_helper.position.y = 1.5;
259
+ return line_helper;
260
+ }
261
+
262
+ /**
263
+ * @param {Sphere} sphere
264
+ * @param {number | string} color
265
+ * @returns {Mesh}
266
+ */
267
+ draw_sphere_helper(sphere, color)
268
+ {
269
+ color = color || 0xff0000;
270
+ const geometry = new SphereGeometry(sphere.radius, 32, 32);
271
+ const material = new MeshBasicMaterial({ color: color });
272
+ const sphere_mesh = new Mesh(geometry, material);
273
+ sphere_mesh.position.copy(sphere.center);
274
+ SceneManager.current.add(sphere_mesh);
275
+ return sphere_mesh;
276
+ }
277
+
278
+ /**
279
+ * @param {Sphere} sphere
280
+ */
281
+ draw_math_sphere(sphere)
282
+ {
283
+ const geometry = new SphereGeometry(sphere.radius, 32, 32);
284
+ const material = new ShaderMaterial({
285
+ uniforms: {
286
+ _Color: { value: new Vector4(1, 0, 0, 0.2) }
287
+ },
288
+ vertexShader: basic_color_vert,
289
+ fragmentShader: basic_color_frag,
290
+ transparent: true
291
+ });
292
+ // var material = new MeshBasicMaterial( {color: 0xff0000, transparent = true} );
293
+ const sphere1 = new Mesh(geometry, material);
294
+ sphere1.position.copy(sphere.center);
295
+ SceneManager.current.add(sphere1);
296
+ }
297
+
298
+ /**
299
+ * @param {Box3} bb
300
+ */
301
+ draw_bounding_box(bb)
302
+ {
303
+ const helper = new Box3Helper(bb, 0xffff00);
304
+ SceneManager.current.add(helper);
305
+ }
306
+
307
+ /**
308
+ * @param {Vector3[]} curve
309
+ * @param {object} options
310
+ * @param {number} options.offset
311
+ */
312
+ draw_curve(curve, options)
313
+ {
314
+ const offset = new Vector3(0, 0, 0);
315
+ if (options)
316
+ {
317
+ offset.y = options.offset || 0;
318
+ }
319
+
320
+ for (let i = 0; i < curve.length - 1; i++)
321
+ {
322
+ this.draw_line([curve[i].clone().add(offset), curve[i + 1].clone().add(offset)]);
323
+ }
324
+ }
325
+
326
+ /**
327
+ * @param {Texture} tex
328
+ * @param {number} w
329
+ * @param {number} h
330
+ * @returns {Mesh}
331
+ */
332
+ draw_texture(tex, w, h)
333
+ {
334
+ const mesh = new Mesh(new PlaneGeometry(1, 1), new ScreenSpaceTextureMaterial());
335
+ this.display_texture_meshes.push(mesh);
336
+ this.scene.add(mesh);
337
+
338
+ mesh.material.set_texture(tex, w, h);
339
+ return mesh;
340
+ }
341
+
342
+ /**
343
+ * @param {Graphics} graphics
344
+ */
345
+ render(graphics)
346
+ {
347
+ for (let i = 0; i < this.display_texture_meshes.length; i++)
348
+ {
349
+ this.display_texture_meshes[i].material.set_screen_size(OScreen.width, OScreen.height);
350
+ }
351
+ if (this.scene.children.length > 0)
352
+ {
353
+ graphics.render(this.scene, CameraManager.current);
354
+ }
355
+ }
356
+ }
357
+
358
+ const debug = new Debug();
359
+ export { debug as Debug };