@onerjs/core 8.54.2 → 8.54.4

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 (197) hide show
  1. package/Animations/animatable.core.js.map +1 -1
  2. package/AudioV2/abstractAudio/abstractSoundSource.d.ts +26 -0
  3. package/AudioV2/abstractAudio/abstractSoundSource.js.map +1 -1
  4. package/AudioV2/webAudio/webAudioEngine.js +2 -0
  5. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  6. package/AudioV2/webAudio/webAudioSoundSource.d.ts +16 -0
  7. package/AudioV2/webAudio/webAudioSoundSource.js +43 -1
  8. package/AudioV2/webAudio/webAudioSoundSource.js.map +1 -1
  9. package/Bones/skeleton.functions.js +1 -1
  10. package/Bones/skeleton.functions.js.map +1 -1
  11. package/Cameras/inputMapper.js.map +1 -1
  12. package/Debug/physicsViewer.pure.js +1 -1
  13. package/Debug/physicsViewer.pure.js.map +1 -1
  14. package/DeviceInput/webDeviceInputSystem.js +4 -0
  15. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  16. package/Engines/Extensions/engine.alphaToCoverage.d.ts +6 -0
  17. package/Engines/Extensions/engine.alphaToCoverage.js +9 -0
  18. package/Engines/Extensions/engine.alphaToCoverage.js.map +1 -0
  19. package/Engines/Extensions/engine.alphaToCoverage.pure.d.ts +6 -0
  20. package/Engines/Extensions/engine.alphaToCoverage.pure.js +54 -0
  21. package/Engines/Extensions/engine.alphaToCoverage.pure.js.map +1 -0
  22. package/Engines/Extensions/engine.alphaToCoverage.types.d.ts +21 -0
  23. package/Engines/Extensions/engine.alphaToCoverage.types.js +2 -0
  24. package/Engines/Extensions/engine.alphaToCoverage.types.js.map +1 -0
  25. package/Engines/Extensions/index.d.ts +1 -0
  26. package/Engines/Extensions/index.js +1 -0
  27. package/Engines/Extensions/index.js.map +1 -1
  28. package/Engines/Extensions/pure.d.ts +1 -0
  29. package/Engines/Extensions/pure.js +1 -0
  30. package/Engines/Extensions/pure.js.map +1 -1
  31. package/Engines/Native/nativeHelpers.js +6 -4
  32. package/Engines/Native/nativeHelpers.js.map +1 -1
  33. package/Engines/Native/nativeInterfaces.d.ts +1 -0
  34. package/Engines/Native/nativeInterfaces.js.map +1 -1
  35. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.d.ts +6 -0
  36. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.js +9 -0
  37. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.js.map +1 -0
  38. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.d.ts +6 -0
  39. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.js +34 -0
  40. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.js.map +1 -0
  41. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.d.ts +16 -0
  42. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.js +2 -0
  43. package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.js.map +1 -0
  44. package/Engines/WebGPU/Extensions/index.d.ts +1 -0
  45. package/Engines/WebGPU/Extensions/index.js +1 -0
  46. package/Engines/WebGPU/Extensions/index.js.map +1 -1
  47. package/Engines/WebGPU/Extensions/pure.d.ts +1 -0
  48. package/Engines/WebGPU/Extensions/pure.js +1 -0
  49. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  50. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +0 -1
  51. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  52. package/Engines/abstractEngine.pure.d.ts +0 -15
  53. package/Engines/abstractEngine.pure.js +2 -23
  54. package/Engines/abstractEngine.pure.js.map +1 -1
  55. package/Engines/constants.d.ts +4 -0
  56. package/Engines/constants.js +4 -0
  57. package/Engines/constants.js.map +1 -1
  58. package/Engines/engine.d.ts +2 -2
  59. package/Engines/engine.js +1 -0
  60. package/Engines/engine.js.map +1 -1
  61. package/Engines/engine.pure.js +1 -1
  62. package/Engines/engine.pure.js.map +1 -1
  63. package/Engines/thinEngine.pure.d.ts +0 -11
  64. package/Engines/thinEngine.pure.js +0 -19
  65. package/Engines/thinEngine.pure.js.map +1 -1
  66. package/Engines/webgpuEngine.d.ts +2 -0
  67. package/Engines/webgpuEngine.js +2 -0
  68. package/Engines/webgpuEngine.js.map +1 -1
  69. package/Engines/webgpuEngine.pure.d.ts +0 -5
  70. package/Engines/webgpuEngine.pure.js +1 -10
  71. package/Engines/webgpuEngine.pure.js.map +1 -1
  72. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  73. package/Loading/loadingScreen.pure.js +2 -0
  74. package/Loading/loadingScreen.pure.js.map +1 -1
  75. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js.map +1 -1
  76. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +3 -1
  77. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  78. package/Materials/Textures/ktx2decoderTypes.d.ts +14 -3
  79. package/Materials/Textures/ktx2decoderTypes.js +2 -0
  80. package/Materials/Textures/ktx2decoderTypes.js.map +1 -1
  81. package/Materials/Textures/rawTexture2DArray.functions.d.ts +29 -0
  82. package/Materials/Textures/rawTexture2DArray.functions.js +71 -0
  83. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
  84. package/Materials/material.pure.d.ts +1 -0
  85. package/Materials/material.pure.js +1 -0
  86. package/Materials/material.pure.js.map +1 -1
  87. package/Meshes/Builders/pure.d.ts +2 -2
  88. package/Meshes/Builders/pure.js +2 -2
  89. package/Meshes/Builders/pure.js.map +1 -1
  90. package/Meshes/Builders/textBuilder.js.map +1 -1
  91. package/Meshes/Builders/tiledBoxBuilder.d.ts +1 -83
  92. package/Meshes/Builders/tiledBoxBuilder.js +3 -215
  93. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  94. package/Meshes/Builders/tiledBoxBuilder.pure.d.ts +89 -0
  95. package/Meshes/Builders/tiledBoxBuilder.pure.js +229 -0
  96. package/Meshes/Builders/tiledBoxBuilder.pure.js.map +1 -0
  97. package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -79
  98. package/Meshes/Builders/tiledPlaneBuilder.js +3 -429
  99. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  100. package/Meshes/Builders/tiledPlaneBuilder.pure.d.ts +85 -0
  101. package/Meshes/Builders/tiledPlaneBuilder.pure.js +442 -0
  102. package/Meshes/Builders/tiledPlaneBuilder.pure.js.map +1 -0
  103. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +50 -11
  104. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  105. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +17 -4
  106. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -1
  107. package/Meshes/Node/Blocks/bevelBlock.pure.js.map +1 -1
  108. package/Meshes/abstractMesh.pure.js +5 -3
  109. package/Meshes/abstractMesh.pure.js.map +1 -1
  110. package/Meshes/meshBuilder.d.ts +21 -57
  111. package/Meshes/meshBuilder.js +21 -58
  112. package/Meshes/meshBuilder.js.map +1 -1
  113. package/Meshes/meshBuilder.pure.d.ts +58 -0
  114. package/Meshes/meshBuilder.pure.js +60 -0
  115. package/Meshes/meshBuilder.pure.js.map +1 -0
  116. package/Meshes/pure.d.ts +1 -1
  117. package/Meshes/pure.js +1 -1
  118. package/Meshes/pure.js.map +1 -1
  119. package/Misc/greasedLineTools.js.map +1 -1
  120. package/Misc/khronosTextureContainer2.d.ts +10 -0
  121. package/Misc/khronosTextureContainer2.js +23 -12
  122. package/Misc/khronosTextureContainer2.js.map +1 -1
  123. package/Misc/perfCounter.d.ts +2 -0
  124. package/Misc/perfCounter.js +17 -2
  125. package/Misc/perfCounter.js.map +1 -1
  126. package/Misc/rgbdTextureTools.js +1 -1
  127. package/Misc/rgbdTextureTools.js.map +1 -1
  128. package/Misc/tools.pure.js +1 -1
  129. package/Misc/tools.pure.js.map +1 -1
  130. package/Navigation/Plugins/recastJSPlugin.js +1 -1
  131. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  132. package/Physics/v2/Plugins/havokPlugin.d.ts +15 -0
  133. package/Physics/v2/Plugins/havokPlugin.js +16 -6
  134. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  135. package/Physics/v2/characterController.js +2 -2
  136. package/Physics/v2/characterController.js.map +1 -1
  137. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
  138. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js.map +1 -1
  139. package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
  140. package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +3 -0
  141. package/PostProcesses/volumetricLightScatteringPostProcess.js +3 -0
  142. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  143. package/PostProcesses/volumetricLightScatteringPostProcess.pure.d.ts +1 -0
  144. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +25 -6
  145. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
  146. package/Shaders/ShadersInclude/openpbrDielectricReflectance.js +6 -6
  147. package/Shaders/ShadersInclude/openpbrDielectricReflectance.js.map +1 -1
  148. package/ShadersWGSL/ShadersInclude/clusteredLightingCompute.d.ts +5 -0
  149. package/ShadersWGSL/ShadersInclude/clusteredLightingCompute.js +29 -0
  150. package/ShadersWGSL/ShadersInclude/clusteredLightingCompute.js.map +1 -0
  151. package/ShadersWGSL/ShadersInclude/depthPrePass.js +2 -0
  152. package/ShadersWGSL/ShadersInclude/depthPrePass.js.map +1 -1
  153. package/ShadersWGSL/ShadersInclude/lightFragment.js +2 -3
  154. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  155. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
  156. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +2 -17
  157. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  158. package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js +7 -8
  159. package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js.map +1 -1
  160. package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.d.ts +6 -0
  161. package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js +123 -0
  162. package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -0
  163. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.d.ts +1 -1
  164. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +2 -111
  165. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  166. package/ShadersWGSL/background.fragment.js +2 -1
  167. package/ShadersWGSL/background.fragment.js.map +1 -1
  168. package/ShadersWGSL/default.fragment.js +5 -1
  169. package/ShadersWGSL/default.fragment.js.map +1 -1
  170. package/ShadersWGSL/openpbr.fragment.js +5 -1
  171. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  172. package/ShadersWGSL/pbr.fragment.js +5 -1
  173. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  174. package/ShadersWGSL/volumetricLightScattering.fragment.d.ts +5 -0
  175. package/ShadersWGSL/volumetricLightScattering.fragment.js +20 -0
  176. package/ShadersWGSL/volumetricLightScattering.fragment.js.map +1 -0
  177. package/ShadersWGSL/volumetricLightScatteringPass.fragment.d.ts +5 -0
  178. package/ShadersWGSL/volumetricLightScatteringPass.fragment.js +24 -0
  179. package/ShadersWGSL/volumetricLightScatteringPass.fragment.js.map +1 -0
  180. package/ShadersWGSL/volumetricLightScatteringPass.vertex.d.ts +5 -0
  181. package/ShadersWGSL/volumetricLightScatteringPass.vertex.js +67 -0
  182. package/ShadersWGSL/volumetricLightScatteringPass.vertex.js.map +1 -0
  183. package/SmartAssets/smartAssetManager.pure.js +9 -1
  184. package/SmartAssets/smartAssetManager.pure.js.map +1 -1
  185. package/States/alphaCullingState.d.ts +0 -9
  186. package/States/alphaCullingState.js +4 -31
  187. package/States/alphaCullingState.js.map +1 -1
  188. package/XR/features/WebXRLayers.pure.js +4 -4
  189. package/XR/features/WebXRLayers.pure.js.map +1 -1
  190. package/node.d.ts +18 -1
  191. package/node.js +52 -1
  192. package/node.js.map +1 -1
  193. package/package.json +1 -1
  194. package/scene.pure.d.ts +7 -0
  195. package/scene.pure.js +8 -0
  196. package/scene.pure.js.map +1 -1
  197. package/types.js.map +1 -1
