@onerjs/core 8.41.4 → 8.41.6

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 (264) hide show
  1. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +16 -0
  2. package/Cameras/Inputs/geospatialCameraPointersInput.js +19 -3
  3. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  4. package/Cameras/Limits/geospatialLimits.d.ts +0 -6
  5. package/Cameras/Limits/geospatialLimits.js +0 -6
  6. package/Cameras/Limits/geospatialLimits.js.map +1 -1
  7. package/Cameras/geospatialCamera.d.ts +5 -0
  8. package/Cameras/geospatialCamera.js +38 -10
  9. package/Cameras/geospatialCamera.js.map +1 -1
  10. package/Engines/abstractEngine.d.ts +2 -2
  11. package/Engines/abstractEngine.js +2 -2
  12. package/Engines/abstractEngine.js.map +1 -1
  13. package/Engines/webgpuEngine.d.ts +1 -4
  14. package/Engines/webgpuEngine.js +8 -6
  15. package/Engines/webgpuEngine.js.map +1 -1
  16. package/FrameGraph/frameGraphContext.js +1 -1
  17. package/FrameGraph/frameGraphContext.js.map +1 -1
  18. package/FrameGraph/frameGraphRenderContext.js +2 -2
  19. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  20. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  21. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  22. package/Lights/Shadows/shadowGenerator.js +1 -1
  23. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  24. package/Lights/lightingVolume.js +1 -1
  25. package/Lights/lightingVolume.js.map +1 -1
  26. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  27. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  28. package/Maths/math.path.js +3 -3
  29. package/Maths/math.path.js.map +1 -1
  30. package/Meshes/Builders/capsuleBuilder.js +0 -3
  31. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  32. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  33. package/Meshes/Builders/cylinderBuilder.js +1 -2
  34. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  35. package/Meshes/Builders/decalBuilder.js +2 -0
  36. package/Meshes/Builders/decalBuilder.js.map +1 -1
  37. package/Meshes/Builders/discBuilder.js +0 -1
  38. package/Meshes/Builders/discBuilder.js.map +1 -1
  39. package/Meshes/Builders/groundBuilder.d.ts +50 -54
  40. package/Meshes/Builders/groundBuilder.js +50 -54
  41. package/Meshes/Builders/groundBuilder.js.map +1 -1
  42. package/Meshes/Builders/tiledBoxBuilder.d.ts +0 -26
  43. package/Meshes/Builders/tiledBoxBuilder.js +0 -26
  44. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  45. package/Meshes/Builders/tiledPlaneBuilder.d.ts +0 -25
  46. package/Meshes/Builders/tiledPlaneBuilder.js +0 -25
  47. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  48. package/Meshes/Builders/torusBuilder.d.ts +0 -13
  49. package/Meshes/Builders/torusBuilder.js +0 -13
  50. package/Meshes/Builders/torusBuilder.js.map +1 -1
  51. package/Meshes/Builders/torusKnotBuilder.d.ts +0 -19
  52. package/Meshes/Builders/torusKnotBuilder.js +0 -19
  53. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  54. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  55. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  56. package/Meshes/Compression/dracoDecoder.types.d.ts +11 -0
  57. package/Meshes/Compression/dracoDecoder.types.js.map +1 -1
  58. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  59. package/Meshes/Compression/meshoptCompression.js +0 -2
  60. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  61. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +0 -8
  62. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  63. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.d.ts +1 -0
  64. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +1 -0
  65. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  66. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.d.ts +1 -0
  67. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +1 -0
  68. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  69. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.d.ts +1 -0
  70. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +1 -0
  71. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  72. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.d.ts +1 -0
  73. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +1 -0
  74. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  75. package/Meshes/Node/Blocks/Matrices/scalingBlock.d.ts +1 -0
  76. package/Meshes/Node/Blocks/Matrices/scalingBlock.js +1 -0
  77. package/Meshes/Node/Blocks/Matrices/scalingBlock.js.map +1 -1
  78. package/Meshes/Node/Blocks/Matrices/translationBlock.d.ts +1 -0
  79. package/Meshes/Node/Blocks/Matrices/translationBlock.js +1 -0
  80. package/Meshes/Node/Blocks/Matrices/translationBlock.js.map +1 -1
  81. package/Meshes/Node/Blocks/Set/aggregatorBlock.d.ts +1 -0
  82. package/Meshes/Node/Blocks/Set/aggregatorBlock.js +1 -0
  83. package/Meshes/Node/Blocks/Set/aggregatorBlock.js.map +1 -1
  84. package/Meshes/Node/Blocks/Set/latticeBlock.d.ts +1 -0
  85. package/Meshes/Node/Blocks/Set/latticeBlock.js +1 -0
  86. package/Meshes/Node/Blocks/Set/latticeBlock.js.map +1 -1
  87. package/Meshes/Node/Blocks/Set/setColorsBlock.d.ts +1 -0
  88. package/Meshes/Node/Blocks/Set/setColorsBlock.js +1 -0
  89. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
  90. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.d.ts +1 -0
  91. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js +1 -0
  92. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
  93. package/Meshes/Node/Blocks/Set/setNormalsBlock.d.ts +1 -0
  94. package/Meshes/Node/Blocks/Set/setNormalsBlock.js +1 -0
  95. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
  96. package/Meshes/Node/Blocks/Set/setPositionsBlock.d.ts +1 -0
  97. package/Meshes/Node/Blocks/Set/setPositionsBlock.js +1 -0
  98. package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
  99. package/Meshes/Node/Blocks/Set/setTangentsBlock.d.ts +1 -0
  100. package/Meshes/Node/Blocks/Set/setTangentsBlock.js +1 -0
  101. package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
  102. package/Meshes/Node/Blocks/Set/setUVsBlock.d.ts +1 -0
  103. package/Meshes/Node/Blocks/Set/setUVsBlock.js +1 -0
  104. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
  105. package/Meshes/Node/Blocks/Sources/boxBlock.d.ts +2 -0
  106. package/Meshes/Node/Blocks/Sources/boxBlock.js +2 -0
  107. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  108. package/Meshes/Node/Blocks/Sources/capsuleBlock.d.ts +2 -0
  109. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +2 -0
  110. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  111. package/Meshes/Node/Blocks/Sources/cylinderBlock.d.ts +2 -0
  112. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +2 -0
  113. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  114. package/Meshes/Node/Blocks/Sources/discBlock.d.ts +2 -0
  115. package/Meshes/Node/Blocks/Sources/discBlock.js +2 -0
  116. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  117. package/Meshes/Node/Blocks/Sources/gridBlock.d.ts +2 -0
  118. package/Meshes/Node/Blocks/Sources/gridBlock.js +2 -0
  119. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  120. package/Meshes/Node/Blocks/Sources/icoSphereBlock.d.ts +2 -0
  121. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +2 -0
  122. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  123. package/Meshes/Node/Blocks/Sources/meshBlock.d.ts +1 -0
  124. package/Meshes/Node/Blocks/Sources/meshBlock.js +1 -0
  125. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
  126. package/Meshes/Node/Blocks/Sources/planeBlock.d.ts +2 -0
  127. package/Meshes/Node/Blocks/Sources/planeBlock.js +2 -0
  128. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  129. package/Meshes/Node/Blocks/Sources/pointListBlock.d.ts +2 -1
  130. package/Meshes/Node/Blocks/Sources/pointListBlock.js +2 -1
  131. package/Meshes/Node/Blocks/Sources/pointListBlock.js.map +1 -1
  132. package/Meshes/Node/Blocks/Sources/sphereBlock.d.ts +2 -0
  133. package/Meshes/Node/Blocks/Sources/sphereBlock.js +2 -0
  134. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  135. package/Meshes/Node/Blocks/Sources/torusBlock.d.ts +2 -0
  136. package/Meshes/Node/Blocks/Sources/torusBlock.js +2 -0
  137. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  138. package/Meshes/Node/Blocks/Teleport/teleportInBlock.d.ts +1 -0
  139. package/Meshes/Node/Blocks/Teleport/teleportInBlock.js +1 -0
  140. package/Meshes/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  141. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.d.ts +3 -0
  142. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +3 -0
  143. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  144. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.d.ts +1 -0
  145. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +1 -1
  146. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  147. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.d.ts +1 -0
  148. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js +1 -0
  149. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
  150. package/Meshes/Node/Blocks/booleanGeometryBlock.d.ts +1 -0
  151. package/Meshes/Node/Blocks/booleanGeometryBlock.js +1 -1
  152. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  153. package/Meshes/Node/Blocks/cleanGeometryBlock.d.ts +1 -0
  154. package/Meshes/Node/Blocks/cleanGeometryBlock.js +1 -0
  155. package/Meshes/Node/Blocks/cleanGeometryBlock.js.map +1 -1
  156. package/Meshes/Node/Blocks/conditionBlock.d.ts +2 -0
  157. package/Meshes/Node/Blocks/conditionBlock.js +2 -0
  158. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
  159. package/Meshes/Node/Blocks/geometryClampBlock.d.ts +1 -0
  160. package/Meshes/Node/Blocks/geometryClampBlock.js +1 -0
  161. package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
  162. package/Meshes/Node/Blocks/geometryCollectionBlock.d.ts +1 -0
  163. package/Meshes/Node/Blocks/geometryCollectionBlock.js +1 -0
  164. package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
  165. package/Meshes/Node/Blocks/geometryCurveBlock.d.ts +2 -0
  166. package/Meshes/Node/Blocks/geometryCurveBlock.js +2 -0
  167. package/Meshes/Node/Blocks/geometryCurveBlock.js.map +1 -1
  168. package/Meshes/Node/Blocks/geometryEaseBlock.d.ts +2 -0
  169. package/Meshes/Node/Blocks/geometryEaseBlock.js +2 -0
  170. package/Meshes/Node/Blocks/geometryEaseBlock.js.map +1 -1
  171. package/Meshes/Node/Blocks/geometryInputBlock.d.ts +3 -0
  172. package/Meshes/Node/Blocks/geometryInputBlock.js +3 -0
  173. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
  174. package/Meshes/Node/Blocks/geometryOptimizeBlock.d.ts +1 -0
  175. package/Meshes/Node/Blocks/geometryOptimizeBlock.js +1 -0
  176. package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
  177. package/Meshes/Node/Blocks/geometryTransformBlock.d.ts +1 -0
  178. package/Meshes/Node/Blocks/geometryTransformBlock.js +1 -0
  179. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  180. package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +2 -0
  181. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +2 -0
  182. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  183. package/Meshes/Node/Blocks/mappingBlock.d.ts +1 -0
  184. package/Meshes/Node/Blocks/mappingBlock.js +1 -0
  185. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  186. package/Meshes/Node/Blocks/mathBlock.d.ts +1 -0
  187. package/Meshes/Node/Blocks/mathBlock.js +1 -0
  188. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  189. package/Meshes/Node/Blocks/mergeGeometryBlock.d.ts +1 -0
  190. package/Meshes/Node/Blocks/mergeGeometryBlock.js +1 -0
  191. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  192. package/Meshes/Node/Blocks/randomBlock.d.ts +2 -0
  193. package/Meshes/Node/Blocks/randomBlock.js +2 -0
  194. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  195. package/Meshes/Node/Blocks/subdivideBlock.d.ts +1 -0
  196. package/Meshes/Node/Blocks/subdivideBlock.js +1 -0
  197. package/Meshes/Node/Blocks/subdivideBlock.js.map +1 -1
  198. package/Meshes/Node/Interfaces/nodeGeometryTextureData.d.ts +3 -0
  199. package/Meshes/Node/Interfaces/nodeGeometryTextureData.js.map +1 -1
  200. package/Meshes/Node/nodeGeometry.js +0 -2
  201. package/Meshes/Node/nodeGeometry.js.map +1 -1
  202. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +0 -1
  203. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  204. package/Meshes/Node/nodeGeometryBuildState.js +0 -1
  205. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  206. package/Meshes/WebGL/webGLDataBuffer.d.ts +2 -0
  207. package/Meshes/WebGL/webGLDataBuffer.js +2 -0
  208. package/Meshes/WebGL/webGLDataBuffer.js.map +1 -1
  209. package/Meshes/WebGPU/webgpuDataBuffer.d.ts +4 -0
  210. package/Meshes/WebGPU/webgpuDataBuffer.js +4 -0
  211. package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
  212. package/Meshes/abstractMesh.d.ts +1 -0
  213. package/Meshes/abstractMesh.decalMap.d.ts +1 -0
  214. package/Meshes/abstractMesh.decalMap.js.map +1 -1
  215. package/Meshes/abstractMesh.js +1 -6
  216. package/Meshes/abstractMesh.js.map +1 -1
  217. package/Meshes/csg.js +0 -6
  218. package/Meshes/csg.js.map +1 -1
  219. package/Meshes/csg2.js +1 -2
  220. package/Meshes/csg2.js.map +1 -1
  221. package/Meshes/geodesicMesh.d.ts +26 -0
  222. package/Meshes/geodesicMesh.js +18 -3
  223. package/Meshes/geodesicMesh.js.map +1 -1
  224. package/Meshes/groundMesh.d.ts +1 -0
  225. package/Meshes/groundMesh.js +1 -0
  226. package/Meshes/groundMesh.js.map +1 -1
  227. package/Meshes/index.js +0 -2
  228. package/Meshes/index.js.map +1 -1
  229. package/Meshes/instancedMesh.d.ts +18 -3
  230. package/Meshes/instancedMesh.js +10 -3
  231. package/Meshes/instancedMesh.js.map +1 -1
  232. package/Meshes/mesh.d.ts +286 -204
  233. package/Meshes/mesh.js +251 -197
  234. package/Meshes/mesh.js.map +1 -1
  235. package/Meshes/mesh.vertexData.d.ts +15 -19
  236. package/Meshes/mesh.vertexData.js +15 -19
  237. package/Meshes/mesh.vertexData.js.map +1 -1
  238. package/Meshes/meshSimplification.d.ts +0 -1
  239. package/Meshes/meshSimplification.js +6 -1
  240. package/Meshes/meshSimplification.js.map +1 -1
  241. package/Meshes/meshSimplificationSceneComponent.d.ts +2 -0
  242. package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
  243. package/Meshes/meshUVSpaceRenderer.d.ts +1 -0
  244. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  245. package/Meshes/polygonMesh.js +4 -0
  246. package/Meshes/polygonMesh.js.map +1 -1
  247. package/Meshes/subMesh.project.d.ts +1 -0
  248. package/Meshes/subMesh.project.js.map +1 -1
  249. package/Meshes/thinInstanceMesh.d.ts +5 -0
  250. package/Meshes/thinInstanceMesh.js.map +1 -1
  251. package/Meshes/transformNode.d.ts +1 -1
  252. package/Meshes/transformNode.js +1 -1
  253. package/Meshes/transformNode.js.map +1 -1
  254. package/Physics/v2/Plugins/havokPlugin.d.ts +75 -2
  255. package/Physics/v2/Plugins/havokPlugin.js +243 -52
  256. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  257. package/Probes/reflectionProbe.js +1 -1
  258. package/Probes/reflectionProbe.js.map +1 -1
  259. package/Rendering/depthRenderer.js +1 -1
  260. package/Rendering/depthRenderer.js.map +1 -1
  261. package/package.json +1 -1
  262. package/scene.d.ts +0 -3
  263. package/scene.js +18 -5
  264. package/scene.js.map +1 -1