@@ -1,430 +1,4 @@
1
- import { Mesh } from "../mesh.pure.js";
2
- import { VertexData } from "../mesh.vertexData.js";
3
- /**
4
- * Creates the VertexData for a tiled plane
5
- * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_plane
6
- * @param options an object used to set the following optional parameters for the tiled plane, required but can be empty
7
- * * pattern a limited pattern arrangement depending on the number
8
- * * size of the box
9
- * * width of the box, overwrites size
10
- * * height of the box, overwrites size
11
- * * tileSize sets the width, height and depth of the tile to the value of size, optional default 1
12
- * * tileWidth sets the width (x direction) of the tile, overwrites the width set by size, optional, default size
13
- * * tileHeight sets the height (y direction) of the tile, overwrites the height set by size, optional, default size
14
- * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
15
- * * alignHorizontal places whole tiles aligned to the center, left or right of a row
16
- * * alignVertical places whole tiles aligned to the center, left or right of a column
17
- * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)
18
- * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)
19
- * @returns the VertexData of the tiled plane
20
- */
21
- export function CreateTiledPlaneVertexData(options) {
22
- const flipTile = options.pattern || Mesh.NO_FLIP;
23
- const tileWidth = options.tileWidth || options.tileSize || 1;
24
- const tileHeight = options.tileHeight || options.tileSize || 1;
25
- const alignH = options.alignHorizontal || 0;
26
- const alignV = options.alignVertical || 0;
27
- const width = options.width || options.size || 1;
28
- const tilesX = Math.floor(width / tileWidth);
29
- let offsetX = width - tilesX * tileWidth;
30
- const height = options.height || options.size || 1;
31
- const tilesY = Math.floor(height / tileHeight);
32
- let offsetY = height - tilesY * tileHeight;
33
- const halfWidth = (tileWidth * tilesX) / 2;
34
- const halfHeight = (tileHeight * tilesY) / 2;
35
- let adjustX = 0;
36
- let adjustY = 0;
37
- let startX = 0;
38
- let startY = 0;
39
- let endX = 0;
40
- let endY = 0;
41
- //Part Tiles
42
- if (offsetX > 0 || offsetY > 0) {
43
- startX = -halfWidth;
44
- startY = -halfHeight;
45
- endX = halfWidth;
46
- endY = halfHeight;
47
- switch (alignH) {
48
- case Mesh.CENTER:
49
- offsetX /= 2;
50
- startX -= offsetX;
51
- endX += offsetX;
52
- break;
53
- case Mesh.LEFT:
54
- endX += offsetX;
55
- adjustX = -offsetX / 2;
56
- break;
57
- case Mesh.RIGHT:
58
- startX -= offsetX;
59
- adjustX = offsetX / 2;
60
- break;
61
- }
62
- switch (alignV) {
63
- case Mesh.CENTER:
64
- offsetY /= 2;
65
- startY -= offsetY;
66
- endY += offsetY;
67
- break;
68
- case Mesh.BOTTOM:
69
- endY += offsetY;
70
- adjustY = -offsetY / 2;
71
- break;
72
- case Mesh.TOP:
73
- startY -= offsetY;
74
- adjustY = offsetY / 2;
75
- break;
76
- }
77
- }
78
- const positions = [];
79
- const normals = [];
80
- const uvBase = [];
81
- uvBase[0] = [0, 0, 1, 0, 1, 1, 0, 1];
82
- uvBase[1] = [0, 0, 1, 0, 1, 1, 0, 1];
83
- if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {
84
- uvBase[1] = [1, 1, 0, 1, 0, 0, 1, 0];
85
- }
86
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {
87
- uvBase[1] = [1, 0, 0, 0, 0, 1, 1, 1];
88
- }
89
- if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
90
- uvBase[1] = [0, 1, 1, 1, 1, 0, 0, 0];
91
- }
92
- let uvs = [];
93
- const colors = [];
94
- const indices = [];
95
- let index = 0;
96
- for (let y = 0; y < tilesY; y++) {
97
- for (let x = 0; x < tilesX; x++) {
98
- positions.push(-halfWidth + x * tileWidth + adjustX, -halfHeight + y * tileHeight + adjustY, 0);
99
- positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, -halfHeight + y * tileHeight + adjustY, 0);
100
- positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);
101
- positions.push(-halfWidth + x * tileWidth + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);
102
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
103
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {
104
- uvs = uvs.concat(uvBase[((x % 2) + (y % 2)) % 2]);
105
- }
106
- else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
107
- uvs = uvs.concat(uvBase[y % 2]);
108
- }
109
- else {
110
- uvs = uvs.concat(uvBase[0]);
111
- }
112
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
113
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
114
- index += 4;
115
- }
116
- }
117
- //Part Tiles
118
- if (offsetX > 0 || offsetY > 0) {
119
- const partialBottomRow = offsetY > 0 && (alignV === Mesh.CENTER || alignV === Mesh.TOP);
120
- const partialTopRow = offsetY > 0 && (alignV === Mesh.CENTER || alignV === Mesh.BOTTOM);
121
- const partialLeftCol = offsetX > 0 && (alignH === Mesh.CENTER || alignH === Mesh.RIGHT);
122
- const partialRightCol = offsetX > 0 && (alignH === Mesh.CENTER || alignH === Mesh.LEFT);
123
- let uvPart;
124
- let a, b, c, d;
125
- //corners
126
- if (partialBottomRow && partialLeftCol) {
127
- //bottom left corner
128
- positions.push(startX + adjustX, startY + adjustY, 0);
129
- positions.push(-halfWidth + adjustX, startY + adjustY, 0);
130
- positions.push(-halfWidth + adjustX, startY + offsetY + adjustY, 0);
131
- positions.push(startX + adjustX, startY + offsetY + adjustY, 0);
132
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
133
- index += 4;
134
- a = 1 - offsetX / tileWidth;
135
- b = 1 - offsetY / tileHeight;
136
- c = 1;
137
- d = 1;
138
- uvPart = [a, b, c, b, c, d, a, d];
139
- if (flipTile === Mesh.ROTATE_ROW) {
140
- uvPart = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];
141
- }
142
- if (flipTile === Mesh.FLIP_ROW) {
143
- uvPart = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];
144
- }
145
- if (flipTile === Mesh.FLIP_N_ROTATE_ROW) {
146
- uvPart = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];
147
- }
148
- uvs = uvs.concat(uvPart);
149
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
150
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
151
- }
152
- if (partialBottomRow && partialRightCol) {
153
- //bottom right corner
154
- positions.push(halfWidth + adjustX, startY + adjustY, 0);
155
- positions.push(endX + adjustX, startY + adjustY, 0);
156
- positions.push(endX + adjustX, startY + offsetY + adjustY, 0);
157
- positions.push(halfWidth + adjustX, startY + offsetY + adjustY, 0);
158
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
159
- index += 4;
160
- a = 0;
161
- b = 1 - offsetY / tileHeight;
162
- c = offsetX / tileWidth;
163
- d = 1;
164
- uvPart = [a, b, c, b, c, d, a, d];
165
- if (flipTile === Mesh.ROTATE_ROW || (flipTile === Mesh.ROTATE_TILE && tilesX % 2 === 0)) {
166
- uvPart = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];
167
- }
168
- if (flipTile === Mesh.FLIP_ROW || (flipTile === Mesh.FLIP_TILE && tilesX % 2 === 0)) {
169
- uvPart = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];
170
- }
171
- if (flipTile === Mesh.FLIP_N_ROTATE_ROW || (flipTile === Mesh.FLIP_N_ROTATE_TILE && tilesX % 2 === 0)) {
172
- uvPart = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];
173
- }
174
- uvs = uvs.concat(uvPart);
175
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
176
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
177
- }
178
- if (partialTopRow && partialLeftCol) {
179
- //top left corner
180
- positions.push(startX + adjustX, halfHeight + adjustY, 0);
181
- positions.push(-halfWidth + adjustX, halfHeight + adjustY, 0);
182
- positions.push(-halfWidth + adjustX, endY + adjustY, 0);
183
- positions.push(startX + adjustX, endY + adjustY, 0);
184
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
185
- index += 4;
186
- a = 1 - offsetX / tileWidth;
187
- b = 0;
188
- c = 1;
189
- d = offsetY / tileHeight;
190
- uvPart = [a, b, c, b, c, d, a, d];
191
- if ((flipTile === Mesh.ROTATE_ROW && tilesY % 2 === 1) || (flipTile === Mesh.ROTATE_TILE && tilesY % 1 === 0)) {
192
- uvPart = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];
193
- }
194
- if ((flipTile === Mesh.FLIP_ROW && tilesY % 2 === 1) || (flipTile === Mesh.FLIP_TILE && tilesY % 2 === 0)) {
195
- uvPart = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];
196
- }
197
- if ((flipTile === Mesh.FLIP_N_ROTATE_ROW && tilesY % 2 === 1) || (flipTile === Mesh.FLIP_N_ROTATE_TILE && tilesY % 2 === 0)) {
198
- uvPart = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];
199
- }
200
- uvs = uvs.concat(uvPart);
201
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
202
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
203
- }
204
- if (partialTopRow && partialRightCol) {
205
- //top right corner
206
- positions.push(halfWidth + adjustX, halfHeight + adjustY, 0);
207
- positions.push(endX + adjustX, halfHeight + adjustY, 0);
208
- positions.push(endX + adjustX, endY + adjustY, 0);
209
- positions.push(halfWidth + adjustX, endY + adjustY, 0);
210
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
211
- index += 4;
212
- a = 0;
213
- b = 0;
214
- c = offsetX / tileWidth;
215
- d = offsetY / tileHeight;
216
- uvPart = [a, b, c, b, c, d, a, d];
217
- if ((flipTile === Mesh.ROTATE_ROW && tilesY % 2 === 1) || (flipTile === Mesh.ROTATE_TILE && (tilesY + tilesX) % 2 === 1)) {
218
- uvPart = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];
219
- }
220
- if ((flipTile === Mesh.FLIP_ROW && tilesY % 2 === 1) || (flipTile === Mesh.FLIP_TILE && (tilesY + tilesX) % 2 === 1)) {
221
- uvPart = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];
222
- }
223
- if ((flipTile === Mesh.FLIP_N_ROTATE_ROW && tilesY % 2 === 1) || (flipTile === Mesh.FLIP_N_ROTATE_TILE && (tilesY + tilesX) % 2 === 1)) {
224
- uvPart = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];
225
- }
226
- uvs = uvs.concat(uvPart);
227
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
228
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
229
- }
230
- //part rows
231
- if (partialBottomRow) {
232
- const uvBaseBR = [];
233
- a = 0;
234
- b = 1 - offsetY / tileHeight;
235
- c = 1;
236
- d = 1;
237
- uvBaseBR[0] = [a, b, c, b, c, d, a, d];
238
- uvBaseBR[1] = [a, b, c, b, c, d, a, d];
239
- if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {
240
- uvBaseBR[1] = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];
241
- }
242
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {
243
- uvBaseBR[1] = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];
244
- }
245
- if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
246
- uvBaseBR[1] = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];
247
- }
248
- for (let x = 0; x < tilesX; x++) {
249
- positions.push(-halfWidth + x * tileWidth + adjustX, startY + adjustY, 0);
250
- positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, startY + adjustY, 0);
251
- positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, startY + offsetY + adjustY, 0);
252
- positions.push(-halfWidth + x * tileWidth + adjustX, startY + offsetY + adjustY, 0);
253
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
254
- index += 4;
255
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {
256
- uvs = uvs.concat(uvBaseBR[(x + 1) % 2]);
257
- }
258
- else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
259
- uvs = uvs.concat(uvBaseBR[1]);
260
- }
261
- else {
262
- uvs = uvs.concat(uvBaseBR[0]);
263
- }
264
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
265
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
266
- }
267
- }
268
- if (partialTopRow) {
269
- const uvBaseTR = [];
270
- a = 0;
271
- b = 0;
272
- c = 1;
273
- d = offsetY / tileHeight;
274
- uvBaseTR[0] = [a, b, c, b, c, d, a, d];
275
- uvBaseTR[1] = [a, b, c, b, c, d, a, d];
276
- if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {
277
- uvBaseTR[1] = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];
278
- }
279
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {
280
- uvBaseTR[1] = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];
281
- }
282
- if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
283
- uvBaseTR[1] = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];
284
- }
285
- for (let x = 0; x < tilesX; x++) {
286
- positions.push(-halfWidth + x * tileWidth + adjustX, endY - offsetY + adjustY, 0);
287
- positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, endY - offsetY + adjustY, 0);
288
- positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, endY + adjustY, 0);
289
- positions.push(-halfWidth + x * tileWidth + adjustX, endY + adjustY, 0);
290
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
291
- index += 4;
292
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {
293
- uvs = uvs.concat(uvBaseTR[(x + tilesY) % 2]);
294
- }
295
- else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
296
- uvs = uvs.concat(uvBaseTR[tilesY % 2]);
297
- }
298
- else {
299
- uvs = uvs.concat(uvBaseTR[0]);
300
- }
301
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
302
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
303
- }
304
- }
305
- if (partialLeftCol) {
306
- const uvBaseLC = [];
307
- a = 1 - offsetX / tileWidth;
308
- b = 0;
309
- c = 1;
310
- d = 1;
311
- uvBaseLC[0] = [a, b, c, b, c, d, a, d];
312
- uvBaseLC[1] = [a, b, c, b, c, d, a, d];
313
- if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {
314
- uvBaseLC[1] = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];
315
- }
316
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {
317
- uvBaseLC[1] = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];
318
- }
319
- if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
320
- uvBaseLC[1] = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];
321
- }
322
- for (let y = 0; y < tilesY; y++) {
323
- positions.push(startX + adjustX, -halfHeight + y * tileHeight + adjustY, 0);
324
- positions.push(startX + offsetX + adjustX, -halfHeight + y * tileHeight + adjustY, 0);
325
- positions.push(startX + offsetX + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);
326
- positions.push(startX + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);
327
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
328
- index += 4;
329
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {
330
- uvs = uvs.concat(uvBaseLC[(y + 1) % 2]);
331
- }
332
- else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
333
- uvs = uvs.concat(uvBaseLC[y % 2]);
334
- }
335
- else {
336
- uvs = uvs.concat(uvBaseLC[0]);
337
- }
338
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
339
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
340
- }
341
- }
342
- if (partialRightCol) {
343
- const uvBaseRC = [];
344
- a = 0;
345
- b = 0;
346
- c = offsetX / tileHeight;
347
- d = 1;
348
- uvBaseRC[0] = [a, b, c, b, c, d, a, d];
349
- uvBaseRC[1] = [a, b, c, b, c, d, a, d];
350
- if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {
351
- uvBaseRC[1] = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];
352
- }
353
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {
354
- uvBaseRC[1] = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];
355
- }
356
- if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
357
- uvBaseRC[1] = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];
358
- }
359
- for (let y = 0; y < tilesY; y++) {
360
- positions.push(endX - offsetX + adjustX, -halfHeight + y * tileHeight + adjustY, 0);
361
- positions.push(endX + adjustX, -halfHeight + y * tileHeight + adjustY, 0);
362
- positions.push(endX + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);
363
- positions.push(endX - offsetX + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);
364
- indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);
365
- index += 4;
366
- if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {
367
- uvs = uvs.concat(uvBaseRC[(y + tilesX) % 2]);
368
- }
369
- else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {
370
- uvs = uvs.concat(uvBaseRC[y % 2]);
371
- }
372
- else {
373
- uvs = uvs.concat(uvBaseRC[0]);
374
- }
375
- colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
376
- normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);
377
- }
378
- }
379
- }
380
- const sideOrientation = options.sideOrientation === 0 ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;
381
- // sides
382
- VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);
383
- // Result
384
- const vertexData = new VertexData();
385
- vertexData.indices = indices;
386
- vertexData.positions = positions;
387
- vertexData.normals = normals;
388
- vertexData.uvs = uvs;
389
- const totalColors = sideOrientation === VertexData.DOUBLESIDE ? colors.concat(colors) : colors;
390
- vertexData.colors = totalColors;
391
- return vertexData;
392
- }
393
- /**
394
- * Creates a tiled plane mesh
395
- * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_plane
396
- * @param name defines the name of the mesh
397
- * @param options an object used to set the following optional parameters for the tiled plane, required but can be empty
398
- * * pattern a limited pattern arrangement depending on the number
399
- * * size of the box
400
- * * width of the box, overwrites size
401
- * * height of the box, overwrites size
402
- * * tileSize sets the width, height and depth of the tile to the value of size, optional default 1
403
- * * tileWidth sets the width (x direction) of the tile, overwrites the width set by size, optional, default size
404
- * * tileHeight sets the height (y direction) of the tile, overwrites the height set by size, optional, default size
405
- * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
406
- * * alignHorizontal places whole tiles aligned to the center, left or right of a row
407
- * * alignVertical places whole tiles aligned to the center, left or right of a column
408
- * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)
409
- * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)
410
- * @param scene defines the hosting scene
411
- * @returns the box mesh
412
- */
413
- export function CreateTiledPlane(name, options, scene = null) {
414
- const plane = new Mesh(name, scene);
415
- options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);
416
- plane._originalBuilderSideOrientation = options.sideOrientation;
417
- const vertexData = CreateTiledPlaneVertexData(options);
418
- vertexData.applyToMesh(plane, options.updatable);
419
- return plane;
420
- }
421
- /**
422
- * Class containing static functions to help procedurally build meshes
423
- * @deprecated use CreateTiledPlane instead
424
- */
425
- export const TiledPlaneBuilder = {
426
- // eslint-disable-next-line @typescript-eslint/naming-convention
427
- CreateTiledPlane,
428
- };
429
- VertexData.CreateTiledPlane = CreateTiledPlaneVertexData;
1
+ export * from "./tiledPlaneBuilder.pure.js";
2
+ import { RegisterTiledPlaneBuilder } from "./tiledPlaneBuilder.pure.js";
3
+ RegisterTiledPlaneBuilder();
430
4
  //# sourceMappingURL=tiledPlaneBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiledPlaneBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/tiledPlaneBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { type Vector4 } from \"../../Maths/math.vector\";\r\nimport { Mesh } from \"../mesh.pure\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\n\r\n/**\r\n * Creates the VertexData for a tiled plane\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_plane\r\n * @param options an object used to set the following optional parameters for the tiled plane, required but can be empty\r\n * * pattern a limited pattern arrangement depending on the number\r\n * * size of the box\r\n * * width of the box, overwrites size\r\n * * height of the box, overwrites size\r\n * * tileSize sets the width, height and depth of the tile to the value of size, optional default 1\r\n * * tileWidth sets the width (x direction) of the tile, overwrites the width set by size, optional, default size\r\n * * tileHeight sets the height (y direction) of the tile, overwrites the height set by size, optional, default size\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * * alignHorizontal places whole tiles aligned to the center, left or right of a row\r\n * * alignVertical places whole tiles aligned to the center, left or right of a column\r\n * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)\r\n * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)\r\n * @returns the VertexData of the tiled plane\r\n */\r\nexport function CreateTiledPlaneVertexData(options: {\r\n pattern?: number;\r\n tileSize?: number;\r\n tileWidth?: number;\r\n tileHeight?: number;\r\n size?: number;\r\n width?: number;\r\n height?: number;\r\n alignHorizontal?: number;\r\n alignVertical?: number;\r\n sideOrientation?: number;\r\n frontUVs?: Vector4;\r\n backUVs?: Vector4;\r\n}): VertexData {\r\n const flipTile = options.pattern || Mesh.NO_FLIP;\r\n const tileWidth = options.tileWidth || options.tileSize || 1;\r\n const tileHeight = options.tileHeight || options.tileSize || 1;\r\n const alignH = options.alignHorizontal || 0;\r\n const alignV = options.alignVertical || 0;\r\n\r\n const width = options.width || options.size || 1;\r\n const tilesX = Math.floor(width / tileWidth);\r\n let offsetX = width - tilesX * tileWidth;\r\n\r\n const height = options.height || options.size || 1;\r\n const tilesY = Math.floor(height / tileHeight);\r\n let offsetY = height - tilesY * tileHeight;\r\n\r\n const halfWidth = (tileWidth * tilesX) / 2;\r\n const halfHeight = (tileHeight * tilesY) / 2;\r\n\r\n let adjustX = 0;\r\n let adjustY = 0;\r\n let startX = 0;\r\n let startY = 0;\r\n let endX = 0;\r\n let endY = 0;\r\n\r\n //Part Tiles\r\n if (offsetX > 0 || offsetY > 0) {\r\n startX = -halfWidth;\r\n startY = -halfHeight;\r\n endX = halfWidth;\r\n endY = halfHeight;\r\n\r\n switch (alignH) {\r\n case Mesh.CENTER:\r\n offsetX /= 2;\r\n startX -= offsetX;\r\n endX += offsetX;\r\n break;\r\n case Mesh.LEFT:\r\n endX += offsetX;\r\n adjustX = -offsetX / 2;\r\n break;\r\n case Mesh.RIGHT:\r\n startX -= offsetX;\r\n adjustX = offsetX / 2;\r\n break;\r\n }\r\n\r\n switch (alignV) {\r\n case Mesh.CENTER:\r\n offsetY /= 2;\r\n startY -= offsetY;\r\n endY += offsetY;\r\n break;\r\n case Mesh.BOTTOM:\r\n endY += offsetY;\r\n adjustY = -offsetY / 2;\r\n break;\r\n case Mesh.TOP:\r\n startY -= offsetY;\r\n adjustY = offsetY / 2;\r\n break;\r\n }\r\n }\r\n\r\n const positions = [];\r\n const normals = [];\r\n const uvBase = [];\r\n uvBase[0] = [0, 0, 1, 0, 1, 1, 0, 1];\r\n uvBase[1] = [0, 0, 1, 0, 1, 1, 0, 1];\r\n if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {\r\n uvBase[1] = [1, 1, 0, 1, 0, 0, 1, 0];\r\n }\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {\r\n uvBase[1] = [1, 0, 0, 0, 0, 1, 1, 1];\r\n }\r\n if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvBase[1] = [0, 1, 1, 1, 1, 0, 0, 0];\r\n }\r\n let uvs: Array<number> = [];\r\n const colors = [];\r\n const indices = [];\r\n let index = 0;\r\n for (let y = 0; y < tilesY; y++) {\r\n for (let x = 0; x < tilesX; x++) {\r\n positions.push(-halfWidth + x * tileWidth + adjustX, -halfHeight + y * tileHeight + adjustY, 0);\r\n positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, -halfHeight + y * tileHeight + adjustY, 0);\r\n positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);\r\n positions.push(-halfWidth + x * tileWidth + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {\r\n uvs = uvs.concat(uvBase[((x % 2) + (y % 2)) % 2]);\r\n } else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvs = uvs.concat(uvBase[y % 2]);\r\n } else {\r\n uvs = uvs.concat(uvBase[0]);\r\n }\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n index += 4;\r\n }\r\n }\r\n\r\n //Part Tiles\r\n if (offsetX > 0 || offsetY > 0) {\r\n const partialBottomRow: boolean = offsetY > 0 && (alignV === Mesh.CENTER || alignV === Mesh.TOP);\r\n const partialTopRow: boolean = offsetY > 0 && (alignV === Mesh.CENTER || alignV === Mesh.BOTTOM);\r\n const partialLeftCol: boolean = offsetX > 0 && (alignH === Mesh.CENTER || alignH === Mesh.RIGHT);\r\n const partialRightCol: boolean = offsetX > 0 && (alignH === Mesh.CENTER || alignH === Mesh.LEFT);\r\n let uvPart: Array<number>;\r\n let a, b, c, d: number;\r\n\r\n //corners\r\n if (partialBottomRow && partialLeftCol) {\r\n //bottom left corner\r\n positions.push(startX + adjustX, startY + adjustY, 0);\r\n positions.push(-halfWidth + adjustX, startY + adjustY, 0);\r\n positions.push(-halfWidth + adjustX, startY + offsetY + adjustY, 0);\r\n positions.push(startX + adjustX, startY + offsetY + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n index += 4;\r\n a = 1 - offsetX / tileWidth;\r\n b = 1 - offsetY / tileHeight;\r\n c = 1;\r\n d = 1;\r\n uvPart = [a, b, c, b, c, d, a, d];\r\n if (flipTile === Mesh.ROTATE_ROW) {\r\n uvPart = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];\r\n }\r\n if (flipTile === Mesh.FLIP_ROW) {\r\n uvPart = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];\r\n }\r\n if (flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvPart = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];\r\n }\r\n uvs = uvs.concat(uvPart);\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n }\r\n\r\n if (partialBottomRow && partialRightCol) {\r\n //bottom right corner\r\n positions.push(halfWidth + adjustX, startY + adjustY, 0);\r\n positions.push(endX + adjustX, startY + adjustY, 0);\r\n positions.push(endX + adjustX, startY + offsetY + adjustY, 0);\r\n positions.push(halfWidth + adjustX, startY + offsetY + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n index += 4;\r\n a = 0;\r\n b = 1 - offsetY / tileHeight;\r\n c = offsetX / tileWidth;\r\n d = 1;\r\n uvPart = [a, b, c, b, c, d, a, d];\r\n if (flipTile === Mesh.ROTATE_ROW || (flipTile === Mesh.ROTATE_TILE && tilesX % 2 === 0)) {\r\n uvPart = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];\r\n }\r\n if (flipTile === Mesh.FLIP_ROW || (flipTile === Mesh.FLIP_TILE && tilesX % 2 === 0)) {\r\n uvPart = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];\r\n }\r\n if (flipTile === Mesh.FLIP_N_ROTATE_ROW || (flipTile === Mesh.FLIP_N_ROTATE_TILE && tilesX % 2 === 0)) {\r\n uvPart = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];\r\n }\r\n uvs = uvs.concat(uvPart);\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n }\r\n\r\n if (partialTopRow && partialLeftCol) {\r\n //top left corner\r\n positions.push(startX + adjustX, halfHeight + adjustY, 0);\r\n positions.push(-halfWidth + adjustX, halfHeight + adjustY, 0);\r\n positions.push(-halfWidth + adjustX, endY + adjustY, 0);\r\n positions.push(startX + adjustX, endY + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n index += 4;\r\n a = 1 - offsetX / tileWidth;\r\n b = 0;\r\n c = 1;\r\n d = offsetY / tileHeight;\r\n uvPart = [a, b, c, b, c, d, a, d];\r\n if ((flipTile === Mesh.ROTATE_ROW && tilesY % 2 === 1) || (flipTile === Mesh.ROTATE_TILE && tilesY % 1 === 0)) {\r\n uvPart = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];\r\n }\r\n if ((flipTile === Mesh.FLIP_ROW && tilesY % 2 === 1) || (flipTile === Mesh.FLIP_TILE && tilesY % 2 === 0)) {\r\n uvPart = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];\r\n }\r\n if ((flipTile === Mesh.FLIP_N_ROTATE_ROW && tilesY % 2 === 1) || (flipTile === Mesh.FLIP_N_ROTATE_TILE && tilesY % 2 === 0)) {\r\n uvPart = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];\r\n }\r\n uvs = uvs.concat(uvPart);\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n }\r\n\r\n if (partialTopRow && partialRightCol) {\r\n //top right corner\r\n positions.push(halfWidth + adjustX, halfHeight + adjustY, 0);\r\n positions.push(endX + adjustX, halfHeight + adjustY, 0);\r\n positions.push(endX + adjustX, endY + adjustY, 0);\r\n positions.push(halfWidth + adjustX, endY + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n index += 4;\r\n a = 0;\r\n b = 0;\r\n c = offsetX / tileWidth;\r\n d = offsetY / tileHeight;\r\n uvPart = [a, b, c, b, c, d, a, d];\r\n if ((flipTile === Mesh.ROTATE_ROW && tilesY % 2 === 1) || (flipTile === Mesh.ROTATE_TILE && (tilesY + tilesX) % 2 === 1)) {\r\n uvPart = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];\r\n }\r\n if ((flipTile === Mesh.FLIP_ROW && tilesY % 2 === 1) || (flipTile === Mesh.FLIP_TILE && (tilesY + tilesX) % 2 === 1)) {\r\n uvPart = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];\r\n }\r\n if ((flipTile === Mesh.FLIP_N_ROTATE_ROW && tilesY % 2 === 1) || (flipTile === Mesh.FLIP_N_ROTATE_TILE && (tilesY + tilesX) % 2 === 1)) {\r\n uvPart = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];\r\n }\r\n uvs = uvs.concat(uvPart);\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n }\r\n\r\n //part rows\r\n if (partialBottomRow) {\r\n const uvBaseBR = [];\r\n a = 0;\r\n b = 1 - offsetY / tileHeight;\r\n c = 1;\r\n d = 1;\r\n uvBaseBR[0] = [a, b, c, b, c, d, a, d];\r\n uvBaseBR[1] = [a, b, c, b, c, d, a, d];\r\n if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {\r\n uvBaseBR[1] = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];\r\n }\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {\r\n uvBaseBR[1] = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];\r\n }\r\n if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvBaseBR[1] = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];\r\n }\r\n for (let x = 0; x < tilesX; x++) {\r\n positions.push(-halfWidth + x * tileWidth + adjustX, startY + adjustY, 0);\r\n positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, startY + adjustY, 0);\r\n positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, startY + offsetY + adjustY, 0);\r\n positions.push(-halfWidth + x * tileWidth + adjustX, startY + offsetY + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n index += 4;\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {\r\n uvs = uvs.concat(uvBaseBR[(x + 1) % 2]);\r\n } else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvs = uvs.concat(uvBaseBR[1]);\r\n } else {\r\n uvs = uvs.concat(uvBaseBR[0]);\r\n }\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n }\r\n }\r\n\r\n if (partialTopRow) {\r\n const uvBaseTR = [];\r\n a = 0;\r\n b = 0;\r\n c = 1;\r\n d = offsetY / tileHeight;\r\n uvBaseTR[0] = [a, b, c, b, c, d, a, d];\r\n uvBaseTR[1] = [a, b, c, b, c, d, a, d];\r\n if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {\r\n uvBaseTR[1] = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];\r\n }\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {\r\n uvBaseTR[1] = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];\r\n }\r\n if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvBaseTR[1] = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];\r\n }\r\n for (let x = 0; x < tilesX; x++) {\r\n positions.push(-halfWidth + x * tileWidth + adjustX, endY - offsetY + adjustY, 0);\r\n positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, endY - offsetY + adjustY, 0);\r\n positions.push(-halfWidth + (x + 1) * tileWidth + adjustX, endY + adjustY, 0);\r\n positions.push(-halfWidth + x * tileWidth + adjustX, endY + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n index += 4;\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {\r\n uvs = uvs.concat(uvBaseTR[(x + tilesY) % 2]);\r\n } else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvs = uvs.concat(uvBaseTR[tilesY % 2]);\r\n } else {\r\n uvs = uvs.concat(uvBaseTR[0]);\r\n }\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n }\r\n }\r\n\r\n if (partialLeftCol) {\r\n const uvBaseLC = [];\r\n a = 1 - offsetX / tileWidth;\r\n b = 0;\r\n c = 1;\r\n d = 1;\r\n uvBaseLC[0] = [a, b, c, b, c, d, a, d];\r\n uvBaseLC[1] = [a, b, c, b, c, d, a, d];\r\n if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {\r\n uvBaseLC[1] = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];\r\n }\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {\r\n uvBaseLC[1] = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];\r\n }\r\n if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvBaseLC[1] = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];\r\n }\r\n for (let y = 0; y < tilesY; y++) {\r\n positions.push(startX + adjustX, -halfHeight + y * tileHeight + adjustY, 0);\r\n positions.push(startX + offsetX + adjustX, -halfHeight + y * tileHeight + adjustY, 0);\r\n positions.push(startX + offsetX + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);\r\n positions.push(startX + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n index += 4;\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {\r\n uvs = uvs.concat(uvBaseLC[(y + 1) % 2]);\r\n } else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvs = uvs.concat(uvBaseLC[y % 2]);\r\n } else {\r\n uvs = uvs.concat(uvBaseLC[0]);\r\n }\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n }\r\n }\r\n\r\n if (partialRightCol) {\r\n const uvBaseRC = [];\r\n a = 0;\r\n b = 0;\r\n c = offsetX / tileHeight;\r\n d = 1;\r\n uvBaseRC[0] = [a, b, c, b, c, d, a, d];\r\n uvBaseRC[1] = [a, b, c, b, c, d, a, d];\r\n if (flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.ROTATE_ROW) {\r\n uvBaseRC[1] = [1 - a, 1 - b, 1 - c, 1 - b, 1 - c, 1 - d, 1 - a, 1 - d];\r\n }\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.FLIP_ROW) {\r\n uvBaseRC[1] = [1 - a, b, 1 - c, b, 1 - c, d, 1 - a, d];\r\n }\r\n if (flipTile === Mesh.FLIP_N_ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvBaseRC[1] = [a, 1 - b, c, 1 - b, c, 1 - d, a, 1 - d];\r\n }\r\n for (let y = 0; y < tilesY; y++) {\r\n positions.push(endX - offsetX + adjustX, -halfHeight + y * tileHeight + adjustY, 0);\r\n positions.push(endX + adjustX, -halfHeight + y * tileHeight + adjustY, 0);\r\n positions.push(endX + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);\r\n positions.push(endX - offsetX + adjustX, -halfHeight + (y + 1) * tileHeight + adjustY, 0);\r\n indices.push(index, index + 1, index + 3, index + 1, index + 2, index + 3);\r\n index += 4;\r\n if (flipTile === Mesh.FLIP_TILE || flipTile === Mesh.ROTATE_TILE || flipTile === Mesh.FLIP_N_ROTATE_TILE) {\r\n uvs = uvs.concat(uvBaseRC[(y + tilesX) % 2]);\r\n } else if (flipTile === Mesh.FLIP_ROW || flipTile === Mesh.ROTATE_ROW || flipTile === Mesh.FLIP_N_ROTATE_ROW) {\r\n uvs = uvs.concat(uvBaseRC[y % 2]);\r\n } else {\r\n uvs = uvs.concat(uvBaseRC[0]);\r\n }\r\n colors.push(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\r\n normals.push(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1);\r\n }\r\n }\r\n }\r\n\r\n const sideOrientation = options.sideOrientation === 0 ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n // sides\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\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 const totalColors = sideOrientation === VertexData.DOUBLESIDE ? colors.concat(colors) : colors;\r\n vertexData.colors = totalColors;\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a tiled plane mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_plane\r\n * @param name defines the name of the mesh\r\n * @param options an object used to set the following optional parameters for the tiled plane, required but can be empty\r\n * * pattern a limited pattern arrangement depending on the number\r\n * * size of the box\r\n * * width of the box, overwrites size\r\n * * height of the box, overwrites size\r\n * * tileSize sets the width, height and depth of the tile to the value of size, optional default 1\r\n * * tileWidth sets the width (x direction) of the tile, overwrites the width set by size, optional, default size\r\n * * tileHeight sets the height (y direction) of the tile, overwrites the height set by size, optional, default size\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * * alignHorizontal places whole tiles aligned to the center, left or right of a row\r\n * * alignVertical places whole tiles aligned to the center, left or right of a column\r\n * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)\r\n * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)\r\n * @param scene defines the hosting scene\r\n * @returns the box mesh\r\n */\r\nexport function CreateTiledPlane(\r\n name: string,\r\n options: {\r\n pattern?: number;\r\n tileSize?: number;\r\n tileWidth?: number;\r\n tileHeight?: number;\r\n size?: number;\r\n width?: number;\r\n height?: number;\r\n alignHorizontal?: number;\r\n alignVertical?: number;\r\n sideOrientation?: number;\r\n frontUVs?: Vector4;\r\n backUVs?: Vector4;\r\n updatable?: boolean;\r\n },\r\n scene: Nullable<Scene> = null\r\n): Mesh {\r\n const plane = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n plane._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n const vertexData = CreateTiledPlaneVertexData(options);\r\n\r\n vertexData.applyToMesh(plane, options.updatable);\r\n\r\n return plane;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use CreateTiledPlane instead\r\n */\r\nexport const TiledPlaneBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateTiledPlane,\r\n};\r\n\r\nVertexData.CreateTiledPlane = CreateTiledPlaneVertexData;\r\n"]}