@@ -7,11 +7,11 @@ import type { Nullable } from "../../types.js";
7
7
  /**
8
8
  * Creates the VertexData for a Ground
9
9
  * @param options an object used to set the following optional parameters for the Ground, required but can be empty
10
- * @param options.width the width (x direction) of the ground, optional, default 1
11
- * @param options.height the height (z direction) of the ground, optional, default 1
12
- * @param options.subdivisions the number of subdivisions per side, optional, default 1
13
- * @param options.subdivisionsX the number of subdivisions in the x direction, overrides options.subdivisions, optional, default undefined
14
- * @param options.subdivisionsY the number of subdivisions in the y direction, overrides options.subdivisions, optional, default undefined
10
+ * - `width` the width (x direction) of the ground, optional, default 1
11
+ * - `height` the height (z direction) of the ground, optional, default 1
12
+ * - `subdivisions` the number of subdivisions per side, optional, default 1
13
+ * - `subdivisionsX` the number of subdivisions in the x direction, overrides options.subdivisions, optional, default undefined
14
+ * - `subdivisionsY` the number of subdivisions in the y direction, overrides options.subdivisions, optional, default undefined
15
15
  * @returns the VertexData of the Ground
16
16
  */
17
17
  export declare function CreateGroundVertexData(options: {
@@ -25,16 +25,12 @@ export declare function CreateGroundVertexData(options: {
25
25
  /**
26
26
  * Creates the VertexData for a TiledGround by subdividing the ground into tiles
27
27
  * @param options an object used to set the following optional parameters for the Ground
28
- * @param options.xmin ground minimum X coordinate, default -1
29
- * @param options.zmin ground minimum Z coordinate, default -1
30
- * @param options.xmax ground maximum X coordinate, default 1
31
- * @param options.zmax ground maximum Z coordinate, default 1
32
- * @param options.subdivisions a javascript object {w: positive integer, h: positive integer}, `w` and `h` are the numbers of subdivisions on the ground width and height creating 'tiles', default {w: 6, h: 6}
33
- * @param options.subdivisions.w positive integer, default 6
34
- * @param options.subdivisions.h positive integer, default 6
35
- * @param options.precision a javascript object {w: positive integer, h: positive integer}, `w` and `h` are the numbers of subdivisions on the tile width and height, default {w: 2, h: 2}
36
- * @param options.precision.w positive integer, default 2
37
- * @param options.precision.h positive integer, default 2
28
+ * - `xmin` ground minimum X coordinate, default -1
29
+ * - `zmin` ground minimum Z coordinate, default -1
30
+ * - `xmax` ground maximum X coordinate, default 1
31
+ * - `zmax` ground maximum Z coordinate, default 1
32
+ * - `subdivisions` a javascript object `\{w: positive integer, h: positive integer\}`, `w` and `h` are the numbers of subdivisions on the ground width and height creating 'tiles', default `\{w: 6, h: 6\}`
33
+ * - `precision` a javascript object `\{w: positive integer, h: positive integer\}`, `w` and `h` are the numbers of subdivisions on the tile width and height, default `\{w: 2, h: 2\}`
38
34
  * @returns the VertexData of the TiledGround
39
35
  */
40
36
  export declare function CreateTiledGroundVertexData(options: {
@@ -54,17 +50,17 @@ export declare function CreateTiledGroundVertexData(options: {
54
50
  /**
55
51
  * Creates the VertexData of the Ground designed from a heightmap
56
52
  * @param options an object used to set the following parameters for the Ground, required and provided by CreateGroundFromHeightMap
57
- * @param options.width the width (x direction) of the ground
58
- * @param options.height the height (z direction) of the ground
59
- * @param options.subdivisions the number of subdivisions per side
60
- * @param options.minHeight the minimum altitude on the ground, optional, default 0
61
- * @param options.maxHeight the maximum altitude on the ground, optional default 1
62
- * @param options.colorFilter the filter to apply to the image pixel colors to compute the height, optional Color3, default (0.3, 0.59, 0.11)
63
- * @param options.buffer the array holding the image color data
64
- * @param options.bufferWidth the width of image
65
- * @param options.bufferHeight the height of image
66
- * @param options.alphaFilter Remove any data where the alpha channel is below this value, defaults 0 (all data visible)
67
- * @param options.heightBuffer a array of floats where the height data can be saved, if its length is greater than zero.
53
+ * - `width` the width (x direction) of the ground
54
+ * - `height` the height (z direction) of the ground
55
+ * - `subdivisions` the number of subdivisions per side
56
+ * - `minHeight` the minimum altitude on the ground, optional, default 0
57
+ * - `maxHeight` the maximum altitude on the ground, optional default 1
58
+ * - `colorFilter` the filter to apply to the image pixel colors to compute the height, optional Color3, default (0.3, 0.59, 0.11)
59
+ * - `buffer` the array holding the image color data
60
+ * - `bufferWidth` the width of image
61
+ * - `bufferHeight` the height of image
62
+ * - `alphaFilter` Remove any data where the alpha channel is below this value, defaults 0 (all data visible)
63
+ * - `heightBuffer` a array of floats where the height data can be saved, if its length is greater than zero.
68
64
  * @returns the VertexData of the Ground designed from a heightmap
69
65
  */
70
66
  export declare function CreateGroundFromHeightMapVertexData(options: {
@@ -84,12 +80,12 @@ export declare function CreateGroundFromHeightMapVertexData(options: {
84
80
  * Creates a ground mesh
85
81
  * @param name defines the name of the mesh
86
82
  * @param options defines the options used to create the mesh
87
- * @param options.width set the width size (float, default 1)
88
- * @param options.height set the height size (float, default 1)
89
- * @param options.subdivisions sets the number of subdivision per side (default 1)
90
- * @param options.subdivisionsX sets the number of subdivision on the X axis (overrides subdivisions)
91
- * @param options.subdivisionsY sets the number of subdivision on the Y axis (overrides subdivisions)
92
- * @param options.updatable defines if the mesh must be flagged as updatable (default false)
83
+ * - `width` set the width size (float, default 1)
84
+ * - `height` set the height size (float, default 1)
85
+ * - `subdivisions` sets the number of subdivision per side (default 1)
86
+ * - `subdivisionsX` sets the number of subdivision on the X axis (overrides subdivisions)
87
+ * - `subdivisionsY` sets the number of subdivision on the Y axis (overrides subdivisions)
88
+ * - `updatable` defines if the mesh must be flagged as updatable (default false)
93
89
  * @param scene defines the hosting scene
94
90
  * @returns the ground mesh
95
91
  * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#ground
@@ -106,17 +102,17 @@ export declare function CreateGround(name: string, options?: {
106
102
  * Creates a tiled ground mesh
107
103
  * @param name defines the name of the mesh
108
104
  * @param options defines the options used to create the mesh
109
- * @param options.xmin ground minimum X coordinate (float, default -1)
110
- * @param options.zmin ground minimum Z coordinate (float, default -1)
111
- * @param options.xmax ground maximum X coordinate (float, default 1)
112
- * @param options.zmax ground maximum Z coordinate (float, default 1)
113
- * @param options.subdivisions a javascript object `{w: positive integer, h: positive integer}` (default `{w: 6, h: 6}`). `w` and `h` are the numbers of subdivisions on the ground width and height. Each subdivision is called a tile
114
- * @param options.subdivisions.w positive integer, default 6
115
- * @param options.subdivisions.h positive integer, default 6
116
- * @param options.precision a javascript object `{w: positive integer, h: positive integer}` (default `{w: 2, h: 2}`). `w` and `h` are the numbers of subdivisions on the ground width and height of each tile
117
- * @param options.precision.w positive integer, default 2
118
- * @param options.precision.h positive integer, default 2
119
- * @param options.updatable boolean, default false, true if the mesh must be flagged as updatable
105
+ * - `xmin` ground minimum X coordinate (float, default -1)
106
+ * - `zmin` ground minimum Z coordinate (float, default -1)
107
+ * - `xmax` ground maximum X coordinate (float, default 1)
108
+ * - `zmax` ground maximum Z coordinate (float, default 1)
109
+ * - `subdivisions` a javascript object `{w: positive integer, h: positive integer}` (default `{w: 6, h: 6}`). `w` and `h` are the numbers of subdivisions on the ground width and height. Each subdivision is called a tile
110
+ * - `subdivisions.w` positive integer, default 6
111
+ * - `subdivisions.h` positive integer, default 6
112
+ * - `precision` a javascript object `{w: positive integer, h: positive integer}` (default `{w: 2, h: 2}`). `w` and `h` are the numbers of subdivisions on the ground width and height of each tile
113
+ * - `precision.w` positive integer, default 2
114
+ * - `precision.h` positive integer, default 2
115
+ * - `updatable` boolean, default false, true if the mesh must be flagged as updatable
120
116
  * @param scene defines the hosting scene
121
117
  * @returns the tiled ground mesh
122
118
  * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#tiled-ground
@@ -143,17 +139,17 @@ export declare function CreateTiledGround(name: string, options: {
143
139
  * @param name defines the name of the mesh
144
140
  * @param url sets the URL of the height map image resource.
145
141
  * @param options defines the options used to create the mesh
146
- * @param options.width sets the ground width size (positive float, default 10)
147
- * @param options.height sets the ground height size (positive float, default 10)
148
- * @param options.subdivisions sets the number of subdivision per side (positive integer, default 1)
149
- * @param options.minHeight is the minimum altitude on the ground (float, default 0)
150
- * @param options.maxHeight is the maximum altitude on the ground (float, default 1)
151
- * @param options.colorFilter is the filter to apply to the image pixel colors to compute the height (optional Color3, default (0.3, 0.59, 0.11) )
152
- * @param options.alphaFilter will filter any data where the alpha channel is below this value, defaults 0 (all data visible)
153
- * @param options.updatable defines if the mesh must be flagged as updatable
154
- * @param options.onReady is a javascript callback function that will be called once the mesh is just built (the height map download can last some time)
155
- * @param options.onError is a javascript callback function that will be called if there is an error
156
- * @param options.passHeightBufferInCallback a boolean that indicates if the calculated height data will be passed in the onReady callback. Useful if you need the height data for physics, for example.
142
+ * - `width` sets the ground width size (positive float, default 10)
143
+ * - `height` sets the ground height size (positive float, default 10)
144
+ * - `subdivisions` sets the number of subdivision per side (positive integer, default 1)
145
+ * - `minHeight` is the minimum altitude on the ground (float, default 0)
146
+ * - `maxHeight` is the maximum altitude on the ground (float, default 1)
147
+ * - `colorFilter` is the filter to apply to the image pixel colors to compute the height (optional Color3, default (0.3, 0.59, 0.11) )
148
+ * - `alphaFilter` will filter any data where the alpha channel is below this value, defaults 0 (all data visible)
149
+ * - `updatable` defines if the mesh must be flagged as updatable
150
+ * - `onReady` is a javascript callback function that will be called once the mesh is just built (the height map download can last some time)
151
+ * - `onError` is a javascript callback function that will be called if there is an error
152
+ * - `passHeightBufferInCallback` a boolean that indicates if the calculated height data will be passed in the onReady callback. Useful if you need the height data for physics, for example.
157
153
  * @param scene defines the hosting scene
158
154
  * @returns the ground mesh
159
155
  * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/height_map
@@ -10,11 +10,11 @@ import { useOpenGLOrientationForUV } from "../../Compat/compatibilityOptions.js"
10
10
  /**
11
11
  * Creates the VertexData for a Ground
12
12
  * @param options an object used to set the following optional parameters for the Ground, required but can be empty
13
- * @param options.width the width (x direction) of the ground, optional, default 1
14
- * @param options.height the height (z direction) of the ground, optional, default 1
15
- * @param options.subdivisions the number of subdivisions per side, optional, default 1
16
- * @param options.subdivisionsX the number of subdivisions in the x direction, overrides options.subdivisions, optional, default undefined
17
- * @param options.subdivisionsY the number of subdivisions in the y direction, overrides options.subdivisions, optional, default undefined
13
+ * - `width` the width (x direction) of the ground, optional, default 1
14
+ * - `height` the height (z direction) of the ground, optional, default 1
15
+ * - `subdivisions` the number of subdivisions per side, optional, default 1
16
+ * - `subdivisionsX` the number of subdivisions in the x direction, overrides options.subdivisions, optional, default undefined
17
+ * - `subdivisionsY` the number of subdivisions in the y direction, overrides options.subdivisions, optional, default undefined
18
18
  * @returns the VertexData of the Ground
19
19
  */
20
20
  export function CreateGroundVertexData(options) {
@@ -57,16 +57,12 @@ export function CreateGroundVertexData(options) {
57
57
  /**
58
58
  * Creates the VertexData for a TiledGround by subdividing the ground into tiles
59
59
  * @param options an object used to set the following optional parameters for the Ground
60
- * @param options.xmin ground minimum X coordinate, default -1
61
- * @param options.zmin ground minimum Z coordinate, default -1
62
- * @param options.xmax ground maximum X coordinate, default 1
63
- * @param options.zmax ground maximum Z coordinate, default 1
64
- * @param options.subdivisions a javascript object {w: positive integer, h: positive integer}, `w` and `h` are the numbers of subdivisions on the ground width and height creating 'tiles', default {w: 6, h: 6}
65
- * @param options.subdivisions.w positive integer, default 6
66
- * @param options.subdivisions.h positive integer, default 6
67
- * @param options.precision a javascript object {w: positive integer, h: positive integer}, `w` and `h` are the numbers of subdivisions on the tile width and height, default {w: 2, h: 2}
68
- * @param options.precision.w positive integer, default 2
69
- * @param options.precision.h positive integer, default 2
60
+ * - `xmin` ground minimum X coordinate, default -1
61
+ * - `zmin` ground minimum Z coordinate, default -1
62
+ * - `xmax` ground maximum X coordinate, default 1
63
+ * - `zmax` ground maximum Z coordinate, default 1
64
+ * - `subdivisions` a javascript object `\{w: positive integer, h: positive integer\}`, `w` and `h` are the numbers of subdivisions on the ground width and height creating 'tiles', default `\{w: 6, h: 6\}`
65
+ * - `precision` a javascript object `\{w: positive integer, h: positive integer\}`, `w` and `h` are the numbers of subdivisions on the tile width and height, default `\{w: 2, h: 2\}`
70
66
  * @returns the VertexData of the TiledGround
71
67
  */
72
68
  export function CreateTiledGroundVertexData(options) {
@@ -134,17 +130,17 @@ export function CreateTiledGroundVertexData(options) {
134
130
  /**
135
131
  * Creates the VertexData of the Ground designed from a heightmap
136
132
  * @param options an object used to set the following parameters for the Ground, required and provided by CreateGroundFromHeightMap
137
- * @param options.width the width (x direction) of the ground
138
- * @param options.height the height (z direction) of the ground
139
- * @param options.subdivisions the number of subdivisions per side
140
- * @param options.minHeight the minimum altitude on the ground, optional, default 0
141
- * @param options.maxHeight the maximum altitude on the ground, optional default 1
142
- * @param options.colorFilter the filter to apply to the image pixel colors to compute the height, optional Color3, default (0.3, 0.59, 0.11)
143
- * @param options.buffer the array holding the image color data
144
- * @param options.bufferWidth the width of image
145
- * @param options.bufferHeight the height of image
146
- * @param options.alphaFilter Remove any data where the alpha channel is below this value, defaults 0 (all data visible)
147
- * @param options.heightBuffer a array of floats where the height data can be saved, if its length is greater than zero.
133
+ * - `width` the width (x direction) of the ground
134
+ * - `height` the height (z direction) of the ground
135
+ * - `subdivisions` the number of subdivisions per side
136
+ * - `minHeight` the minimum altitude on the ground, optional, default 0
137
+ * - `maxHeight` the maximum altitude on the ground, optional default 1
138
+ * - `colorFilter` the filter to apply to the image pixel colors to compute the height, optional Color3, default (0.3, 0.59, 0.11)
139
+ * - `buffer` the array holding the image color data
140
+ * - `bufferWidth` the width of image
141
+ * - `bufferHeight` the height of image
142
+ * - `alphaFilter` Remove any data where the alpha channel is below this value, defaults 0 (all data visible)
143
+ * - `heightBuffer` a array of floats where the height data can be saved, if its length is greater than zero.
148
144
  * @returns the VertexData of the Ground designed from a heightmap
149
145
  */
150
146
  export function CreateGroundFromHeightMapVertexData(options) {
@@ -239,12 +235,12 @@ export function CreateGroundFromHeightMapVertexData(options) {
239
235
  * Creates a ground mesh
240
236
  * @param name defines the name of the mesh
241
237
  * @param options defines the options used to create the mesh
242
- * @param options.width set the width size (float, default 1)
243
- * @param options.height set the height size (float, default 1)
244
- * @param options.subdivisions sets the number of subdivision per side (default 1)
245
- * @param options.subdivisionsX sets the number of subdivision on the X axis (overrides subdivisions)
246
- * @param options.subdivisionsY sets the number of subdivision on the Y axis (overrides subdivisions)
247
- * @param options.updatable defines if the mesh must be flagged as updatable (default false)
238
+ * - `width` set the width size (float, default 1)
239
+ * - `height` set the height size (float, default 1)
240
+ * - `subdivisions` sets the number of subdivision per side (default 1)
241
+ * - `subdivisionsX` sets the number of subdivision on the X axis (overrides subdivisions)
242
+ * - `subdivisionsY` sets the number of subdivision on the Y axis (overrides subdivisions)
243
+ * - `updatable` defines if the mesh must be flagged as updatable (default false)
248
244
  * @param scene defines the hosting scene
249
245
  * @returns the ground mesh
250
246
  * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#ground
@@ -269,17 +265,17 @@ export function CreateGround(name, options = {}, scene) {
269
265
  * Creates a tiled ground mesh
270
266
  * @param name defines the name of the mesh
271
267
  * @param options defines the options used to create the mesh
272
- * @param options.xmin ground minimum X coordinate (float, default -1)
273
- * @param options.zmin ground minimum Z coordinate (float, default -1)
274
- * @param options.xmax ground maximum X coordinate (float, default 1)
275
- * @param options.zmax ground maximum Z coordinate (float, default 1)
276
- * @param options.subdivisions a javascript object `{w: positive integer, h: positive integer}` (default `{w: 6, h: 6}`). `w` and `h` are the numbers of subdivisions on the ground width and height. Each subdivision is called a tile
277
- * @param options.subdivisions.w positive integer, default 6
278
- * @param options.subdivisions.h positive integer, default 6
279
- * @param options.precision a javascript object `{w: positive integer, h: positive integer}` (default `{w: 2, h: 2}`). `w` and `h` are the numbers of subdivisions on the ground width and height of each tile
280
- * @param options.precision.w positive integer, default 2
281
- * @param options.precision.h positive integer, default 2
282
- * @param options.updatable boolean, default false, true if the mesh must be flagged as updatable
268
+ * - `xmin` ground minimum X coordinate (float, default -1)
269
+ * - `zmin` ground minimum Z coordinate (float, default -1)
270
+ * - `xmax` ground maximum X coordinate (float, default 1)
271
+ * - `zmax` ground maximum Z coordinate (float, default 1)
272
+ * - `subdivisions` a javascript object `{w: positive integer, h: positive integer}` (default `{w: 6, h: 6}`). `w` and `h` are the numbers of subdivisions on the ground width and height. Each subdivision is called a tile
273
+ * - `subdivisions.w` positive integer, default 6
274
+ * - `subdivisions.h` positive integer, default 6
275
+ * - `precision` a javascript object `{w: positive integer, h: positive integer}` (default `{w: 2, h: 2}`). `w` and `h` are the numbers of subdivisions on the ground width and height of each tile
276
+ * - `precision.w` positive integer, default 2
277
+ * - `precision.h` positive integer, default 2
278
+ * - `updatable` boolean, default false, true if the mesh must be flagged as updatable
283
279
  * @param scene defines the hosting scene
284
280
  * @returns the tiled ground mesh
285
281
  * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#tiled-ground
@@ -297,17 +293,17 @@ export function CreateTiledGround(name, options, scene = null) {
297
293
  * @param name defines the name of the mesh
298
294
  * @param url sets the URL of the height map image resource.
299
295
  * @param options defines the options used to create the mesh
300
- * @param options.width sets the ground width size (positive float, default 10)
301
- * @param options.height sets the ground height size (positive float, default 10)
302
- * @param options.subdivisions sets the number of subdivision per side (positive integer, default 1)
303
- * @param options.minHeight is the minimum altitude on the ground (float, default 0)
304
- * @param options.maxHeight is the maximum altitude on the ground (float, default 1)
305
- * @param options.colorFilter is the filter to apply to the image pixel colors to compute the height (optional Color3, default (0.3, 0.59, 0.11) )
306
- * @param options.alphaFilter will filter any data where the alpha channel is below this value, defaults 0 (all data visible)
307
- * @param options.updatable defines if the mesh must be flagged as updatable
308
- * @param options.onReady is a javascript callback function that will be called once the mesh is just built (the height map download can last some time)
309
- * @param options.onError is a javascript callback function that will be called if there is an error
310
- * @param options.passHeightBufferInCallback a boolean that indicates if the calculated height data will be passed in the onReady callback. Useful if you need the height data for physics, for example.
296
+ * - `width` sets the ground width size (positive float, default 10)
297
+ * - `height` sets the ground height size (positive float, default 10)
298
+ * - `subdivisions` sets the number of subdivision per side (positive integer, default 1)
299
+ * - `minHeight` is the minimum altitude on the ground (float, default 0)
300
+ * - `maxHeight` is the maximum altitude on the ground (float, default 1)
301
+ * - `colorFilter` is the filter to apply to the image pixel colors to compute the height (optional Color3, default (0.3, 0.59, 0.11) )
302
+ * - `alphaFilter` will filter any data where the alpha channel is below this value, defaults 0 (all data visible)
303
+ * - `updatable` defines if the mesh must be flagged as updatable
304
+ * - `onReady` is a javascript callback function that will be called once the mesh is just built (the height map download can last some time)
305
+ * - `onError` is a javascript callback function that will be called if there is an error
306
+ * - `passHeightBufferInCallback` a boolean that indicates if the calculated height data will be passed in the onReady callback. Useful if you need the height data for physics, for example.
311
307
  * @param scene defines the hosting scene
312
308
  * @returns the ground mesh
313
309
  * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/height_map
@@ -1 +1 @@
1
- {"version":3,"file":"groundBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/groundBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { GroundMesh } from \"../groundMesh\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { EngineStore } from \"../../Engines/engineStore\";\r\nimport { Epsilon } from \"../../Maths/math.constants\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\n/**\r\n * Creates the VertexData for a Ground\r\n * @param options an object used to set the following optional parameters for the Ground, required but can be empty\r\n * @param options.width the width (x direction) of the ground, optional, default 1\r\n * @param options.height the height (z direction) of the ground, optional, default 1\r\n * @param options.subdivisions the number of subdivisions per side, optional, default 1\r\n * @param options.subdivisionsX the number of subdivisions in the x direction, overrides options.subdivisions, optional, default undefined\r\n * @param options.subdivisionsY the number of subdivisions in the y direction, overrides options.subdivisions, optional, default undefined\r\n * @returns the VertexData of the Ground\r\n */\r\nexport function CreateGroundVertexData(options: {\r\n size?: number;\r\n width?: number;\r\n height?: number;\r\n subdivisions?: number;\r\n subdivisionsX?: number;\r\n subdivisionsY?: number;\r\n}): VertexData {\r\n const indices = [];\r\n const positions = [];\r\n const normals = [];\r\n const uvs = [];\r\n let row: number, col: number;\r\n\r\n const width: number = options.width || options.size || 1;\r\n const height: number = options.height || options.size || 1;\r\n const subdivisionsX: number = (options.subdivisionsX || options.subdivisions || 1) | 0;\r\n const subdivisionsY: number = (options.subdivisionsY || options.subdivisions || 1) | 0;\r\n\r\n for (row = 0; row <= subdivisionsY; row++) {\r\n for (col = 0; col <= subdivisionsX; col++) {\r\n const position = new Vector3((col * width) / subdivisionsX - width / 2.0, 0, ((subdivisionsY - row) * height) / subdivisionsY - height / 2.0);\r\n const normal = new Vector3(0, 1.0, 0);\r\n\r\n positions.push(position.x, position.y, position.z);\r\n normals.push(normal.x, normal.y, normal.z);\r\n uvs.push(col / subdivisionsX, useOpenGLOrientationForUV ? row / subdivisionsY : 1.0 - row / subdivisionsY);\r\n }\r\n }\r\n\r\n for (row = 0; row < subdivisionsY; row++) {\r\n for (col = 0; col < subdivisionsX; col++) {\r\n indices.push(col + 1 + (row + 1) * (subdivisionsX + 1));\r\n indices.push(col + 1 + row * (subdivisionsX + 1));\r\n indices.push(col + row * (subdivisionsX + 1));\r\n\r\n indices.push(col + (row + 1) * (subdivisionsX + 1));\r\n indices.push(col + 1 + (row + 1) * (subdivisionsX + 1));\r\n indices.push(col + row * (subdivisionsX + 1));\r\n }\r\n }\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates the VertexData for a TiledGround by subdividing the ground into tiles\r\n * @param options an object used to set the following optional parameters for the Ground\r\n * @param options.xmin ground minimum X coordinate, default -1\r\n * @param options.zmin ground minimum Z coordinate, default -1\r\n * @param options.xmax ground maximum X coordinate, default 1\r\n * @param options.zmax ground maximum Z coordinate, default 1\r\n * @param options.subdivisions a javascript object {w: positive integer, h: positive integer}, `w` and `h` are the numbers of subdivisions on the ground width and height creating 'tiles', default {w: 6, h: 6}\r\n * @param options.subdivisions.w positive integer, default 6\r\n * @param options.subdivisions.h positive integer, default 6\r\n * @param options.precision a javascript object {w: positive integer, h: positive integer}, `w` and `h` are the numbers of subdivisions on the tile width and height, default {w: 2, h: 2}\r\n * @param options.precision.w positive integer, default 2\r\n * @param options.precision.h positive integer, default 2\r\n * @returns the VertexData of the TiledGround\r\n */\r\nexport function CreateTiledGroundVertexData(options: {\r\n xmin: number;\r\n zmin: number;\r\n xmax: number;\r\n zmax: number;\r\n subdivisions?: { w: number; h: number };\r\n precision?: { w: number; h: number };\r\n}): VertexData {\r\n const xmin = options.xmin !== undefined && options.xmin !== null ? options.xmin : -1.0;\r\n const zmin = options.zmin !== undefined && options.zmin !== null ? options.zmin : -1.0;\r\n const xmax = options.xmax !== undefined && options.xmax !== null ? options.xmax : 1.0;\r\n const zmax = options.zmax !== undefined && options.zmax !== null ? options.zmax : 1.0;\r\n const subdivisions = options.subdivisions || { w: 1, h: 1 };\r\n const precision = options.precision || { w: 1, h: 1 };\r\n\r\n const indices: number[] = [];\r\n const positions: number[] = [];\r\n const normals: number[] = [];\r\n const uvs: number[] = [];\r\n let row: number, col: number, tileRow: number, tileCol: number;\r\n\r\n subdivisions.h = subdivisions.h < 1 ? 1 : subdivisions.h;\r\n subdivisions.w = subdivisions.w < 1 ? 1 : subdivisions.w;\r\n precision.w = precision.w < 1 ? 1 : precision.w;\r\n precision.h = precision.h < 1 ? 1 : precision.h;\r\n\r\n const tileSize = {\r\n w: (xmax - xmin) / subdivisions.w,\r\n h: (zmax - zmin) / subdivisions.h,\r\n };\r\n\r\n function applyTile(xTileMin: number, zTileMin: number, xTileMax: number, zTileMax: number) {\r\n // Indices\r\n const base = positions.length / 3;\r\n const rowLength = precision.w + 1;\r\n for (row = 0; row < precision.h; row++) {\r\n for (col = 0; col < precision.w; col++) {\r\n const square = [base + col + row * rowLength, base + (col + 1) + row * rowLength, base + (col + 1) + (row + 1) * rowLength, base + col + (row + 1) * rowLength];\r\n\r\n indices.push(square[1]);\r\n indices.push(square[2]);\r\n indices.push(square[3]);\r\n indices.push(square[0]);\r\n indices.push(square[1]);\r\n indices.push(square[3]);\r\n }\r\n }\r\n\r\n // Position, normals and uvs\r\n const position = Vector3.Zero();\r\n const normal = new Vector3(0, 1.0, 0);\r\n for (row = 0; row <= precision.h; row++) {\r\n position.z = (row * (zTileMax - zTileMin)) / precision.h + zTileMin;\r\n for (col = 0; col <= precision.w; col++) {\r\n position.x = (col * (xTileMax - xTileMin)) / precision.w + xTileMin;\r\n position.y = 0;\r\n\r\n positions.push(position.x, position.y, position.z);\r\n normals.push(normal.x, normal.y, normal.z);\r\n uvs.push(col / precision.w, row / precision.h);\r\n }\r\n }\r\n }\r\n\r\n for (tileRow = 0; tileRow < subdivisions.h; tileRow++) {\r\n for (tileCol = 0; tileCol < subdivisions.w; tileCol++) {\r\n applyTile(xmin + tileCol * tileSize.w, zmin + tileRow * tileSize.h, xmin + (tileCol + 1) * tileSize.w, zmin + (tileRow + 1) * tileSize.h);\r\n }\r\n }\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates the VertexData of the Ground designed from a heightmap\r\n * @param options an object used to set the following parameters for the Ground, required and provided by CreateGroundFromHeightMap\r\n * @param options.width the width (x direction) of the ground\r\n * @param options.height the height (z direction) of the ground\r\n * @param options.subdivisions the number of subdivisions per side\r\n * @param options.minHeight the minimum altitude on the ground, optional, default 0\r\n * @param options.maxHeight the maximum altitude on the ground, optional default 1\r\n * @param options.colorFilter the filter to apply to the image pixel colors to compute the height, optional Color3, default (0.3, 0.59, 0.11)\r\n * @param options.buffer the array holding the image color data\r\n * @param options.bufferWidth the width of image\r\n * @param options.bufferHeight the height of image\r\n * @param options.alphaFilter Remove any data where the alpha channel is below this value, defaults 0 (all data visible)\r\n * @param options.heightBuffer a array of floats where the height data can be saved, if its length is greater than zero.\r\n * @returns the VertexData of the Ground designed from a heightmap\r\n */\r\nexport function CreateGroundFromHeightMapVertexData(options: {\r\n width: number;\r\n height: number;\r\n subdivisions: number;\r\n minHeight: number;\r\n maxHeight: number;\r\n colorFilter: Color3;\r\n buffer: Uint8Array;\r\n bufferWidth: number;\r\n bufferHeight: number;\r\n alphaFilter: number;\r\n heightBuffer?: Float32Array;\r\n}): VertexData {\r\n const indices = [];\r\n const positions = [];\r\n const normals = [];\r\n const uvs = [];\r\n let row, col;\r\n const filter = options.colorFilter || new Color3(0.3, 0.59, 0.11);\r\n const alphaFilter = options.alphaFilter || 0.0;\r\n let invert = false;\r\n\r\n if (options.minHeight > options.maxHeight) {\r\n invert = true;\r\n const temp = options.maxHeight;\r\n options.maxHeight = options.minHeight;\r\n options.minHeight = temp;\r\n }\r\n\r\n // Vertices\r\n for (row = 0; row <= options.subdivisions; row++) {\r\n for (col = 0; col <= options.subdivisions; col++) {\r\n const position = new Vector3(\r\n (col * options.width) / options.subdivisions - options.width / 2.0,\r\n 0,\r\n ((options.subdivisions - row) * options.height) / options.subdivisions - options.height / 2.0\r\n );\r\n\r\n // Compute height\r\n const heightMapX = (((position.x + options.width / 2) / options.width) * (options.bufferWidth - 1)) | 0;\r\n const heightMapY = ((1.0 - (position.z + options.height / 2) / options.height) * (options.bufferHeight - 1)) | 0;\r\n const pos = (heightMapX + heightMapY * options.bufferWidth) * 4;\r\n let r = options.buffer[pos] / 255.0;\r\n let g = options.buffer[pos + 1] / 255.0;\r\n let b = options.buffer[pos + 2] / 255.0;\r\n const a = options.buffer[pos + 3] / 255.0;\r\n\r\n if (invert) {\r\n r = 1.0 - r;\r\n g = 1.0 - g;\r\n b = 1.0 - b;\r\n }\r\n\r\n const gradient = r * filter.r + g * filter.g + b * filter.b;\r\n\r\n // If our alpha channel is not within our filter then we will assign a 'special' height\r\n // Then when building the indices, we will ignore any vertex that is using the special height\r\n if (a >= alphaFilter) {\r\n position.y = options.minHeight + (options.maxHeight - options.minHeight) * gradient;\r\n } else {\r\n position.y = options.minHeight - Epsilon; // We can't have a height below minHeight, normally.\r\n }\r\n if (options.heightBuffer) {\r\n // set the height buffer information in row major order.\r\n options.heightBuffer[row * (options.subdivisions + 1) + col] = position.y;\r\n }\r\n\r\n // Add vertex\r\n positions.push(position.x, position.y, position.z);\r\n normals.push(0, 0, 0);\r\n uvs.push(col / options.subdivisions, 1.0 - row / options.subdivisions);\r\n }\r\n }\r\n\r\n // Indices\r\n for (row = 0; row < options.subdivisions; row++) {\r\n for (col = 0; col < options.subdivisions; col++) {\r\n // Calculate Indices\r\n const idx1 = col + 1 + (row + 1) * (options.subdivisions + 1);\r\n const idx2 = col + 1 + row * (options.subdivisions + 1);\r\n const idx3 = col + row * (options.subdivisions + 1);\r\n const idx4 = col + (row + 1) * (options.subdivisions + 1);\r\n\r\n // Check that all indices are visible (based on our special height)\r\n // Only display the vertex if all Indices are visible\r\n // Positions are stored x,y,z for each vertex, hence the * 3 and + 1 for height\r\n const isVisibleIdx1 = positions[idx1 * 3 + 1] >= options.minHeight;\r\n const isVisibleIdx2 = positions[idx2 * 3 + 1] >= options.minHeight;\r\n const isVisibleIdx3 = positions[idx3 * 3 + 1] >= options.minHeight;\r\n if (isVisibleIdx1 && isVisibleIdx2 && isVisibleIdx3) {\r\n indices.push(idx1);\r\n indices.push(idx2);\r\n indices.push(idx3);\r\n }\r\n\r\n const isVisibleIdx4 = positions[idx4 * 3 + 1] >= options.minHeight;\r\n if (isVisibleIdx4 && isVisibleIdx1 && isVisibleIdx3) {\r\n indices.push(idx4);\r\n indices.push(idx1);\r\n indices.push(idx3);\r\n }\r\n }\r\n }\r\n\r\n // Normals\r\n VertexData.ComputeNormals(positions, indices, normals);\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a ground mesh\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param options.width set the width size (float, default 1)\r\n * @param options.height set the height size (float, default 1)\r\n * @param options.subdivisions sets the number of subdivision per side (default 1)\r\n * @param options.subdivisionsX sets the number of subdivision on the X axis (overrides subdivisions)\r\n * @param options.subdivisionsY sets the number of subdivision on the Y axis (overrides subdivisions)\r\n * @param options.updatable defines if the mesh must be flagged as updatable (default false)\r\n * @param scene defines the hosting scene\r\n * @returns the ground mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#ground\r\n */\r\nexport function CreateGround(\r\n name: string,\r\n options: { width?: number; height?: number; subdivisions?: number; subdivisionsX?: number; subdivisionsY?: number; updatable?: boolean } = {},\r\n scene?: Scene\r\n): GroundMesh {\r\n const ground = new GroundMesh(name, scene);\r\n ground._setReady(false);\r\n ground._subdivisionsX = options.subdivisionsX || options.subdivisions || 1;\r\n ground._subdivisionsY = options.subdivisionsY || options.subdivisions || 1;\r\n ground._width = options.width || 1;\r\n ground._height = options.height || 1;\r\n ground._maxX = ground._width / 2;\r\n ground._maxZ = ground._height / 2;\r\n ground._minX = -ground._maxX;\r\n ground._minZ = -ground._maxZ;\r\n\r\n const vertexData = CreateGroundVertexData(options);\r\n\r\n vertexData.applyToMesh(ground, options.updatable);\r\n\r\n ground._setReady(true);\r\n\r\n return ground;\r\n}\r\n\r\n/**\r\n * Creates a tiled ground mesh\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * @param options.xmin ground minimum X coordinate (float, default -1)\r\n * @param options.zmin ground minimum Z coordinate (float, default -1)\r\n * @param options.xmax ground maximum X coordinate (float, default 1)\r\n * @param options.zmax ground maximum Z coordinate (float, default 1)\r\n * @param options.subdivisions a javascript object `{w: positive integer, h: positive integer}` (default `{w: 6, h: 6}`). `w` and `h` are the numbers of subdivisions on the ground width and height. Each subdivision is called a tile\r\n * @param options.subdivisions.w positive integer, default 6\r\n * @param options.subdivisions.h positive integer, default 6\r\n * @param options.precision a javascript object `{w: positive integer, h: positive integer}` (default `{w: 2, h: 2}`). `w` and `h` are the numbers of subdivisions on the ground width and height of each tile\r\n * @param options.precision.w positive integer, default 2\r\n * @param options.precision.h positive integer, default 2\r\n * @param options.updatable boolean, default false, true if the mesh must be flagged as updatable\r\n * @param scene defines the hosting scene\r\n * @returns the tiled ground mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#tiled-ground\r\n */\r\nexport function CreateTiledGround(\r\n name: string,\r\n options: { xmin: number; zmin: number; xmax: number; zmax: number; subdivisions?: { w: number; h: number }; precision?: { w: number; h: number }; updatable?: boolean },\r\n scene: Nullable<Scene> = null\r\n): Mesh {\r\n const tiledGround = new Mesh(name, scene);\r\n\r\n const vertexData = CreateTiledGroundVertexData(options);\r\n\r\n vertexData.applyToMesh(tiledGround, options.updatable);\r\n\r\n return tiledGround;\r\n}\r\n\r\n/**\r\n * Creates a ground mesh from a height map. The height map download can take some frames,\r\n * so the mesh is not immediately ready. To wait for the mesh to be completely built,\r\n * you should use the `onReady` callback option.\r\n * @param name defines the name of the mesh\r\n * @param url sets the URL of the height map image resource.\r\n * @param options defines the options used to create the mesh\r\n * @param options.width sets the ground width size (positive float, default 10)\r\n * @param options.height sets the ground height size (positive float, default 10)\r\n * @param options.subdivisions sets the number of subdivision per side (positive integer, default 1)\r\n * @param options.minHeight is the minimum altitude on the ground (float, default 0)\r\n * @param options.maxHeight is the maximum altitude on the ground (float, default 1)\r\n * @param options.colorFilter is the filter to apply to the image pixel colors to compute the height (optional Color3, default (0.3, 0.59, 0.11) )\r\n * @param options.alphaFilter will filter any data where the alpha channel is below this value, defaults 0 (all data visible)\r\n * @param options.updatable defines if the mesh must be flagged as updatable\r\n * @param options.onReady is a javascript callback function that will be called once the mesh is just built (the height map download can last some time)\r\n * @param options.onError is a javascript callback function that will be called if there is an error\r\n * @param options.passHeightBufferInCallback a boolean that indicates if the calculated height data will be passed in the onReady callback. Useful if you need the height data for physics, for example.\r\n * @param scene defines the hosting scene\r\n * @returns the ground mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/height_map\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#ground-from-a-height-map\r\n */\r\nexport function CreateGroundFromHeightMap(\r\n name: string,\r\n url: string | { data: Uint8Array; width: number; height: number },\r\n options: {\r\n width?: number;\r\n height?: number;\r\n subdivisions?: number;\r\n minHeight?: number;\r\n maxHeight?: number;\r\n colorFilter?: Color3;\r\n alphaFilter?: number;\r\n updatable?: boolean;\r\n onReady?: (mesh: GroundMesh, heightBuffer?: Float32Array) => void;\r\n onError?: (message?: string, exception?: any) => void;\r\n passHeightBufferInCallback?: boolean;\r\n } = {},\r\n scene: Nullable<Scene> = null\r\n): GroundMesh {\r\n const width = options.width || 10.0;\r\n const height = options.height || 10.0;\r\n const subdivisions = options.subdivisions || 1 | 0;\r\n const minHeight = options.minHeight || 0.0;\r\n const maxHeight = options.maxHeight || 1.0;\r\n const filter = options.colorFilter || new Color3(0.3, 0.59, 0.11);\r\n const alphaFilter = options.alphaFilter || 0.0;\r\n const updatable = options.updatable;\r\n const onReady = options.onReady;\r\n\r\n scene = scene || EngineStore.LastCreatedScene!;\r\n\r\n const ground = new GroundMesh(name, scene);\r\n ground._subdivisionsX = subdivisions;\r\n ground._subdivisionsY = subdivisions;\r\n ground._width = width;\r\n ground._height = height;\r\n ground._maxX = ground._width / 2.0;\r\n ground._maxZ = ground._height / 2.0;\r\n ground._minX = -ground._maxX;\r\n ground._minZ = -ground._maxZ;\r\n\r\n ground._setReady(false);\r\n\r\n let heightBuffer: Float32Array;\r\n if (options.passHeightBufferInCallback) {\r\n heightBuffer = new Float32Array((subdivisions + 1) * (subdivisions + 1));\r\n }\r\n\r\n const onBufferLoaded = (buffer: Uint8Array, bufferWidth: number, bufferHeight: number) => {\r\n const vertexData = CreateGroundFromHeightMapVertexData({\r\n width: width,\r\n height: height,\r\n subdivisions: subdivisions,\r\n minHeight: minHeight,\r\n maxHeight: maxHeight,\r\n colorFilter: filter,\r\n buffer: buffer,\r\n bufferWidth: bufferWidth,\r\n bufferHeight: bufferHeight,\r\n alphaFilter: alphaFilter,\r\n heightBuffer,\r\n });\r\n\r\n vertexData.applyToMesh(ground, updatable);\r\n\r\n //execute ready callback, if set\r\n if (onReady) {\r\n onReady(ground, heightBuffer);\r\n }\r\n\r\n ground._setReady(true);\r\n };\r\n\r\n if (typeof url === \"string\") {\r\n const onload = (img: HTMLImageElement | ImageBitmap) => {\r\n const bufferWidth = img.width;\r\n const bufferHeight = img.height;\r\n\r\n if (scene.isDisposed) {\r\n return;\r\n }\r\n\r\n const buffer = scene?.getEngine().resizeImageBitmap(img, bufferWidth, bufferHeight);\r\n\r\n onBufferLoaded(buffer, bufferWidth, bufferHeight);\r\n };\r\n\r\n Tools.LoadImage(url, onload, options.onError ? options.onError : () => {}, scene.offlineProvider);\r\n } else {\r\n onBufferLoaded(url.data, url.width, url.height);\r\n }\r\n\r\n return ground;\r\n}\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the functions directly from the module\r\n */\r\nexport const GroundBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateGround,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateGroundFromHeightMap,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateTiledGround,\r\n};\r\n\r\nVertexData.CreateGround = CreateGroundVertexData;\r\nVertexData.CreateTiledGround = CreateTiledGroundVertexData;\r\nVertexData.CreateGroundFromHeightMap = CreateGroundFromHeightMapVertexData;\r\n\r\nMesh.CreateGround = (name: string, width: number, height: number, subdivisions: number, scene?: Scene, updatable?: boolean): Mesh => {\r\n const options = {\r\n width,\r\n height,\r\n subdivisions,\r\n updatable,\r\n };\r\n\r\n return CreateGround(name, options, scene);\r\n};\r\n\r\nMesh.CreateTiledGround = (\r\n name: string,\r\n xmin: number,\r\n zmin: number,\r\n xmax: number,\r\n zmax: number,\r\n subdivisions: { w: number; h: number },\r\n precision: { w: number; h: number },\r\n scene: Scene,\r\n updatable?: boolean\r\n): Mesh => {\r\n const options = {\r\n xmin,\r\n zmin,\r\n xmax,\r\n zmax,\r\n subdivisions,\r\n precision,\r\n updatable,\r\n };\r\n\r\n return CreateTiledGround(name, options, scene);\r\n};\r\n\r\nMesh.CreateGroundFromHeightMap = (\r\n name: string,\r\n url: string,\r\n width: number,\r\n height: number,\r\n subdivisions: number,\r\n minHeight: number,\r\n maxHeight: number,\r\n scene: Scene,\r\n updatable?: boolean,\r\n onReady?: (mesh: GroundMesh) => void,\r\n alphaFilter?: number\r\n): GroundMesh => {\r\n const options = {\r\n width,\r\n height,\r\n subdivisions,\r\n minHeight,\r\n maxHeight,\r\n updatable,\r\n onReady,\r\n alphaFilter,\r\n };\r\n\r\n return CreateGroundFromHeightMap(name, url, options, scene);\r\n};\r\n"]}
1
+ {"version":3,"file":"groundBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/groundBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAOtC;IACG,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAI,GAAW,EAAE,GAAW,CAAC;IAE7B,MAAM,KAAK,GAAW,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IACzD,MAAM,MAAM,GAAW,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAW,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACvF,MAAM,aAAa,GAAW,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEvF,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;QACxC,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,aAAa,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,aAAa,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC;YAC9I,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAEtC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,aAAa,CAAC,CAAC;QAC/G,CAAC;IACL,CAAC;IAED,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;YAE9C,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAED,SAAS;IACT,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAEpC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;IAErB,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAO3C;IACG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACvF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACvF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACtF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACtF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAEtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAW,EAAE,GAAW,EAAE,OAAe,EAAE,OAAe,CAAC;IAE/D,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACzD,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACzD,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG;QACb,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QACjC,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;KACpC,CAAC;IAEF,SAAS,SAAS,CAAC,QAAgB,EAAE,QAAgB,EAAE,QAAgB,EAAE,QAAgB;QACrF,UAAU;QACV,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACrC,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;gBAEhK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACtC,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACtC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC;YACpE,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;gBACtC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACpE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEf,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3C,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,KAAK,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YACpD,SAAS,CAAC,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9I,CAAC;IACL,CAAC;IAED,SAAS;IACT,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAEpC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;IAErB,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mCAAmC,CAAC,OAYnD;IACG,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,IAAI,GAAG,EAAE,GAAG,CAAC;IACb,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC;IAC/C,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,IAAI,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC/B,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACtC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,WAAW;IACX,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;QAC/C,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,OAAO,CACxB,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,GAAG,GAAG,EAClE,CAAC,EACD,CAAC,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAChG,CAAC;YAEF,iBAAiB;YACjB,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxG,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjH,MAAM,GAAG,GAAG,CAAC,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACxC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACxC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YAE1C,IAAI,MAAM,EAAE,CAAC;gBACT,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBACZ,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBACZ,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAChB,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YAE5D,uFAAuF;YACvF,6FAA6F;YAC7F,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC;gBACnB,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;YACxF,CAAC;iBAAM,CAAC;gBACJ,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,oDAAoD;YAClG,CAAC;YACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACvB,wDAAwD;gBACxD,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YAC9E,CAAC;YAED,cAAc;YACd,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED,UAAU;IACV,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;QAC9C,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;YAC9C,oBAAoB;YACpB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAE1D,mEAAmE;YACnE,qDAAqD;YACrD,+EAA+E;YAC/E,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;YACnE,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;YACnE,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;YACnE,IAAI,aAAa,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;YACnE,IAAI,aAAa,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IAED,UAAU;IACV,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEvD,SAAS;IACT,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAEpC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;IAErB,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CACxB,IAAY,EACZ,UAA2I,EAAE,EAC7I,KAAa;IAEb,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;IAC3E,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;IAC3E,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAE7B,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEnD,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAElD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAC7B,IAAY,EACZ,OAAuK,EACvK,QAAyB,IAAI;IAE7B,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAExD,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvD,OAAO,WAAW,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,yBAAyB,CACrC,IAAY,EACZ,GAAiE,EACjE,UAYI,EAAE,EACN,QAAyB,IAAI;IAE7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,KAAK,GAAG,KAAK,IAAI,WAAW,CAAC,gBAAiB,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,CAAC,cAAc,GAAG,YAAY,CAAC;IACrC,MAAM,CAAC,cAAc,GAAG,YAAY,CAAC;IACrC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACnC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;IACpC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAE7B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAExB,IAAI,YAA0B,CAAC;IAC/B,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;QACrC,YAAY,GAAG,IAAI,YAAY,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,EAAE;QACrF,MAAM,UAAU,GAAG,mCAAmC,CAAC;YACnD,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,YAAY;YAC1B,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,WAAW;YACxB,YAAY,EAAE,YAAY;YAC1B,WAAW,EAAE,WAAW;YACxB,YAAY;SACf,CAAC,CAAC;QAEH,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE1C,gCAAgC;QAChC,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,GAAmC,EAAE,EAAE;YACnD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC;YAC9B,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;YAEhC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACnB,OAAO;YACX,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAEpF,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC;QAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IACtG,CAAC;SAAM,CAAC;QACJ,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AACD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,gEAAgE;IAChE,YAAY;IACZ,gEAAgE;IAChE,yBAAyB;IACzB,gEAAgE;IAChE,iBAAiB;CACpB,CAAC;AAEF,UAAU,CAAC,YAAY,GAAG,sBAAsB,CAAC;AACjD,UAAU,CAAC,iBAAiB,GAAG,2BAA2B,CAAC;AAC3D,UAAU,CAAC,yBAAyB,GAAG,mCAAmC,CAAC;AAE3E,IAAI,CAAC,YAAY,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,MAAc,EAAE,YAAoB,EAAE,KAAa,EAAE,SAAmB,EAAQ,EAAE;IAChI,MAAM,OAAO,GAAG;QACZ,KAAK;QACL,MAAM;QACN,YAAY;QACZ,SAAS;KACZ,CAAC;IAEF,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,IAAI,CAAC,iBAAiB,GAAG,CACrB,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,YAAsC,EACtC,SAAmC,EACnC,KAAY,EACZ,SAAmB,EACf,EAAE;IACN,MAAM,OAAO,GAAG;QACZ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,YAAY;QACZ,SAAS;QACT,SAAS;KACZ,CAAC;IAEF,OAAO,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,IAAI,CAAC,yBAAyB,GAAG,CAC7B,IAAY,EACZ,GAAW,EACX,KAAa,EACb,MAAc,EACd,YAAoB,EACpB,SAAiB,EACjB,SAAiB,EACjB,KAAY,EACZ,SAAmB,EACnB,OAAoC,EACpC,WAAoB,EACV,EAAE;IACZ,MAAM,OAAO,GAAG;QACZ,KAAK;QACL,MAAM;QACN,YAAY;QACZ,SAAS;QACT,SAAS;QACT,SAAS;QACT,OAAO;QACP,WAAW;KACd,CAAC;IAEF,OAAO,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC,CAAC","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { GroundMesh } from \"../groundMesh\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { EngineStore } from \"../../Engines/engineStore\";\r\nimport { Epsilon } from \"../../Maths/math.constants\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\n/**\r\n * Creates the VertexData for a Ground\r\n * @param options an object used to set the following optional parameters for the Ground, required but can be empty\r\n * - `width` the width (x direction) of the ground, optional, default 1\r\n * - `height` the height (z direction) of the ground, optional, default 1\r\n * - `subdivisions` the number of subdivisions per side, optional, default 1\r\n * - `subdivisionsX` the number of subdivisions in the x direction, overrides options.subdivisions, optional, default undefined\r\n * - `subdivisionsY` the number of subdivisions in the y direction, overrides options.subdivisions, optional, default undefined\r\n * @returns the VertexData of the Ground\r\n */\r\nexport function CreateGroundVertexData(options: {\r\n size?: number;\r\n width?: number;\r\n height?: number;\r\n subdivisions?: number;\r\n subdivisionsX?: number;\r\n subdivisionsY?: number;\r\n}): VertexData {\r\n const indices = [];\r\n const positions = [];\r\n const normals = [];\r\n const uvs = [];\r\n let row: number, col: number;\r\n\r\n const width: number = options.width || options.size || 1;\r\n const height: number = options.height || options.size || 1;\r\n const subdivisionsX: number = (options.subdivisionsX || options.subdivisions || 1) | 0;\r\n const subdivisionsY: number = (options.subdivisionsY || options.subdivisions || 1) | 0;\r\n\r\n for (row = 0; row <= subdivisionsY; row++) {\r\n for (col = 0; col <= subdivisionsX; col++) {\r\n const position = new Vector3((col * width) / subdivisionsX - width / 2.0, 0, ((subdivisionsY - row) * height) / subdivisionsY - height / 2.0);\r\n const normal = new Vector3(0, 1.0, 0);\r\n\r\n positions.push(position.x, position.y, position.z);\r\n normals.push(normal.x, normal.y, normal.z);\r\n uvs.push(col / subdivisionsX, useOpenGLOrientationForUV ? row / subdivisionsY : 1.0 - row / subdivisionsY);\r\n }\r\n }\r\n\r\n for (row = 0; row < subdivisionsY; row++) {\r\n for (col = 0; col < subdivisionsX; col++) {\r\n indices.push(col + 1 + (row + 1) * (subdivisionsX + 1));\r\n indices.push(col + 1 + row * (subdivisionsX + 1));\r\n indices.push(col + row * (subdivisionsX + 1));\r\n\r\n indices.push(col + (row + 1) * (subdivisionsX + 1));\r\n indices.push(col + 1 + (row + 1) * (subdivisionsX + 1));\r\n indices.push(col + row * (subdivisionsX + 1));\r\n }\r\n }\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates the VertexData for a TiledGround by subdividing the ground into tiles\r\n * @param options an object used to set the following optional parameters for the Ground\r\n * - `xmin` ground minimum X coordinate, default -1\r\n * - `zmin` ground minimum Z coordinate, default -1\r\n * - `xmax` ground maximum X coordinate, default 1\r\n * - `zmax` ground maximum Z coordinate, default 1\r\n * - `subdivisions` a javascript object `\\{w: positive integer, h: positive integer\\}`, `w` and `h` are the numbers of subdivisions on the ground width and height creating 'tiles', default `\\{w: 6, h: 6\\}`\r\n * - `precision` a javascript object `\\{w: positive integer, h: positive integer\\}`, `w` and `h` are the numbers of subdivisions on the tile width and height, default `\\{w: 2, h: 2\\}`\r\n * @returns the VertexData of the TiledGround\r\n */\r\nexport function CreateTiledGroundVertexData(options: {\r\n xmin: number;\r\n zmin: number;\r\n xmax: number;\r\n zmax: number;\r\n subdivisions?: { w: number; h: number };\r\n precision?: { w: number; h: number };\r\n}): VertexData {\r\n const xmin = options.xmin !== undefined && options.xmin !== null ? options.xmin : -1.0;\r\n const zmin = options.zmin !== undefined && options.zmin !== null ? options.zmin : -1.0;\r\n const xmax = options.xmax !== undefined && options.xmax !== null ? options.xmax : 1.0;\r\n const zmax = options.zmax !== undefined && options.zmax !== null ? options.zmax : 1.0;\r\n const subdivisions = options.subdivisions || { w: 1, h: 1 };\r\n const precision = options.precision || { w: 1, h: 1 };\r\n\r\n const indices: number[] = [];\r\n const positions: number[] = [];\r\n const normals: number[] = [];\r\n const uvs: number[] = [];\r\n let row: number, col: number, tileRow: number, tileCol: number;\r\n\r\n subdivisions.h = subdivisions.h < 1 ? 1 : subdivisions.h;\r\n subdivisions.w = subdivisions.w < 1 ? 1 : subdivisions.w;\r\n precision.w = precision.w < 1 ? 1 : precision.w;\r\n precision.h = precision.h < 1 ? 1 : precision.h;\r\n\r\n const tileSize = {\r\n w: (xmax - xmin) / subdivisions.w,\r\n h: (zmax - zmin) / subdivisions.h,\r\n };\r\n\r\n function applyTile(xTileMin: number, zTileMin: number, xTileMax: number, zTileMax: number) {\r\n // Indices\r\n const base = positions.length / 3;\r\n const rowLength = precision.w + 1;\r\n for (row = 0; row < precision.h; row++) {\r\n for (col = 0; col < precision.w; col++) {\r\n const square = [base + col + row * rowLength, base + (col + 1) + row * rowLength, base + (col + 1) + (row + 1) * rowLength, base + col + (row + 1) * rowLength];\r\n\r\n indices.push(square[1]);\r\n indices.push(square[2]);\r\n indices.push(square[3]);\r\n indices.push(square[0]);\r\n indices.push(square[1]);\r\n indices.push(square[3]);\r\n }\r\n }\r\n\r\n // Position, normals and uvs\r\n const position = Vector3.Zero();\r\n const normal = new Vector3(0, 1.0, 0);\r\n for (row = 0; row <= precision.h; row++) {\r\n position.z = (row * (zTileMax - zTileMin)) / precision.h + zTileMin;\r\n for (col = 0; col <= precision.w; col++) {\r\n position.x = (col * (xTileMax - xTileMin)) / precision.w + xTileMin;\r\n position.y = 0;\r\n\r\n positions.push(position.x, position.y, position.z);\r\n normals.push(normal.x, normal.y, normal.z);\r\n uvs.push(col / precision.w, row / precision.h);\r\n }\r\n }\r\n }\r\n\r\n for (tileRow = 0; tileRow < subdivisions.h; tileRow++) {\r\n for (tileCol = 0; tileCol < subdivisions.w; tileCol++) {\r\n applyTile(xmin + tileCol * tileSize.w, zmin + tileRow * tileSize.h, xmin + (tileCol + 1) * tileSize.w, zmin + (tileRow + 1) * tileSize.h);\r\n }\r\n }\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates the VertexData of the Ground designed from a heightmap\r\n * @param options an object used to set the following parameters for the Ground, required and provided by CreateGroundFromHeightMap\r\n * - `width` the width (x direction) of the ground\r\n * - `height` the height (z direction) of the ground\r\n * - `subdivisions` the number of subdivisions per side\r\n * - `minHeight` the minimum altitude on the ground, optional, default 0\r\n * - `maxHeight` the maximum altitude on the ground, optional default 1\r\n * - `colorFilter` the filter to apply to the image pixel colors to compute the height, optional Color3, default (0.3, 0.59, 0.11)\r\n * - `buffer` the array holding the image color data\r\n * - `bufferWidth` the width of image\r\n * - `bufferHeight` the height of image\r\n * - `alphaFilter` Remove any data where the alpha channel is below this value, defaults 0 (all data visible)\r\n * - `heightBuffer` a array of floats where the height data can be saved, if its length is greater than zero.\r\n * @returns the VertexData of the Ground designed from a heightmap\r\n */\r\nexport function CreateGroundFromHeightMapVertexData(options: {\r\n width: number;\r\n height: number;\r\n subdivisions: number;\r\n minHeight: number;\r\n maxHeight: number;\r\n colorFilter: Color3;\r\n buffer: Uint8Array;\r\n bufferWidth: number;\r\n bufferHeight: number;\r\n alphaFilter: number;\r\n heightBuffer?: Float32Array;\r\n}): VertexData {\r\n const indices = [];\r\n const positions = [];\r\n const normals = [];\r\n const uvs = [];\r\n let row, col;\r\n const filter = options.colorFilter || new Color3(0.3, 0.59, 0.11);\r\n const alphaFilter = options.alphaFilter || 0.0;\r\n let invert = false;\r\n\r\n if (options.minHeight > options.maxHeight) {\r\n invert = true;\r\n const temp = options.maxHeight;\r\n options.maxHeight = options.minHeight;\r\n options.minHeight = temp;\r\n }\r\n\r\n // Vertices\r\n for (row = 0; row <= options.subdivisions; row++) {\r\n for (col = 0; col <= options.subdivisions; col++) {\r\n const position = new Vector3(\r\n (col * options.width) / options.subdivisions - options.width / 2.0,\r\n 0,\r\n ((options.subdivisions - row) * options.height) / options.subdivisions - options.height / 2.0\r\n );\r\n\r\n // Compute height\r\n const heightMapX = (((position.x + options.width / 2) / options.width) * (options.bufferWidth - 1)) | 0;\r\n const heightMapY = ((1.0 - (position.z + options.height / 2) / options.height) * (options.bufferHeight - 1)) | 0;\r\n const pos = (heightMapX + heightMapY * options.bufferWidth) * 4;\r\n let r = options.buffer[pos] / 255.0;\r\n let g = options.buffer[pos + 1] / 255.0;\r\n let b = options.buffer[pos + 2] / 255.0;\r\n const a = options.buffer[pos + 3] / 255.0;\r\n\r\n if (invert) {\r\n r = 1.0 - r;\r\n g = 1.0 - g;\r\n b = 1.0 - b;\r\n }\r\n\r\n const gradient = r * filter.r + g * filter.g + b * filter.b;\r\n\r\n // If our alpha channel is not within our filter then we will assign a 'special' height\r\n // Then when building the indices, we will ignore any vertex that is using the special height\r\n if (a >= alphaFilter) {\r\n position.y = options.minHeight + (options.maxHeight - options.minHeight) * gradient;\r\n } else {\r\n position.y = options.minHeight - Epsilon; // We can't have a height below minHeight, normally.\r\n }\r\n if (options.heightBuffer) {\r\n // set the height buffer information in row major order.\r\n options.heightBuffer[row * (options.subdivisions + 1) + col] = position.y;\r\n }\r\n\r\n // Add vertex\r\n positions.push(position.x, position.y, position.z);\r\n normals.push(0, 0, 0);\r\n uvs.push(col / options.subdivisions, 1.0 - row / options.subdivisions);\r\n }\r\n }\r\n\r\n // Indices\r\n for (row = 0; row < options.subdivisions; row++) {\r\n for (col = 0; col < options.subdivisions; col++) {\r\n // Calculate Indices\r\n const idx1 = col + 1 + (row + 1) * (options.subdivisions + 1);\r\n const idx2 = col + 1 + row * (options.subdivisions + 1);\r\n const idx3 = col + row * (options.subdivisions + 1);\r\n const idx4 = col + (row + 1) * (options.subdivisions + 1);\r\n\r\n // Check that all indices are visible (based on our special height)\r\n // Only display the vertex if all Indices are visible\r\n // Positions are stored x,y,z for each vertex, hence the * 3 and + 1 for height\r\n const isVisibleIdx1 = positions[idx1 * 3 + 1] >= options.minHeight;\r\n const isVisibleIdx2 = positions[idx2 * 3 + 1] >= options.minHeight;\r\n const isVisibleIdx3 = positions[idx3 * 3 + 1] >= options.minHeight;\r\n if (isVisibleIdx1 && isVisibleIdx2 && isVisibleIdx3) {\r\n indices.push(idx1);\r\n indices.push(idx2);\r\n indices.push(idx3);\r\n }\r\n\r\n const isVisibleIdx4 = positions[idx4 * 3 + 1] >= options.minHeight;\r\n if (isVisibleIdx4 && isVisibleIdx1 && isVisibleIdx3) {\r\n indices.push(idx4);\r\n indices.push(idx1);\r\n indices.push(idx3);\r\n }\r\n }\r\n }\r\n\r\n // Normals\r\n VertexData.ComputeNormals(positions, indices, normals);\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a ground mesh\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * - `width` set the width size (float, default 1)\r\n * - `height` set the height size (float, default 1)\r\n * - `subdivisions` sets the number of subdivision per side (default 1)\r\n * - `subdivisionsX` sets the number of subdivision on the X axis (overrides subdivisions)\r\n * - `subdivisionsY` sets the number of subdivision on the Y axis (overrides subdivisions)\r\n * - `updatable` defines if the mesh must be flagged as updatable (default false)\r\n * @param scene defines the hosting scene\r\n * @returns the ground mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#ground\r\n */\r\nexport function CreateGround(\r\n name: string,\r\n options: { width?: number; height?: number; subdivisions?: number; subdivisionsX?: number; subdivisionsY?: number; updatable?: boolean } = {},\r\n scene?: Scene\r\n): GroundMesh {\r\n const ground = new GroundMesh(name, scene);\r\n ground._setReady(false);\r\n ground._subdivisionsX = options.subdivisionsX || options.subdivisions || 1;\r\n ground._subdivisionsY = options.subdivisionsY || options.subdivisions || 1;\r\n ground._width = options.width || 1;\r\n ground._height = options.height || 1;\r\n ground._maxX = ground._width / 2;\r\n ground._maxZ = ground._height / 2;\r\n ground._minX = -ground._maxX;\r\n ground._minZ = -ground._maxZ;\r\n\r\n const vertexData = CreateGroundVertexData(options);\r\n\r\n vertexData.applyToMesh(ground, options.updatable);\r\n\r\n ground._setReady(true);\r\n\r\n return ground;\r\n}\r\n\r\n/**\r\n * Creates a tiled ground mesh\r\n * @param name defines the name of the mesh\r\n * @param options defines the options used to create the mesh\r\n * - `xmin` ground minimum X coordinate (float, default -1)\r\n * - `zmin` ground minimum Z coordinate (float, default -1)\r\n * - `xmax` ground maximum X coordinate (float, default 1)\r\n * - `zmax` ground maximum Z coordinate (float, default 1)\r\n * - `subdivisions` a javascript object `{w: positive integer, h: positive integer}` (default `{w: 6, h: 6}`). `w` and `h` are the numbers of subdivisions on the ground width and height. Each subdivision is called a tile\r\n * - `subdivisions.w` positive integer, default 6\r\n * - `subdivisions.h` positive integer, default 6\r\n * - `precision` a javascript object `{w: positive integer, h: positive integer}` (default `{w: 2, h: 2}`). `w` and `h` are the numbers of subdivisions on the ground width and height of each tile\r\n * - `precision.w` positive integer, default 2\r\n * - `precision.h` positive integer, default 2\r\n * - `updatable` boolean, default false, true if the mesh must be flagged as updatable\r\n * @param scene defines the hosting scene\r\n * @returns the tiled ground mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#tiled-ground\r\n */\r\nexport function CreateTiledGround(\r\n name: string,\r\n options: { xmin: number; zmin: number; xmax: number; zmax: number; subdivisions?: { w: number; h: number }; precision?: { w: number; h: number }; updatable?: boolean },\r\n scene: Nullable<Scene> = null\r\n): Mesh {\r\n const tiledGround = new Mesh(name, scene);\r\n\r\n const vertexData = CreateTiledGroundVertexData(options);\r\n\r\n vertexData.applyToMesh(tiledGround, options.updatable);\r\n\r\n return tiledGround;\r\n}\r\n\r\n/**\r\n * Creates a ground mesh from a height map. The height map download can take some frames,\r\n * so the mesh is not immediately ready. To wait for the mesh to be completely built,\r\n * you should use the `onReady` callback option.\r\n * @param name defines the name of the mesh\r\n * @param url sets the URL of the height map image resource.\r\n * @param options defines the options used to create the mesh\r\n * - `width` sets the ground width size (positive float, default 10)\r\n * - `height` sets the ground height size (positive float, default 10)\r\n * - `subdivisions` sets the number of subdivision per side (positive integer, default 1)\r\n * - `minHeight` is the minimum altitude on the ground (float, default 0)\r\n * - `maxHeight` is the maximum altitude on the ground (float, default 1)\r\n * - `colorFilter` is the filter to apply to the image pixel colors to compute the height (optional Color3, default (0.3, 0.59, 0.11) )\r\n * - `alphaFilter` will filter any data where the alpha channel is below this value, defaults 0 (all data visible)\r\n * - `updatable` defines if the mesh must be flagged as updatable\r\n * - `onReady` is a javascript callback function that will be called once the mesh is just built (the height map download can last some time)\r\n * - `onError` is a javascript callback function that will be called if there is an error\r\n * - `passHeightBufferInCallback` a boolean that indicates if the calculated height data will be passed in the onReady callback. Useful if you need the height data for physics, for example.\r\n * @param scene defines the hosting scene\r\n * @returns the ground mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/height_map\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#ground-from-a-height-map\r\n */\r\nexport function CreateGroundFromHeightMap(\r\n name: string,\r\n url: string | { data: Uint8Array; width: number; height: number },\r\n options: {\r\n width?: number;\r\n height?: number;\r\n subdivisions?: number;\r\n minHeight?: number;\r\n maxHeight?: number;\r\n colorFilter?: Color3;\r\n alphaFilter?: number;\r\n updatable?: boolean;\r\n onReady?: (mesh: GroundMesh, heightBuffer?: Float32Array) => void;\r\n onError?: (message?: string, exception?: any) => void;\r\n passHeightBufferInCallback?: boolean;\r\n } = {},\r\n scene: Nullable<Scene> = null\r\n): GroundMesh {\r\n const width = options.width || 10.0;\r\n const height = options.height || 10.0;\r\n const subdivisions = options.subdivisions || 1 | 0;\r\n const minHeight = options.minHeight || 0.0;\r\n const maxHeight = options.maxHeight || 1.0;\r\n const filter = options.colorFilter || new Color3(0.3, 0.59, 0.11);\r\n const alphaFilter = options.alphaFilter || 0.0;\r\n const updatable = options.updatable;\r\n const onReady = options.onReady;\r\n\r\n scene = scene || EngineStore.LastCreatedScene!;\r\n\r\n const ground = new GroundMesh(name, scene);\r\n ground._subdivisionsX = subdivisions;\r\n ground._subdivisionsY = subdivisions;\r\n ground._width = width;\r\n ground._height = height;\r\n ground._maxX = ground._width / 2.0;\r\n ground._maxZ = ground._height / 2.0;\r\n ground._minX = -ground._maxX;\r\n ground._minZ = -ground._maxZ;\r\n\r\n ground._setReady(false);\r\n\r\n let heightBuffer: Float32Array;\r\n if (options.passHeightBufferInCallback) {\r\n heightBuffer = new Float32Array((subdivisions + 1) * (subdivisions + 1));\r\n }\r\n\r\n const onBufferLoaded = (buffer: Uint8Array, bufferWidth: number, bufferHeight: number) => {\r\n const vertexData = CreateGroundFromHeightMapVertexData({\r\n width: width,\r\n height: height,\r\n subdivisions: subdivisions,\r\n minHeight: minHeight,\r\n maxHeight: maxHeight,\r\n colorFilter: filter,\r\n buffer: buffer,\r\n bufferWidth: bufferWidth,\r\n bufferHeight: bufferHeight,\r\n alphaFilter: alphaFilter,\r\n heightBuffer,\r\n });\r\n\r\n vertexData.applyToMesh(ground, updatable);\r\n\r\n //execute ready callback, if set\r\n if (onReady) {\r\n onReady(ground, heightBuffer);\r\n }\r\n\r\n ground._setReady(true);\r\n };\r\n\r\n if (typeof url === \"string\") {\r\n const onload = (img: HTMLImageElement | ImageBitmap) => {\r\n const bufferWidth = img.width;\r\n const bufferHeight = img.height;\r\n\r\n if (scene.isDisposed) {\r\n return;\r\n }\r\n\r\n const buffer = scene?.getEngine().resizeImageBitmap(img, bufferWidth, bufferHeight);\r\n\r\n onBufferLoaded(buffer, bufferWidth, bufferHeight);\r\n };\r\n\r\n Tools.LoadImage(url, onload, options.onError ? options.onError : () => {}, scene.offlineProvider);\r\n } else {\r\n onBufferLoaded(url.data, url.width, url.height);\r\n }\r\n\r\n return ground;\r\n}\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the functions directly from the module\r\n */\r\nexport const GroundBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateGround,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateGroundFromHeightMap,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateTiledGround,\r\n};\r\n\r\nVertexData.CreateGround = CreateGroundVertexData;\r\nVertexData.CreateTiledGround = CreateTiledGroundVertexData;\r\nVertexData.CreateGroundFromHeightMap = CreateGroundFromHeightMapVertexData;\r\n\r\nMesh.CreateGround = (name: string, width: number, height: number, subdivisions: number, scene?: Scene, updatable?: boolean): Mesh => {\r\n const options = {\r\n width,\r\n height,\r\n subdivisions,\r\n updatable,\r\n };\r\n\r\n return CreateGround(name, options, scene);\r\n};\r\n\r\nMesh.CreateTiledGround = (\r\n name: string,\r\n xmin: number,\r\n zmin: number,\r\n xmax: number,\r\n zmax: number,\r\n subdivisions: { w: number; h: number },\r\n precision: { w: number; h: number },\r\n scene: Scene,\r\n updatable?: boolean\r\n): Mesh => {\r\n const options = {\r\n xmin,\r\n zmin,\r\n xmax,\r\n zmax,\r\n subdivisions,\r\n precision,\r\n updatable,\r\n };\r\n\r\n return CreateTiledGround(name, options, scene);\r\n};\r\n\r\nMesh.CreateGroundFromHeightMap = (\r\n name: string,\r\n url: string,\r\n width: number,\r\n height: number,\r\n subdivisions: number,\r\n minHeight: number,\r\n maxHeight: number,\r\n scene: Scene,\r\n updatable?: boolean,\r\n onReady?: (mesh: GroundMesh) => void,\r\n alphaFilter?: number\r\n): GroundMesh => {\r\n const options = {\r\n width,\r\n height,\r\n subdivisions,\r\n minHeight,\r\n maxHeight,\r\n updatable,\r\n onReady,\r\n alphaFilter,\r\n };\r\n\r\n return CreateGroundFromHeightMap(name, url, options, scene);\r\n};\r\n"]}
@@ -20,19 +20,6 @@ import { VertexData } from "../mesh.vertexData.js";
20
20
  * * faceColors an array of 6 Color4 elements used to set different colors to each box side
21
21
  * * alignHorizontal places whole tiles aligned to the center, left or right of a row
22
22
  * * alignVertical places whole tiles aligned to the center, left or right of a column
23
- * @param options.pattern
24
- * @param options.size
25
- * @param options.width
26
- * @param options.height
27
- * @param options.depth
28
- * @param options.tileSize
29
- * @param options.tileWidth
30
- * @param options.tileHeight
31
- * @param options.faceUV
32
- * @param options.faceColors
33
- * @param options.alignHorizontal
34
- * @param options.alignVertical
35
- * @param options.sideOrientation
36
23
  * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
37
24
  * @returns the VertexData of the TiledBox
38
25
  */
@@ -69,19 +56,6 @@ export declare function CreateTiledBoxVertexData(options: {
69
56
  * * alignHorizontal places whole tiles aligned to the center, left or right of a row
70
57
  * * alignVertical places whole tiles aligned to the center, left or right of a column
71
58
  * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
72
- * @param options.pattern
73
- * @param options.width
74
- * @param options.height
75
- * @param options.depth
76
- * @param options.tileSize
77
- * @param options.tileWidth
78
- * @param options.tileHeight
79
- * @param options.alignHorizontal
80
- * @param options.alignVertical
81
- * @param options.faceUV
82
- * @param options.faceColors
83
- * @param options.sideOrientation
84
- * @param options.updatable
85
59
  * @param scene defines the hosting scene
86
60
  * @returns the box mesh
87
61
  */
@@ -22,19 +22,6 @@ const OP_SUB = -1;
22
22
  * * faceColors an array of 6 Color4 elements used to set different colors to each box side
23
23
  * * alignHorizontal places whole tiles aligned to the center, left or right of a row
24
24
  * * alignVertical places whole tiles aligned to the center, left or right of a column
25
- * @param options.pattern
26
- * @param options.size
27
- * @param options.width
28
- * @param options.height
29
- * @param options.depth
30
- * @param options.tileSize
31
- * @param options.tileWidth
32
- * @param options.tileHeight
33
- * @param options.faceUV
34
- * @param options.faceColors
35
- * @param options.alignHorizontal
36
- * @param options.alignVertical
37
- * @param options.sideOrientation
38
25
  * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
39
26
  * @returns the VertexData of the TiledBox
40
27
  */
@@ -206,19 +193,6 @@ export function CreateTiledBoxVertexData(options) {
206
193
  * * alignHorizontal places whole tiles aligned to the center, left or right of a row
207
194
  * * alignVertical places whole tiles aligned to the center, left or right of a column
208
195
  * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
209
- * @param options.pattern
210
- * @param options.width
211
- * @param options.height
212
- * @param options.depth
213
- * @param options.tileSize
214
- * @param options.tileWidth
215
- * @param options.tileHeight
216
- * @param options.alignHorizontal
217
- * @param options.alignVertical
218
- * @param options.faceUV
219
- * @param options.faceColors
220
- * @param options.sideOrientation
221
- * @param options.updatable
222
196
  * @param scene defines the hosting scene
223
197
  * @returns the box mesh
224
198
  */