1
+ {"version":3,"file":"tiledPlaneBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/tiledPlaneBuilder.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AAEzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,yBAAyB,EAAE,CAAC","sourcesContent":["export * from \"./tiledPlaneBuilder.pure\";\n\nimport { RegisterTiledPlaneBuilder } from \"./tiledPlaneBuilder.pure\";\nRegisterTiledPlaneBuilder();\n"]}
@@ -0,0 +1,85 @@
1
+ /** This file must only contain pure code and pure imports */
2
+ import { type Nullable } from "../../types.js";
3
+ import { type Scene } from "../../scene.js";
4
+ import { type Vector4 } from "../../Maths/math.vector.js";
5
+ import { Mesh } from "../mesh.pure.js";
6
+ import { VertexData } from "../mesh.vertexData.js";
7
+ /**
8
+ * Creates the VertexData for a tiled plane
9
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_plane
10
+ * @param options an object used to set the following optional parameters for the tiled plane, required but can be empty
11
+ * * pattern a limited pattern arrangement depending on the number
12
+ * * size of the box
13
+ * * width of the box, overwrites size
14
+ * * height of the box, overwrites size
15
+ * * tileSize sets the width, height and depth of the tile to the value of size, optional default 1
16
+ * * tileWidth sets the width (x direction) of the tile, overwrites the width set by size, optional, default size
17
+ * * tileHeight sets the height (y direction) of the tile, overwrites the height set by size, optional, default size
18
+ * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
19
+ * * alignHorizontal places whole tiles aligned to the center, left or right of a row
20
+ * * alignVertical places whole tiles aligned to the center, left or right of a column
21
+ * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)
22
+ * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)
23
+ * @returns the VertexData of the tiled plane
24
+ */
25
+ export declare function CreateTiledPlaneVertexData(options: {
26
+ pattern?: number;
27
+ tileSize?: number;
28
+ tileWidth?: number;
29
+ tileHeight?: number;
30
+ size?: number;
31
+ width?: number;
32
+ height?: number;
33
+ alignHorizontal?: number;
34
+ alignVertical?: number;
35
+ sideOrientation?: number;
36
+ frontUVs?: Vector4;
37
+ backUVs?: Vector4;
38
+ }): VertexData;
39
+ /**
40
+ * Creates a tiled plane mesh
41
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_plane
42
+ * @param name defines the name of the mesh
43
+ * @param options an object used to set the following optional parameters for the tiled plane, required but can be empty
44
+ * * pattern a limited pattern arrangement depending on the number
45
+ * * size of the box
46
+ * * width of the box, overwrites size
47
+ * * height of the box, overwrites size
48
+ * * tileSize sets the width, height and depth of the tile to the value of size, optional default 1
49
+ * * tileWidth sets the width (x direction) of the tile, overwrites the width set by size, optional, default size
50
+ * * tileHeight sets the height (y direction) of the tile, overwrites the height set by size, optional, default size
51
+ * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
52
+ * * alignHorizontal places whole tiles aligned to the center, left or right of a row
53
+ * * alignVertical places whole tiles aligned to the center, left or right of a column
54
+ * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)
55
+ * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)
56
+ * @param scene defines the hosting scene
57
+ * @returns the box mesh
58
+ */
59
+ export declare function CreateTiledPlane(name: string, options: {
60
+ pattern?: number;
61
+ tileSize?: number;
62
+ tileWidth?: number;
63
+ tileHeight?: number;
64
+ size?: number;
65
+ width?: number;
66
+ height?: number;
67
+ alignHorizontal?: number;
68
+ alignVertical?: number;
69
+ sideOrientation?: number;
70
+ frontUVs?: Vector4;
71
+ backUVs?: Vector4;
72
+ updatable?: boolean;
73
+ }, scene?: Nullable<Scene>): Mesh;
74
+ /**
75
+ * Class containing static functions to help procedurally build meshes
76
+ * @deprecated use CreateTiledPlane instead
77
+ */
78
+ export declare const TiledPlaneBuilder: {
79
+ CreateTiledPlane: typeof CreateTiledPlane;
80
+ };
81
+ /**
82
+ * Register side effects for the tiled plane builder.
83
+ * Safe to call multiple times; only the first call has an effect.
84
+ */
85
+ export declare function RegisterTiledPlaneBuilder(): void;