@babylonjs/core 8.50.3 → 8.50.5

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 (232) hide show
  1. package/Cameras/geospatialCamera.js +1 -1
  2. package/Cameras/geospatialCamera.js.map +1 -1
  3. package/Engines/abstractEngine.js +2 -2
  4. package/Engines/abstractEngine.js.map +1 -1
  5. package/Meshes/Builders/capsuleBuilder.js +0 -3
  6. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  7. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  8. package/Meshes/Builders/cylinderBuilder.js +1 -2
  9. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  10. package/Meshes/Builders/decalBuilder.js +2 -0
  11. package/Meshes/Builders/decalBuilder.js.map +1 -1
  12. package/Meshes/Builders/discBuilder.js +0 -1
  13. package/Meshes/Builders/discBuilder.js.map +1 -1
  14. package/Meshes/Builders/groundBuilder.d.ts +50 -54
  15. package/Meshes/Builders/groundBuilder.js +50 -54
  16. package/Meshes/Builders/groundBuilder.js.map +1 -1
  17. package/Meshes/Builders/tiledBoxBuilder.d.ts +0 -26
  18. package/Meshes/Builders/tiledBoxBuilder.js +0 -26
  19. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  20. package/Meshes/Builders/tiledPlaneBuilder.d.ts +0 -25
  21. package/Meshes/Builders/tiledPlaneBuilder.js +0 -25
  22. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  23. package/Meshes/Builders/torusBuilder.d.ts +0 -13
  24. package/Meshes/Builders/torusBuilder.js +0 -13
  25. package/Meshes/Builders/torusBuilder.js.map +1 -1
  26. package/Meshes/Builders/torusKnotBuilder.d.ts +0 -19
  27. package/Meshes/Builders/torusKnotBuilder.js +0 -19
  28. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  29. package/Meshes/Builders/tubeBuilder.d.ts +0 -12
  30. package/Meshes/Builders/tubeBuilder.js +0 -12
  31. package/Meshes/Builders/tubeBuilder.js.map +1 -1
  32. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  33. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  34. package/Meshes/Compression/dracoDecoder.types.d.ts +11 -0
  35. package/Meshes/Compression/dracoDecoder.types.js.map +1 -1
  36. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  37. package/Meshes/Compression/meshoptCompression.js +0 -2
  38. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  39. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +0 -8
  40. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  41. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.d.ts +1 -0
  42. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +1 -0
  43. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  44. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.d.ts +1 -0
  45. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +1 -0
  46. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  47. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.d.ts +1 -0
  48. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +1 -0
  49. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  50. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.d.ts +1 -0
  51. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +1 -0
  52. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  53. package/Meshes/Node/Blocks/Matrices/scalingBlock.d.ts +1 -0
  54. package/Meshes/Node/Blocks/Matrices/scalingBlock.js +1 -0
  55. package/Meshes/Node/Blocks/Matrices/scalingBlock.js.map +1 -1
  56. package/Meshes/Node/Blocks/Matrices/translationBlock.d.ts +1 -0
  57. package/Meshes/Node/Blocks/Matrices/translationBlock.js +1 -0
  58. package/Meshes/Node/Blocks/Matrices/translationBlock.js.map +1 -1
  59. package/Meshes/Node/Blocks/Set/aggregatorBlock.d.ts +1 -0
  60. package/Meshes/Node/Blocks/Set/aggregatorBlock.js +1 -0
  61. package/Meshes/Node/Blocks/Set/aggregatorBlock.js.map +1 -1
  62. package/Meshes/Node/Blocks/Set/latticeBlock.d.ts +1 -0
  63. package/Meshes/Node/Blocks/Set/latticeBlock.js +1 -0
  64. package/Meshes/Node/Blocks/Set/latticeBlock.js.map +1 -1
  65. package/Meshes/Node/Blocks/Set/setColorsBlock.d.ts +1 -0
  66. package/Meshes/Node/Blocks/Set/setColorsBlock.js +1 -0
  67. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
  68. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.d.ts +1 -0
  69. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js +1 -0
  70. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
  71. package/Meshes/Node/Blocks/Set/setNormalsBlock.d.ts +1 -0
  72. package/Meshes/Node/Blocks/Set/setNormalsBlock.js +1 -0
  73. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
  74. package/Meshes/Node/Blocks/Set/setPositionsBlock.d.ts +1 -0
  75. package/Meshes/Node/Blocks/Set/setPositionsBlock.js +1 -0
  76. package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
  77. package/Meshes/Node/Blocks/Set/setTangentsBlock.d.ts +1 -0
  78. package/Meshes/Node/Blocks/Set/setTangentsBlock.js +1 -0
  79. package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
  80. package/Meshes/Node/Blocks/Set/setUVsBlock.d.ts +1 -0
  81. package/Meshes/Node/Blocks/Set/setUVsBlock.js +1 -0
  82. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
  83. package/Meshes/Node/Blocks/Sources/boxBlock.d.ts +2 -0
  84. package/Meshes/Node/Blocks/Sources/boxBlock.js +2 -0
  85. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  86. package/Meshes/Node/Blocks/Sources/capsuleBlock.d.ts +2 -0
  87. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +2 -0
  88. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  89. package/Meshes/Node/Blocks/Sources/cylinderBlock.d.ts +2 -0
  90. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +2 -0
  91. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  92. package/Meshes/Node/Blocks/Sources/discBlock.d.ts +2 -0
  93. package/Meshes/Node/Blocks/Sources/discBlock.js +2 -0
  94. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  95. package/Meshes/Node/Blocks/Sources/gridBlock.d.ts +2 -0
  96. package/Meshes/Node/Blocks/Sources/gridBlock.js +2 -0
  97. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  98. package/Meshes/Node/Blocks/Sources/icoSphereBlock.d.ts +2 -0
  99. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +2 -0
  100. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  101. package/Meshes/Node/Blocks/Sources/meshBlock.d.ts +1 -0
  102. package/Meshes/Node/Blocks/Sources/meshBlock.js +1 -0
  103. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
  104. package/Meshes/Node/Blocks/Sources/planeBlock.d.ts +2 -0
  105. package/Meshes/Node/Blocks/Sources/planeBlock.js +2 -0
  106. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  107. package/Meshes/Node/Blocks/Sources/pointListBlock.d.ts +2 -1
  108. package/Meshes/Node/Blocks/Sources/pointListBlock.js +2 -1
  109. package/Meshes/Node/Blocks/Sources/pointListBlock.js.map +1 -1
  110. package/Meshes/Node/Blocks/Sources/sphereBlock.d.ts +2 -0
  111. package/Meshes/Node/Blocks/Sources/sphereBlock.js +2 -0
  112. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  113. package/Meshes/Node/Blocks/Sources/torusBlock.d.ts +2 -0
  114. package/Meshes/Node/Blocks/Sources/torusBlock.js +2 -0
  115. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  116. package/Meshes/Node/Blocks/Teleport/teleportInBlock.d.ts +1 -0
  117. package/Meshes/Node/Blocks/Teleport/teleportInBlock.js +1 -0
  118. package/Meshes/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  119. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.d.ts +3 -0
  120. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +3 -0
  121. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  122. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.d.ts +1 -0
  123. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +1 -1
  124. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  125. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.d.ts +1 -0
  126. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js +1 -0
  127. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
  128. package/Meshes/Node/Blocks/booleanGeometryBlock.d.ts +1 -0
  129. package/Meshes/Node/Blocks/booleanGeometryBlock.js +1 -1
  130. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  131. package/Meshes/Node/Blocks/cleanGeometryBlock.d.ts +1 -0
  132. package/Meshes/Node/Blocks/cleanGeometryBlock.js +1 -0
  133. package/Meshes/Node/Blocks/cleanGeometryBlock.js.map +1 -1
  134. package/Meshes/Node/Blocks/conditionBlock.d.ts +2 -0
  135. package/Meshes/Node/Blocks/conditionBlock.js +2 -0
  136. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
  137. package/Meshes/Node/Blocks/geometryClampBlock.d.ts +1 -0
  138. package/Meshes/Node/Blocks/geometryClampBlock.js +1 -0
  139. package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
  140. package/Meshes/Node/Blocks/geometryCollectionBlock.d.ts +1 -0
  141. package/Meshes/Node/Blocks/geometryCollectionBlock.js +1 -0
  142. package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
  143. package/Meshes/Node/Blocks/geometryCurveBlock.d.ts +2 -0
  144. package/Meshes/Node/Blocks/geometryCurveBlock.js +2 -0
  145. package/Meshes/Node/Blocks/geometryCurveBlock.js.map +1 -1
  146. package/Meshes/Node/Blocks/geometryEaseBlock.d.ts +2 -0
  147. package/Meshes/Node/Blocks/geometryEaseBlock.js +2 -0
  148. package/Meshes/Node/Blocks/geometryEaseBlock.js.map +1 -1
  149. package/Meshes/Node/Blocks/geometryInputBlock.d.ts +3 -0
  150. package/Meshes/Node/Blocks/geometryInputBlock.js +3 -0
  151. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
  152. package/Meshes/Node/Blocks/geometryOptimizeBlock.d.ts +1 -0
  153. package/Meshes/Node/Blocks/geometryOptimizeBlock.js +1 -0
  154. package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
  155. package/Meshes/Node/Blocks/geometryTransformBlock.d.ts +1 -0
  156. package/Meshes/Node/Blocks/geometryTransformBlock.js +1 -0
  157. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  158. package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +2 -0
  159. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +2 -0
  160. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  161. package/Meshes/Node/Blocks/mappingBlock.d.ts +1 -0
  162. package/Meshes/Node/Blocks/mappingBlock.js +1 -0
  163. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  164. package/Meshes/Node/Blocks/mathBlock.d.ts +1 -0
  165. package/Meshes/Node/Blocks/mathBlock.js +1 -0
  166. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  167. package/Meshes/Node/Blocks/mergeGeometryBlock.d.ts +1 -0
  168. package/Meshes/Node/Blocks/mergeGeometryBlock.js +1 -0
  169. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  170. package/Meshes/Node/Blocks/randomBlock.d.ts +2 -0
  171. package/Meshes/Node/Blocks/randomBlock.js +2 -0
  172. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  173. package/Meshes/Node/Blocks/subdivideBlock.d.ts +1 -0
  174. package/Meshes/Node/Blocks/subdivideBlock.js +1 -0
  175. package/Meshes/Node/Blocks/subdivideBlock.js.map +1 -1
  176. package/Meshes/Node/Interfaces/nodeGeometryTextureData.d.ts +3 -0
  177. package/Meshes/Node/Interfaces/nodeGeometryTextureData.js.map +1 -1
  178. package/Meshes/Node/nodeGeometry.js +0 -2
  179. package/Meshes/Node/nodeGeometry.js.map +1 -1
  180. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +0 -1
  181. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  182. package/Meshes/Node/nodeGeometryBuildState.js +0 -1
  183. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  184. package/Meshes/WebGL/webGLDataBuffer.d.ts +2 -0
  185. package/Meshes/WebGL/webGLDataBuffer.js +2 -0
  186. package/Meshes/WebGL/webGLDataBuffer.js.map +1 -1
  187. package/Meshes/WebGPU/webgpuDataBuffer.d.ts +4 -0
  188. package/Meshes/WebGPU/webgpuDataBuffer.js +4 -0
  189. package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
  190. package/Meshes/abstractMesh.d.ts +1 -0
  191. package/Meshes/abstractMesh.decalMap.d.ts +1 -0
  192. package/Meshes/abstractMesh.decalMap.js.map +1 -1
  193. package/Meshes/abstractMesh.js +1 -6
  194. package/Meshes/abstractMesh.js.map +1 -1
  195. package/Meshes/csg.js +0 -6
  196. package/Meshes/csg.js.map +1 -1
  197. package/Meshes/csg2.js +1 -2
  198. package/Meshes/csg2.js.map +1 -1
  199. package/Meshes/geodesicMesh.d.ts +26 -0
  200. package/Meshes/geodesicMesh.js +18 -3
  201. package/Meshes/geodesicMesh.js.map +1 -1
  202. package/Meshes/groundMesh.d.ts +1 -0
  203. package/Meshes/groundMesh.js +1 -0
  204. package/Meshes/groundMesh.js.map +1 -1
  205. package/Meshes/index.js +0 -2
  206. package/Meshes/index.js.map +1 -1
  207. package/Meshes/instancedMesh.d.ts +18 -3
  208. package/Meshes/instancedMesh.js +10 -3
  209. package/Meshes/instancedMesh.js.map +1 -1
  210. package/Meshes/mesh.d.ts +286 -204
  211. package/Meshes/mesh.js +251 -197
  212. package/Meshes/mesh.js.map +1 -1
  213. package/Meshes/mesh.vertexData.d.ts +15 -19
  214. package/Meshes/mesh.vertexData.js +15 -19
  215. package/Meshes/mesh.vertexData.js.map +1 -1
  216. package/Meshes/meshSimplification.d.ts +0 -1
  217. package/Meshes/meshSimplification.js +6 -1
  218. package/Meshes/meshSimplification.js.map +1 -1
  219. package/Meshes/meshSimplificationSceneComponent.d.ts +2 -0
  220. package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
  221. package/Meshes/meshUVSpaceRenderer.d.ts +1 -0
  222. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  223. package/Meshes/polygonMesh.js +4 -0
  224. package/Meshes/polygonMesh.js.map +1 -1
  225. package/Meshes/subMesh.project.d.ts +1 -0
  226. package/Meshes/subMesh.project.js.map +1 -1
  227. package/Meshes/thinInstanceMesh.d.ts +5 -0
  228. package/Meshes/thinInstanceMesh.js.map +1 -1
  229. package/Meshes/transformNode.d.ts +1 -1
  230. package/Meshes/transformNode.js +1 -1
  231. package/Meshes/transformNode.js.map +1 -1
  232. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"decalBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/decalBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, IndicesArray, FloatArray } from \"../../types\";\r\nimport { Vector3, Matrix, Vector2, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { Lerp } from \"../../Maths/math.scalar.functions\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport type { AbstractMesh } from \"../abstractMesh\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\nconst XpAxis = new Vector3(1, 0, 0);\r\nconst XnAxis = new Vector3(-1, 0, 0);\r\nconst YpAxis = new Vector3(0, 1, 0);\r\nconst YnAxis = new Vector3(0, -1, 0);\r\nconst ZpAxis = new Vector3(0, 0, 1);\r\nconst ZnAxis = new Vector3(0, 0, -1);\r\n\r\n/** @internal */\r\nclass DecalVertex {\r\n constructor(\r\n public position: Vector3 = Vector3.Zero(),\r\n public normal: Vector3 = Vector3.Up(),\r\n public uv: Vector2 = Vector2.Zero(),\r\n public vertexIdx: number = 0,\r\n public vertexIdxForBones: number = 0,\r\n public localPositionOverride: Nullable<number[]> = null,\r\n public localNormalOverride: Nullable<number[]> = null,\r\n public matrixIndicesOverride: Nullable<number[]> = null,\r\n public matrixWeightsOverride: Nullable<number[]> = null\r\n ) {}\r\n public clone(): DecalVertex {\r\n return new DecalVertex(\r\n this.position.clone(),\r\n this.normal.clone(),\r\n this.uv.clone(),\r\n this.vertexIdx,\r\n this.vertexIdxForBones,\r\n this.localPositionOverride?.slice(),\r\n this.localNormalOverride?.slice(),\r\n this.matrixIndicesOverride?.slice(),\r\n this.matrixWeightsOverride?.slice()\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Creates a decal mesh.\r\n * A decal is a mesh usually applied as a model onto the surface of another mesh. So don't forget the parameter `sourceMesh` depicting the decal\r\n * * The parameter `position` (Vector3, default `(0, 0, 0)`) sets the position of the decal in World coordinates\r\n * * The parameter `normal` (Vector3, default `Vector3.Up`) sets the normal of the mesh where the decal is applied onto in World coordinates\r\n * * The parameter `size` (Vector3, default `(1, 1, 1)`) sets the decal scaling\r\n * * The parameter `angle` (float in radian, default 0) sets the angle to rotate the decal\r\n * * The parameter `captureUVS` defines if we need to capture the uvs or compute them\r\n * * The parameter `cullBackFaces` defines if the back faces should be removed from the decal mesh\r\n * * The parameter `localMode` defines that the computations should be done with the local mesh coordinates instead of the world space coordinates.\r\n * * Use this mode if you want the decal to be parented to the sourceMesh and move/rotate with it.\r\n * Note: Meshes with morph targets are not supported!\r\n * @param name defines the name of the mesh\r\n * @param sourceMesh defines the mesh where the decal must be applied\r\n * @param options defines the options used to create the mesh\r\n * @returns the decal mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/decals\r\n */\r\nexport function CreateDecal(\r\n name: string,\r\n sourceMesh: AbstractMesh,\r\n options: { position?: Vector3; normal?: Vector3; size?: Vector3; angle?: number; captureUVS?: boolean; cullBackFaces?: boolean; localMode?: boolean }\r\n): Mesh {\r\n const hasSkeleton = !!sourceMesh.skeleton;\r\n const hasMorphTargets = !!sourceMesh.morphTargetManager?.numTargets;\r\n const useLocalComputation = options.localMode || hasSkeleton;\r\n\r\n const indices = <IndicesArray>sourceMesh.getIndices();\r\n const positions = hasSkeleton || hasMorphTargets ? sourceMesh.getPositionData(true, true) : sourceMesh.getVerticesData(VertexBuffer.PositionKind);\r\n const normals = hasSkeleton || hasMorphTargets ? sourceMesh.getNormalsData(true, true) : sourceMesh.getVerticesData(VertexBuffer.NormalKind);\r\n const localPositions = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.PositionKind) : positions) : null;\r\n const localNormals = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.NormalKind) : normals) : null;\r\n const uvs = sourceMesh.getVerticesData(VertexBuffer.UVKind);\r\n const matIndices = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesKind) : null;\r\n const matWeights = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsKind) : null;\r\n const matIndicesExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesExtraKind) : null;\r\n const matWeightsExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsExtraKind) : null;\r\n\r\n const position = options.position || Vector3.Zero();\r\n let normal = options.normal || Vector3.Up();\r\n const size = options.size || Vector3.One();\r\n const angle = options.angle || 0;\r\n\r\n // Getting correct rotation\r\n if (!normal) {\r\n const target = new Vector3(0, 0, 1);\r\n const camera = <Camera>sourceMesh.getScene().activeCamera;\r\n const cameraWorldTarget = Vector3.TransformCoordinates(target, camera.getWorldMatrix());\r\n\r\n normal = camera.globalPosition.subtract(cameraWorldTarget);\r\n }\r\n\r\n const yaw = -Math.atan2(normal.z, normal.x) - Math.PI / 2;\r\n const len = Math.sqrt(normal.x * normal.x + normal.z * normal.z);\r\n const pitch = Math.atan2(normal.y, len);\r\n\r\n const vertexData = new VertexData();\r\n vertexData.indices = [];\r\n vertexData.positions = [];\r\n vertexData.normals = [];\r\n vertexData.uvs = [];\r\n vertexData.matricesIndices = hasSkeleton ? [] : null;\r\n vertexData.matricesWeights = hasSkeleton ? [] : null;\r\n vertexData.matricesIndicesExtra = matIndicesExtra ? [] : null;\r\n vertexData.matricesWeightsExtra = matWeightsExtra ? [] : null;\r\n\r\n let currentVertexDataIndex = 0;\r\n\r\n const extractDecalVector3 = (indexId: number, transformMatrix: Matrix): DecalVertex => {\r\n const result = new DecalVertex();\r\n if (!indices || !positions || !normals) {\r\n return result;\r\n }\r\n\r\n const vertexId = indices[indexId];\r\n\r\n result.vertexIdx = vertexId * 3;\r\n result.vertexIdxForBones = vertexId * 4;\r\n\r\n // Send vector to decal local world\r\n result.position = new Vector3(positions[vertexId * 3], positions[vertexId * 3 + 1], positions[vertexId * 3 + 2]);\r\n Vector3.TransformCoordinatesToRef(result.position, transformMatrix, result.position);\r\n\r\n // Get normal\r\n result.normal = new Vector3(normals[vertexId * 3], normals[vertexId * 3 + 1], normals[vertexId * 3 + 2]);\r\n Vector3.TransformNormalToRef(result.normal, transformMatrix, result.normal);\r\n\r\n if (options.captureUVS && uvs) {\r\n const v = uvs[vertexId * 2 + 1];\r\n result.uv = new Vector2(uvs[vertexId * 2], useOpenGLOrientationForUV ? 1 - v : v);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const emptyArray = [0, 0, 0, 0];\r\n\r\n // Inspired by https://github.com/mrdoob/three.js/blob/eee231960882f6f3b6113405f524956145148146/examples/js/geometries/DecalGeometry.js\r\n const clip = (vertices: DecalVertex[], axis: Vector3): Nullable<DecalVertex[]> => {\r\n if (vertices.length === 0) {\r\n return vertices;\r\n }\r\n\r\n const clipSize = 0.5 * Math.abs(Vector3.Dot(size, axis));\r\n\r\n const indexOf = (arr: FloatArray | number[], val: number, start: number, num: number) => {\r\n for (let i = 0; i < num; ++i) {\r\n if (arr[start + i] === val) {\r\n return start + i;\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n const clipVertices = (v0: DecalVertex, v1: DecalVertex): DecalVertex => {\r\n const clipFactor = Vector3.GetClipFactor(v0.position, v1.position, axis, clipSize);\r\n\r\n let indices = emptyArray;\r\n let weights = emptyArray;\r\n\r\n if (matIndices && matWeights) {\r\n const mat0Index = v0.matrixIndicesOverride ? 0 : v0.vertexIdxForBones;\r\n const v0Indices = v0.matrixIndicesOverride ?? matIndices;\r\n const v0Weights = v0.matrixWeightsOverride ?? matWeights;\r\n\r\n const mat1Index = v1.matrixIndicesOverride ? 0 : v1.vertexIdxForBones;\r\n const v1Indices = v1.matrixIndicesOverride ?? matIndices;\r\n const v1Weights = v1.matrixWeightsOverride ?? matWeights;\r\n\r\n indices = [0, 0, 0, 0];\r\n weights = [0, 0, 0, 0];\r\n\r\n let index = 0;\r\n for (let i = 0; i < 4; ++i) {\r\n if (v0Weights[mat0Index + i] > 0) {\r\n const idx = indexOf(v1Indices, v0Indices[mat0Index + i], mat1Index, 4);\r\n indices[index] = v0Indices[mat0Index + i];\r\n weights[index] = Lerp(v0Weights[mat0Index + i], idx >= 0 ? v1Weights[idx] : 0, clipFactor);\r\n index++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < 4 && index < 4; ++i) {\r\n const ind = v1Indices[mat1Index + i];\r\n if (indexOf(v0Indices, ind, mat0Index, 4) !== -1) {\r\n continue;\r\n }\r\n\r\n indices[index] = ind;\r\n weights[index] = Lerp(0, v1Weights[mat1Index + i], clipFactor);\r\n index++;\r\n }\r\n\r\n const sumw = weights[0] + weights[1] + weights[2] + weights[3];\r\n\r\n weights[0] /= sumw;\r\n weights[1] /= sumw;\r\n weights[2] /= sumw;\r\n weights[3] /= sumw;\r\n }\r\n\r\n const v0LocalPositionX = v0.localPositionOverride ? v0.localPositionOverride[0] : (localPositions?.[v0.vertexIdx] ?? 0);\r\n const v0LocalPositionY = v0.localPositionOverride ? v0.localPositionOverride[1] : (localPositions?.[v0.vertexIdx + 1] ?? 0);\r\n const v0LocalPositionZ = v0.localPositionOverride ? v0.localPositionOverride[2] : (localPositions?.[v0.vertexIdx + 2] ?? 0);\r\n\r\n const v1LocalPositionX = v1.localPositionOverride ? v1.localPositionOverride[0] : (localPositions?.[v1.vertexIdx] ?? 0);\r\n const v1LocalPositionY = v1.localPositionOverride ? v1.localPositionOverride[1] : (localPositions?.[v1.vertexIdx + 1] ?? 0);\r\n const v1LocalPositionZ = v1.localPositionOverride ? v1.localPositionOverride[2] : (localPositions?.[v1.vertexIdx + 2] ?? 0);\r\n\r\n const v0LocalNormalX = v0.localNormalOverride ? v0.localNormalOverride[0] : (localNormals?.[v0.vertexIdx] ?? 0);\r\n const v0LocalNormalY = v0.localNormalOverride ? v0.localNormalOverride[1] : (localNormals?.[v0.vertexIdx + 1] ?? 0);\r\n const v0LocalNormalZ = v0.localNormalOverride ? v0.localNormalOverride[2] : (localNormals?.[v0.vertexIdx + 2] ?? 0);\r\n\r\n const v1LocalNormalX = v1.localNormalOverride ? v1.localNormalOverride[0] : (localNormals?.[v1.vertexIdx] ?? 0);\r\n const v1LocalNormalY = v1.localNormalOverride ? v1.localNormalOverride[1] : (localNormals?.[v1.vertexIdx + 1] ?? 0);\r\n const v1LocalNormalZ = v1.localNormalOverride ? v1.localNormalOverride[2] : (localNormals?.[v1.vertexIdx + 2] ?? 0);\r\n\r\n const interpNormalX = v0LocalNormalX + (v1LocalNormalX - v0LocalNormalX) * clipFactor;\r\n const interpNormalY = v0LocalNormalY + (v1LocalNormalY - v0LocalNormalY) * clipFactor;\r\n const interpNormalZ = v0LocalNormalZ + (v1LocalNormalZ - v0LocalNormalZ) * clipFactor;\r\n\r\n const norm = Math.sqrt(interpNormalX * interpNormalX + interpNormalY * interpNormalY + interpNormalZ * interpNormalZ);\r\n\r\n return new DecalVertex(\r\n Vector3.Lerp(v0.position, v1.position, clipFactor),\r\n Vector3.Lerp(v0.normal, v1.normal, clipFactor).normalize(),\r\n Vector2.Lerp(v0.uv, v1.uv, clipFactor),\r\n -1,\r\n -1,\r\n localPositions\r\n ? [\r\n v0LocalPositionX + (v1LocalPositionX - v0LocalPositionX) * clipFactor,\r\n v0LocalPositionY + (v1LocalPositionY - v0LocalPositionY) * clipFactor,\r\n v0LocalPositionZ + (v1LocalPositionZ - v0LocalPositionZ) * clipFactor,\r\n ]\r\n : null,\r\n localNormals ? [interpNormalX / norm, interpNormalY / norm, interpNormalZ / norm] : null,\r\n indices,\r\n weights\r\n );\r\n };\r\n\r\n let clipResult: Nullable<DecalVertex[]> = null;\r\n\r\n if (vertices.length > 3) {\r\n clipResult = [] as DecalVertex[];\r\n }\r\n\r\n for (let index = 0; index < vertices.length; index += 3) {\r\n let total = 0;\r\n let nV1: Nullable<DecalVertex> = null;\r\n let nV2: Nullable<DecalVertex> = null;\r\n let nV3: Nullable<DecalVertex> = null;\r\n let nV4: Nullable<DecalVertex> = null;\r\n\r\n const d1 = Vector3.Dot(vertices[index].position, axis) - clipSize;\r\n const d2 = Vector3.Dot(vertices[index + 1].position, axis) - clipSize;\r\n const d3 = Vector3.Dot(vertices[index + 2].position, axis) - clipSize;\r\n\r\n const v1Out = d1 > 0;\r\n const v2Out = d2 > 0;\r\n const v3Out = d3 > 0;\r\n\r\n total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);\r\n\r\n switch (total) {\r\n case 0:\r\n if (vertices.length > 3) {\r\n clipResult!.push(vertices[index]);\r\n clipResult!.push(vertices[index + 1]);\r\n clipResult!.push(vertices[index + 2]);\r\n } else {\r\n clipResult = vertices;\r\n }\r\n break;\r\n case 1:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (v1Out) {\r\n nV1 = vertices[index + 1];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index], nV1);\r\n nV4 = clipVertices(vertices[index], nV2);\r\n }\r\n\r\n if (v2Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index + 1], nV1);\r\n nV4 = clipVertices(vertices[index + 1], nV2);\r\n\r\n clipResult.push(nV3);\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV1.clone());\r\n\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV4);\r\n break;\r\n }\r\n if (v3Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 1];\r\n nV3 = clipVertices(vertices[index + 2], nV1);\r\n nV4 = clipVertices(vertices[index + 2], nV2);\r\n }\r\n\r\n if (nV1 && nV2 && nV3 && nV4) {\r\n clipResult.push(nV1.clone());\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3);\r\n\r\n clipResult.push(nV4);\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV2.clone());\r\n }\r\n break;\r\n case 2:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (!v1Out) {\r\n nV1 = vertices[index].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 1]);\r\n nV3 = clipVertices(nV1, vertices[index + 2]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v2Out) {\r\n nV1 = vertices[index + 1].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 2]);\r\n nV3 = clipVertices(nV1, vertices[index]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v3Out) {\r\n nV1 = vertices[index + 2].clone();\r\n nV2 = clipVertices(nV1, vertices[index]);\r\n nV3 = clipVertices(nV1, vertices[index + 1]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n break;\r\n case 3:\r\n break;\r\n }\r\n }\r\n\r\n return clipResult;\r\n };\r\n\r\n const sourceMeshAsMesh = sourceMesh instanceof Mesh ? sourceMesh : null;\r\n const matrixData = sourceMeshAsMesh?._thinInstanceDataStorage.matrixData;\r\n\r\n const numMatrices = sourceMeshAsMesh?.thinInstanceCount || 1;\r\n const thinInstanceMatrix = TmpVectors.Matrix[0];\r\n\r\n thinInstanceMatrix.copyFrom(Matrix.IdentityReadOnly);\r\n\r\n for (let m = 0; m < numMatrices; ++m) {\r\n if (sourceMeshAsMesh?.hasThinInstances && matrixData) {\r\n const ofst = m * 16;\r\n\r\n thinInstanceMatrix.setRowFromFloats(0, matrixData[ofst + 0], matrixData[ofst + 1], matrixData[ofst + 2], matrixData[ofst + 3]);\r\n thinInstanceMatrix.setRowFromFloats(1, matrixData[ofst + 4], matrixData[ofst + 5], matrixData[ofst + 6], matrixData[ofst + 7]);\r\n thinInstanceMatrix.setRowFromFloats(2, matrixData[ofst + 8], matrixData[ofst + 9], matrixData[ofst + 10], matrixData[ofst + 11]);\r\n thinInstanceMatrix.setRowFromFloats(3, matrixData[ofst + 12], matrixData[ofst + 13], matrixData[ofst + 14], matrixData[ofst + 15]);\r\n }\r\n\r\n // Matrix\r\n const decalWorldMatrix = Matrix.RotationYawPitchRoll(yaw, pitch, angle).multiply(Matrix.Translation(position.x, position.y, position.z));\r\n const inverseDecalWorldMatrix = Matrix.Invert(decalWorldMatrix);\r\n const meshWorldMatrix = sourceMesh.getWorldMatrix();\r\n const transformMatrix = thinInstanceMatrix.multiply(meshWorldMatrix).multiply(inverseDecalWorldMatrix);\r\n\r\n const oneFaceVertices = new Array<DecalVertex>(3);\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let faceVertices: Nullable<DecalVertex[]> = oneFaceVertices;\r\n\r\n faceVertices[0] = extractDecalVector3(index, transformMatrix);\r\n faceVertices[1] = extractDecalVector3(index + 1, transformMatrix);\r\n faceVertices[2] = extractDecalVector3(index + 2, transformMatrix);\r\n\r\n if (options.cullBackFaces) {\r\n // If all the normals of the vertices of the face are pointing away from the view direction we discard the face.\r\n // As computations are done in the decal coordinate space, the viewDirection is (0,0,1), so when dot(vertexNormal, -viewDirection) <= 0 the vertex is culled\r\n if (-faceVertices[0].normal.z <= 0 && -faceVertices[1].normal.z <= 0 && -faceVertices[2].normal.z <= 0) {\r\n continue;\r\n }\r\n }\r\n\r\n // Clip\r\n faceVertices = clip(faceVertices, XpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, XnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, YpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, YnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, ZpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, ZnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n\r\n // Add UVs and get back to world\r\n for (let vIndex = 0; vIndex < faceVertices.length; vIndex++) {\r\n const vertex = faceVertices[vIndex];\r\n\r\n //TODO check for Int32Array | Uint32Array | Uint16Array\r\n vertexData.indices.push(currentVertexDataIndex);\r\n if (useLocalComputation) {\r\n if (vertex.localPositionOverride) {\r\n vertexData.positions[currentVertexDataIndex * 3] = vertex.localPositionOverride[0];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = vertex.localPositionOverride[1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = vertex.localPositionOverride[2];\r\n } else if (localPositions) {\r\n vertexData.positions[currentVertexDataIndex * 3] = localPositions[vertex.vertexIdx];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = localPositions[vertex.vertexIdx + 1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = localPositions[vertex.vertexIdx + 2];\r\n }\r\n if (vertex.localNormalOverride) {\r\n vertexData.normals[currentVertexDataIndex * 3] = vertex.localNormalOverride[0];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = vertex.localNormalOverride[1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = vertex.localNormalOverride[2];\r\n } else if (localNormals) {\r\n vertexData.normals[currentVertexDataIndex * 3] = localNormals[vertex.vertexIdx];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = localNormals[vertex.vertexIdx + 1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = localNormals[vertex.vertexIdx + 2];\r\n }\r\n } else {\r\n vertex.position.toArray(vertexData.positions, currentVertexDataIndex * 3);\r\n vertex.normal.toArray(vertexData.normals, currentVertexDataIndex * 3);\r\n }\r\n if (vertexData.matricesIndices && vertexData.matricesWeights) {\r\n if (vertex.matrixIndicesOverride) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = vertex.matrixIndicesOverride[0];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = vertex.matrixIndicesOverride[1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = vertex.matrixIndicesOverride[2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = vertex.matrixIndicesOverride[3];\r\n } else {\r\n if (matIndices) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = matIndices[vertex.vertexIdxForBones];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = matIndices[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = matIndices[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = matIndices[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matIndicesExtra && vertexData.matricesIndicesExtra) {\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4] = matIndicesExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 1] = matIndicesExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 2] = matIndicesExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 3] = matIndicesExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n if (vertex.matrixWeightsOverride) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = vertex.matrixWeightsOverride[0];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = vertex.matrixWeightsOverride[1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = vertex.matrixWeightsOverride[2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = vertex.matrixWeightsOverride[3];\r\n } else {\r\n if (matWeights) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = matWeights[vertex.vertexIdxForBones];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = matWeights[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = matWeights[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = matWeights[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matWeightsExtra && vertexData.matricesWeightsExtra) {\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4] = matWeightsExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 1] = matWeightsExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 2] = matWeightsExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 3] = matWeightsExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n }\r\n\r\n if (!options.captureUVS) {\r\n vertexData.uvs.push(0.5 + vertex.position.x / size.x);\r\n const v = 0.5 + vertex.position.y / size.y;\r\n vertexData.uvs.push(useOpenGLOrientationForUV ? 1 - v : v);\r\n } else {\r\n vertex.uv.toArray(vertexData.uvs, currentVertexDataIndex * 2);\r\n }\r\n currentVertexDataIndex++;\r\n }\r\n }\r\n }\r\n\r\n // Avoid the \"Setting vertex data kind 'XXX' with an empty array\" warning when calling vertexData.applyToMesh\r\n if (vertexData.indices.length === 0) {\r\n vertexData.indices = null;\r\n }\r\n if (vertexData.positions.length === 0) {\r\n vertexData.positions = null;\r\n }\r\n if (vertexData.normals.length === 0) {\r\n vertexData.normals = null;\r\n }\r\n if (vertexData.uvs.length === 0) {\r\n vertexData.uvs = null;\r\n }\r\n if (vertexData.matricesIndices?.length === 0) {\r\n vertexData.matricesIndices = null;\r\n }\r\n if (vertexData.matricesWeights?.length === 0) {\r\n vertexData.matricesWeights = null;\r\n }\r\n if (vertexData.matricesIndicesExtra?.length === 0) {\r\n vertexData.matricesIndicesExtra = null;\r\n }\r\n if (vertexData.matricesWeightsExtra?.length === 0) {\r\n vertexData.matricesWeightsExtra = null;\r\n }\r\n\r\n // Return mesh\r\n const decal = new Mesh(name, sourceMesh.getScene());\r\n vertexData.applyToMesh(decal);\r\n\r\n if (useLocalComputation) {\r\n decal.skeleton = sourceMesh.skeleton;\r\n decal.parent = sourceMesh;\r\n } else {\r\n decal.position = position.clone();\r\n decal.rotation = new Vector3(pitch, yaw, angle);\r\n }\r\n\r\n decal.computeWorldMatrix(true);\r\n decal.refreshBoundingInfo(true, true);\r\n\r\n return decal;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the function directly from the module\r\n */\r\nexport const DecalBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateDecal,\r\n};\r\n\r\nMesh.CreateDecal = (name: string, sourceMesh: AbstractMesh, position: Vector3, normal: Vector3, size: Vector3, angle: number): Mesh => {\r\n const options = {\r\n position,\r\n normal,\r\n size,\r\n angle,\r\n };\r\n\r\n return CreateDecal(name, sourceMesh, options);\r\n};\r\n"]}
1
+ {"version":3,"file":"decalBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/decalBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, IndicesArray, FloatArray } from \"../../types\";\r\nimport { Vector3, Matrix, Vector2, TmpVectors } from \"../../Maths/math.vector\";\r\nimport { Lerp } from \"../../Maths/math.scalar.functions\";\r\nimport { Mesh } from \"../mesh\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport type { AbstractMesh } from \"../abstractMesh\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\nconst XpAxis = new Vector3(1, 0, 0);\r\nconst XnAxis = new Vector3(-1, 0, 0);\r\nconst YpAxis = new Vector3(0, 1, 0);\r\nconst YnAxis = new Vector3(0, -1, 0);\r\nconst ZpAxis = new Vector3(0, 0, 1);\r\nconst ZnAxis = new Vector3(0, 0, -1);\r\n\r\n/** @internal */\r\nclass DecalVertex {\r\n /** @internal */\r\n constructor(\r\n public position: Vector3 = Vector3.Zero(),\r\n public normal: Vector3 = Vector3.Up(),\r\n public uv: Vector2 = Vector2.Zero(),\r\n public vertexIdx: number = 0,\r\n public vertexIdxForBones: number = 0,\r\n public localPositionOverride: Nullable<number[]> = null,\r\n public localNormalOverride: Nullable<number[]> = null,\r\n public matrixIndicesOverride: Nullable<number[]> = null,\r\n public matrixWeightsOverride: Nullable<number[]> = null\r\n ) {}\r\n /** @internal */\r\n public clone(): DecalVertex {\r\n return new DecalVertex(\r\n this.position.clone(),\r\n this.normal.clone(),\r\n this.uv.clone(),\r\n this.vertexIdx,\r\n this.vertexIdxForBones,\r\n this.localPositionOverride?.slice(),\r\n this.localNormalOverride?.slice(),\r\n this.matrixIndicesOverride?.slice(),\r\n this.matrixWeightsOverride?.slice()\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Creates a decal mesh.\r\n * A decal is a mesh usually applied as a model onto the surface of another mesh. So don't forget the parameter `sourceMesh` depicting the decal\r\n * * The parameter `position` (Vector3, default `(0, 0, 0)`) sets the position of the decal in World coordinates\r\n * * The parameter `normal` (Vector3, default `Vector3.Up`) sets the normal of the mesh where the decal is applied onto in World coordinates\r\n * * The parameter `size` (Vector3, default `(1, 1, 1)`) sets the decal scaling\r\n * * The parameter `angle` (float in radian, default 0) sets the angle to rotate the decal\r\n * * The parameter `captureUVS` defines if we need to capture the uvs or compute them\r\n * * The parameter `cullBackFaces` defines if the back faces should be removed from the decal mesh\r\n * * The parameter `localMode` defines that the computations should be done with the local mesh coordinates instead of the world space coordinates.\r\n * * Use this mode if you want the decal to be parented to the sourceMesh and move/rotate with it.\r\n * Note: Meshes with morph targets are not supported!\r\n * @param name defines the name of the mesh\r\n * @param sourceMesh defines the mesh where the decal must be applied\r\n * @param options defines the options used to create the mesh\r\n * @returns the decal mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/decals\r\n */\r\nexport function CreateDecal(\r\n name: string,\r\n sourceMesh: AbstractMesh,\r\n options: { position?: Vector3; normal?: Vector3; size?: Vector3; angle?: number; captureUVS?: boolean; cullBackFaces?: boolean; localMode?: boolean }\r\n): Mesh {\r\n const hasSkeleton = !!sourceMesh.skeleton;\r\n const hasMorphTargets = !!sourceMesh.morphTargetManager?.numTargets;\r\n const useLocalComputation = options.localMode || hasSkeleton;\r\n\r\n const indices = <IndicesArray>sourceMesh.getIndices();\r\n const positions = hasSkeleton || hasMorphTargets ? sourceMesh.getPositionData(true, true) : sourceMesh.getVerticesData(VertexBuffer.PositionKind);\r\n const normals = hasSkeleton || hasMorphTargets ? sourceMesh.getNormalsData(true, true) : sourceMesh.getVerticesData(VertexBuffer.NormalKind);\r\n const localPositions = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.PositionKind) : positions) : null;\r\n const localNormals = useLocalComputation ? (hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.NormalKind) : normals) : null;\r\n const uvs = sourceMesh.getVerticesData(VertexBuffer.UVKind);\r\n const matIndices = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesKind) : null;\r\n const matWeights = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsKind) : null;\r\n const matIndicesExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesIndicesExtraKind) : null;\r\n const matWeightsExtra = hasSkeleton ? sourceMesh.getVerticesData(VertexBuffer.MatricesWeightsExtraKind) : null;\r\n\r\n const position = options.position || Vector3.Zero();\r\n let normal = options.normal || Vector3.Up();\r\n const size = options.size || Vector3.One();\r\n const angle = options.angle || 0;\r\n\r\n // Getting correct rotation\r\n if (!normal) {\r\n const target = new Vector3(0, 0, 1);\r\n const camera = <Camera>sourceMesh.getScene().activeCamera;\r\n const cameraWorldTarget = Vector3.TransformCoordinates(target, camera.getWorldMatrix());\r\n\r\n normal = camera.globalPosition.subtract(cameraWorldTarget);\r\n }\r\n\r\n const yaw = -Math.atan2(normal.z, normal.x) - Math.PI / 2;\r\n const len = Math.sqrt(normal.x * normal.x + normal.z * normal.z);\r\n const pitch = Math.atan2(normal.y, len);\r\n\r\n const vertexData = new VertexData();\r\n vertexData.indices = [];\r\n vertexData.positions = [];\r\n vertexData.normals = [];\r\n vertexData.uvs = [];\r\n vertexData.matricesIndices = hasSkeleton ? [] : null;\r\n vertexData.matricesWeights = hasSkeleton ? [] : null;\r\n vertexData.matricesIndicesExtra = matIndicesExtra ? [] : null;\r\n vertexData.matricesWeightsExtra = matWeightsExtra ? [] : null;\r\n\r\n let currentVertexDataIndex = 0;\r\n\r\n const extractDecalVector3 = (indexId: number, transformMatrix: Matrix): DecalVertex => {\r\n const result = new DecalVertex();\r\n if (!indices || !positions || !normals) {\r\n return result;\r\n }\r\n\r\n const vertexId = indices[indexId];\r\n\r\n result.vertexIdx = vertexId * 3;\r\n result.vertexIdxForBones = vertexId * 4;\r\n\r\n // Send vector to decal local world\r\n result.position = new Vector3(positions[vertexId * 3], positions[vertexId * 3 + 1], positions[vertexId * 3 + 2]);\r\n Vector3.TransformCoordinatesToRef(result.position, transformMatrix, result.position);\r\n\r\n // Get normal\r\n result.normal = new Vector3(normals[vertexId * 3], normals[vertexId * 3 + 1], normals[vertexId * 3 + 2]);\r\n Vector3.TransformNormalToRef(result.normal, transformMatrix, result.normal);\r\n\r\n if (options.captureUVS && uvs) {\r\n const v = uvs[vertexId * 2 + 1];\r\n result.uv = new Vector2(uvs[vertexId * 2], useOpenGLOrientationForUV ? 1 - v : v);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const emptyArray = [0, 0, 0, 0];\r\n\r\n // Inspired by https://github.com/mrdoob/three.js/blob/eee231960882f6f3b6113405f524956145148146/examples/js/geometries/DecalGeometry.js\r\n const clip = (vertices: DecalVertex[], axis: Vector3): Nullable<DecalVertex[]> => {\r\n if (vertices.length === 0) {\r\n return vertices;\r\n }\r\n\r\n const clipSize = 0.5 * Math.abs(Vector3.Dot(size, axis));\r\n\r\n const indexOf = (arr: FloatArray | number[], val: number, start: number, num: number) => {\r\n for (let i = 0; i < num; ++i) {\r\n if (arr[start + i] === val) {\r\n return start + i;\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n const clipVertices = (v0: DecalVertex, v1: DecalVertex): DecalVertex => {\r\n const clipFactor = Vector3.GetClipFactor(v0.position, v1.position, axis, clipSize);\r\n\r\n let indices = emptyArray;\r\n let weights = emptyArray;\r\n\r\n if (matIndices && matWeights) {\r\n const mat0Index = v0.matrixIndicesOverride ? 0 : v0.vertexIdxForBones;\r\n const v0Indices = v0.matrixIndicesOverride ?? matIndices;\r\n const v0Weights = v0.matrixWeightsOverride ?? matWeights;\r\n\r\n const mat1Index = v1.matrixIndicesOverride ? 0 : v1.vertexIdxForBones;\r\n const v1Indices = v1.matrixIndicesOverride ?? matIndices;\r\n const v1Weights = v1.matrixWeightsOverride ?? matWeights;\r\n\r\n indices = [0, 0, 0, 0];\r\n weights = [0, 0, 0, 0];\r\n\r\n let index = 0;\r\n for (let i = 0; i < 4; ++i) {\r\n if (v0Weights[mat0Index + i] > 0) {\r\n const idx = indexOf(v1Indices, v0Indices[mat0Index + i], mat1Index, 4);\r\n indices[index] = v0Indices[mat0Index + i];\r\n weights[index] = Lerp(v0Weights[mat0Index + i], idx >= 0 ? v1Weights[idx] : 0, clipFactor);\r\n index++;\r\n }\r\n }\r\n\r\n for (let i = 0; i < 4 && index < 4; ++i) {\r\n const ind = v1Indices[mat1Index + i];\r\n if (indexOf(v0Indices, ind, mat0Index, 4) !== -1) {\r\n continue;\r\n }\r\n\r\n indices[index] = ind;\r\n weights[index] = Lerp(0, v1Weights[mat1Index + i], clipFactor);\r\n index++;\r\n }\r\n\r\n const sumw = weights[0] + weights[1] + weights[2] + weights[3];\r\n\r\n weights[0] /= sumw;\r\n weights[1] /= sumw;\r\n weights[2] /= sumw;\r\n weights[3] /= sumw;\r\n }\r\n\r\n const v0LocalPositionX = v0.localPositionOverride ? v0.localPositionOverride[0] : (localPositions?.[v0.vertexIdx] ?? 0);\r\n const v0LocalPositionY = v0.localPositionOverride ? v0.localPositionOverride[1] : (localPositions?.[v0.vertexIdx + 1] ?? 0);\r\n const v0LocalPositionZ = v0.localPositionOverride ? v0.localPositionOverride[2] : (localPositions?.[v0.vertexIdx + 2] ?? 0);\r\n\r\n const v1LocalPositionX = v1.localPositionOverride ? v1.localPositionOverride[0] : (localPositions?.[v1.vertexIdx] ?? 0);\r\n const v1LocalPositionY = v1.localPositionOverride ? v1.localPositionOverride[1] : (localPositions?.[v1.vertexIdx + 1] ?? 0);\r\n const v1LocalPositionZ = v1.localPositionOverride ? v1.localPositionOverride[2] : (localPositions?.[v1.vertexIdx + 2] ?? 0);\r\n\r\n const v0LocalNormalX = v0.localNormalOverride ? v0.localNormalOverride[0] : (localNormals?.[v0.vertexIdx] ?? 0);\r\n const v0LocalNormalY = v0.localNormalOverride ? v0.localNormalOverride[1] : (localNormals?.[v0.vertexIdx + 1] ?? 0);\r\n const v0LocalNormalZ = v0.localNormalOverride ? v0.localNormalOverride[2] : (localNormals?.[v0.vertexIdx + 2] ?? 0);\r\n\r\n const v1LocalNormalX = v1.localNormalOverride ? v1.localNormalOverride[0] : (localNormals?.[v1.vertexIdx] ?? 0);\r\n const v1LocalNormalY = v1.localNormalOverride ? v1.localNormalOverride[1] : (localNormals?.[v1.vertexIdx + 1] ?? 0);\r\n const v1LocalNormalZ = v1.localNormalOverride ? v1.localNormalOverride[2] : (localNormals?.[v1.vertexIdx + 2] ?? 0);\r\n\r\n const interpNormalX = v0LocalNormalX + (v1LocalNormalX - v0LocalNormalX) * clipFactor;\r\n const interpNormalY = v0LocalNormalY + (v1LocalNormalY - v0LocalNormalY) * clipFactor;\r\n const interpNormalZ = v0LocalNormalZ + (v1LocalNormalZ - v0LocalNormalZ) * clipFactor;\r\n\r\n const norm = Math.sqrt(interpNormalX * interpNormalX + interpNormalY * interpNormalY + interpNormalZ * interpNormalZ);\r\n\r\n return new DecalVertex(\r\n Vector3.Lerp(v0.position, v1.position, clipFactor),\r\n Vector3.Lerp(v0.normal, v1.normal, clipFactor).normalize(),\r\n Vector2.Lerp(v0.uv, v1.uv, clipFactor),\r\n -1,\r\n -1,\r\n localPositions\r\n ? [\r\n v0LocalPositionX + (v1LocalPositionX - v0LocalPositionX) * clipFactor,\r\n v0LocalPositionY + (v1LocalPositionY - v0LocalPositionY) * clipFactor,\r\n v0LocalPositionZ + (v1LocalPositionZ - v0LocalPositionZ) * clipFactor,\r\n ]\r\n : null,\r\n localNormals ? [interpNormalX / norm, interpNormalY / norm, interpNormalZ / norm] : null,\r\n indices,\r\n weights\r\n );\r\n };\r\n\r\n let clipResult: Nullable<DecalVertex[]> = null;\r\n\r\n if (vertices.length > 3) {\r\n clipResult = [] as DecalVertex[];\r\n }\r\n\r\n for (let index = 0; index < vertices.length; index += 3) {\r\n let total = 0;\r\n let nV1: Nullable<DecalVertex> = null;\r\n let nV2: Nullable<DecalVertex> = null;\r\n let nV3: Nullable<DecalVertex> = null;\r\n let nV4: Nullable<DecalVertex> = null;\r\n\r\n const d1 = Vector3.Dot(vertices[index].position, axis) - clipSize;\r\n const d2 = Vector3.Dot(vertices[index + 1].position, axis) - clipSize;\r\n const d3 = Vector3.Dot(vertices[index + 2].position, axis) - clipSize;\r\n\r\n const v1Out = d1 > 0;\r\n const v2Out = d2 > 0;\r\n const v3Out = d3 > 0;\r\n\r\n total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);\r\n\r\n switch (total) {\r\n case 0:\r\n if (vertices.length > 3) {\r\n clipResult!.push(vertices[index]);\r\n clipResult!.push(vertices[index + 1]);\r\n clipResult!.push(vertices[index + 2]);\r\n } else {\r\n clipResult = vertices;\r\n }\r\n break;\r\n case 1:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (v1Out) {\r\n nV1 = vertices[index + 1];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index], nV1);\r\n nV4 = clipVertices(vertices[index], nV2);\r\n }\r\n\r\n if (v2Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 2];\r\n nV3 = clipVertices(vertices[index + 1], nV1);\r\n nV4 = clipVertices(vertices[index + 1], nV2);\r\n\r\n clipResult.push(nV3);\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV1.clone());\r\n\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV4);\r\n break;\r\n }\r\n if (v3Out) {\r\n nV1 = vertices[index];\r\n nV2 = vertices[index + 1];\r\n nV3 = clipVertices(vertices[index + 2], nV1);\r\n nV4 = clipVertices(vertices[index + 2], nV2);\r\n }\r\n\r\n if (nV1 && nV2 && nV3 && nV4) {\r\n clipResult.push(nV1.clone());\r\n clipResult.push(nV2.clone());\r\n clipResult.push(nV3);\r\n\r\n clipResult.push(nV4);\r\n clipResult.push(nV3.clone());\r\n clipResult.push(nV2.clone());\r\n }\r\n break;\r\n case 2:\r\n clipResult = clipResult ?? new Array<DecalVertex>();\r\n if (!v1Out) {\r\n nV1 = vertices[index].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 1]);\r\n nV3 = clipVertices(nV1, vertices[index + 2]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v2Out) {\r\n nV1 = vertices[index + 1].clone();\r\n nV2 = clipVertices(nV1, vertices[index + 2]);\r\n nV3 = clipVertices(nV1, vertices[index]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n if (!v3Out) {\r\n nV1 = vertices[index + 2].clone();\r\n nV2 = clipVertices(nV1, vertices[index]);\r\n nV3 = clipVertices(nV1, vertices[index + 1]);\r\n clipResult.push(nV1);\r\n clipResult.push(nV2);\r\n clipResult.push(nV3);\r\n }\r\n break;\r\n case 3:\r\n break;\r\n }\r\n }\r\n\r\n return clipResult;\r\n };\r\n\r\n const sourceMeshAsMesh = sourceMesh instanceof Mesh ? sourceMesh : null;\r\n const matrixData = sourceMeshAsMesh?._thinInstanceDataStorage.matrixData;\r\n\r\n const numMatrices = sourceMeshAsMesh?.thinInstanceCount || 1;\r\n const thinInstanceMatrix = TmpVectors.Matrix[0];\r\n\r\n thinInstanceMatrix.copyFrom(Matrix.IdentityReadOnly);\r\n\r\n for (let m = 0; m < numMatrices; ++m) {\r\n if (sourceMeshAsMesh?.hasThinInstances && matrixData) {\r\n const ofst = m * 16;\r\n\r\n thinInstanceMatrix.setRowFromFloats(0, matrixData[ofst + 0], matrixData[ofst + 1], matrixData[ofst + 2], matrixData[ofst + 3]);\r\n thinInstanceMatrix.setRowFromFloats(1, matrixData[ofst + 4], matrixData[ofst + 5], matrixData[ofst + 6], matrixData[ofst + 7]);\r\n thinInstanceMatrix.setRowFromFloats(2, matrixData[ofst + 8], matrixData[ofst + 9], matrixData[ofst + 10], matrixData[ofst + 11]);\r\n thinInstanceMatrix.setRowFromFloats(3, matrixData[ofst + 12], matrixData[ofst + 13], matrixData[ofst + 14], matrixData[ofst + 15]);\r\n }\r\n\r\n // Matrix\r\n const decalWorldMatrix = Matrix.RotationYawPitchRoll(yaw, pitch, angle).multiply(Matrix.Translation(position.x, position.y, position.z));\r\n const inverseDecalWorldMatrix = Matrix.Invert(decalWorldMatrix);\r\n const meshWorldMatrix = sourceMesh.getWorldMatrix();\r\n const transformMatrix = thinInstanceMatrix.multiply(meshWorldMatrix).multiply(inverseDecalWorldMatrix);\r\n\r\n const oneFaceVertices = new Array<DecalVertex>(3);\r\n\r\n for (let index = 0; index < indices.length; index += 3) {\r\n let faceVertices: Nullable<DecalVertex[]> = oneFaceVertices;\r\n\r\n faceVertices[0] = extractDecalVector3(index, transformMatrix);\r\n faceVertices[1] = extractDecalVector3(index + 1, transformMatrix);\r\n faceVertices[2] = extractDecalVector3(index + 2, transformMatrix);\r\n\r\n if (options.cullBackFaces) {\r\n // If all the normals of the vertices of the face are pointing away from the view direction we discard the face.\r\n // As computations are done in the decal coordinate space, the viewDirection is (0,0,1), so when dot(vertexNormal, -viewDirection) <= 0 the vertex is culled\r\n if (-faceVertices[0].normal.z <= 0 && -faceVertices[1].normal.z <= 0 && -faceVertices[2].normal.z <= 0) {\r\n continue;\r\n }\r\n }\r\n\r\n // Clip\r\n faceVertices = clip(faceVertices, XpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, XnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, YpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, YnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, ZpAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n faceVertices = clip(faceVertices, ZnAxis);\r\n if (!faceVertices) {\r\n continue;\r\n }\r\n\r\n // Add UVs and get back to world\r\n for (let vIndex = 0; vIndex < faceVertices.length; vIndex++) {\r\n const vertex = faceVertices[vIndex];\r\n\r\n //TODO check for Int32Array | Uint32Array | Uint16Array\r\n vertexData.indices.push(currentVertexDataIndex);\r\n if (useLocalComputation) {\r\n if (vertex.localPositionOverride) {\r\n vertexData.positions[currentVertexDataIndex * 3] = vertex.localPositionOverride[0];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = vertex.localPositionOverride[1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = vertex.localPositionOverride[2];\r\n } else if (localPositions) {\r\n vertexData.positions[currentVertexDataIndex * 3] = localPositions[vertex.vertexIdx];\r\n vertexData.positions[currentVertexDataIndex * 3 + 1] = localPositions[vertex.vertexIdx + 1];\r\n vertexData.positions[currentVertexDataIndex * 3 + 2] = localPositions[vertex.vertexIdx + 2];\r\n }\r\n if (vertex.localNormalOverride) {\r\n vertexData.normals[currentVertexDataIndex * 3] = vertex.localNormalOverride[0];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = vertex.localNormalOverride[1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = vertex.localNormalOverride[2];\r\n } else if (localNormals) {\r\n vertexData.normals[currentVertexDataIndex * 3] = localNormals[vertex.vertexIdx];\r\n vertexData.normals[currentVertexDataIndex * 3 + 1] = localNormals[vertex.vertexIdx + 1];\r\n vertexData.normals[currentVertexDataIndex * 3 + 2] = localNormals[vertex.vertexIdx + 2];\r\n }\r\n } else {\r\n vertex.position.toArray(vertexData.positions, currentVertexDataIndex * 3);\r\n vertex.normal.toArray(vertexData.normals, currentVertexDataIndex * 3);\r\n }\r\n if (vertexData.matricesIndices && vertexData.matricesWeights) {\r\n if (vertex.matrixIndicesOverride) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = vertex.matrixIndicesOverride[0];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = vertex.matrixIndicesOverride[1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = vertex.matrixIndicesOverride[2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = vertex.matrixIndicesOverride[3];\r\n } else {\r\n if (matIndices) {\r\n vertexData.matricesIndices[currentVertexDataIndex * 4] = matIndices[vertex.vertexIdxForBones];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 1] = matIndices[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 2] = matIndices[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndices[currentVertexDataIndex * 4 + 3] = matIndices[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matIndicesExtra && vertexData.matricesIndicesExtra) {\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4] = matIndicesExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 1] = matIndicesExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 2] = matIndicesExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesIndicesExtra[currentVertexDataIndex * 4 + 3] = matIndicesExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n if (vertex.matrixWeightsOverride) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = vertex.matrixWeightsOverride[0];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = vertex.matrixWeightsOverride[1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = vertex.matrixWeightsOverride[2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = vertex.matrixWeightsOverride[3];\r\n } else {\r\n if (matWeights) {\r\n vertexData.matricesWeights[currentVertexDataIndex * 4] = matWeights[vertex.vertexIdxForBones];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 1] = matWeights[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 2] = matWeights[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeights[currentVertexDataIndex * 4 + 3] = matWeights[vertex.vertexIdxForBones + 3];\r\n }\r\n if (matWeightsExtra && vertexData.matricesWeightsExtra) {\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4] = matWeightsExtra[vertex.vertexIdxForBones];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 1] = matWeightsExtra[vertex.vertexIdxForBones + 1];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 2] = matWeightsExtra[vertex.vertexIdxForBones + 2];\r\n vertexData.matricesWeightsExtra[currentVertexDataIndex * 4 + 3] = matWeightsExtra[vertex.vertexIdxForBones + 3];\r\n }\r\n }\r\n }\r\n\r\n if (!options.captureUVS) {\r\n vertexData.uvs.push(0.5 + vertex.position.x / size.x);\r\n const v = 0.5 + vertex.position.y / size.y;\r\n vertexData.uvs.push(useOpenGLOrientationForUV ? 1 - v : v);\r\n } else {\r\n vertex.uv.toArray(vertexData.uvs, currentVertexDataIndex * 2);\r\n }\r\n currentVertexDataIndex++;\r\n }\r\n }\r\n }\r\n\r\n // Avoid the \"Setting vertex data kind 'XXX' with an empty array\" warning when calling vertexData.applyToMesh\r\n if (vertexData.indices.length === 0) {\r\n vertexData.indices = null;\r\n }\r\n if (vertexData.positions.length === 0) {\r\n vertexData.positions = null;\r\n }\r\n if (vertexData.normals.length === 0) {\r\n vertexData.normals = null;\r\n }\r\n if (vertexData.uvs.length === 0) {\r\n vertexData.uvs = null;\r\n }\r\n if (vertexData.matricesIndices?.length === 0) {\r\n vertexData.matricesIndices = null;\r\n }\r\n if (vertexData.matricesWeights?.length === 0) {\r\n vertexData.matricesWeights = null;\r\n }\r\n if (vertexData.matricesIndicesExtra?.length === 0) {\r\n vertexData.matricesIndicesExtra = null;\r\n }\r\n if (vertexData.matricesWeightsExtra?.length === 0) {\r\n vertexData.matricesWeightsExtra = null;\r\n }\r\n\r\n // Return mesh\r\n const decal = new Mesh(name, sourceMesh.getScene());\r\n vertexData.applyToMesh(decal);\r\n\r\n if (useLocalComputation) {\r\n decal.skeleton = sourceMesh.skeleton;\r\n decal.parent = sourceMesh;\r\n } else {\r\n decal.position = position.clone();\r\n decal.rotation = new Vector3(pitch, yaw, angle);\r\n }\r\n\r\n decal.computeWorldMatrix(true);\r\n decal.refreshBoundingInfo(true, true);\r\n\r\n return decal;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use the function directly from the module\r\n */\r\nexport const DecalBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateDecal,\r\n};\r\n\r\nMesh.CreateDecal = (name: string, sourceMesh: AbstractMesh, position: Vector3, normal: Vector3, size: Vector3, angle: number): Mesh => {\r\n const options = {\r\n position,\r\n normal,\r\n size,\r\n angle,\r\n };\r\n\r\n return CreateDecal(name, sourceMesh, options);\r\n};\r\n"]}
@@ -12,7 +12,6 @@ import { useOpenGLOrientationForUV } from "../../Compat/compatibilityOptions.js"
12
12
  * * 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)
13
13
  * @returns the VertexData of the box
14
14
  */
15
- // eslint-disable-next-line @typescript-eslint/naming-convention
16
15
  export function CreateDiscVertexData(options) {
17
16
  const positions = [];
18
17
  const indices = [];
@@ -1 +1 @@
1
- {"version":3,"file":"discBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/discBuilder.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\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\n/**\r\n * Creates the VertexData of the Disc or regular Polygon\r\n * @param options an object used to set the following optional parameters for the disc, required but can be empty\r\n * * radius the radius of the disc, optional default 0.5\r\n * * tessellation the number of polygon sides, optional, default 64\r\n * * arc a number from 0 to 1, to create an unclosed polygon based on the fraction of the circumference given by the arc value, optional, default 1\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\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 box\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function CreateDiscVertexData(options: {\r\n radius?: number;\r\n tessellation?: number;\r\n arc?: number;\r\n sideOrientation?: number;\r\n frontUVs?: Vector4;\r\n backUVs?: Vector4;\r\n}): VertexData {\r\n const positions: number[] = [];\r\n const indices: number[] = [];\r\n const normals: number[] = [];\r\n const uvs: number[] = [];\r\n\r\n const radius = options.radius || 0.5;\r\n const tessellation = options.tessellation || 64;\r\n const arc: number = options.arc && (options.arc <= 0 || options.arc > 1) ? 1.0 : options.arc || 1.0;\r\n const sideOrientation = options.sideOrientation === 0 ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n // positions and uvs\r\n positions.push(0, 0, 0); // disc center first\r\n uvs.push(0.5, 0.5);\r\n\r\n const theta = Math.PI * 2 * arc;\r\n const step = arc === 1 ? theta / tessellation : theta / (tessellation - 1);\r\n let a = 0;\r\n for (let t = 0; t < tessellation; t++) {\r\n const x = Math.cos(a);\r\n const y = Math.sin(a);\r\n const u = (x + 1) / 2;\r\n const v = (1 - y) / 2;\r\n positions.push(radius * x, radius * y, 0);\r\n uvs.push(u, useOpenGLOrientationForUV ? 1 - v : v);\r\n a += step;\r\n }\r\n if (arc === 1) {\r\n positions.push(positions[3], positions[4], positions[5]); // close the circle\r\n uvs.push(uvs[2], useOpenGLOrientationForUV ? 1 - uvs[3] : uvs[3]);\r\n }\r\n\r\n //indices\r\n const vertexNb = positions.length / 3;\r\n for (let i = 1; i < vertexNb - 1; i++) {\r\n indices.push(i + 1, 0, i);\r\n }\r\n\r\n // result\r\n VertexData.ComputeNormals(positions, indices, normals);\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\r\n\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 plane polygonal mesh. By default, this is a disc\r\n * * The parameter `radius` sets the radius size (float) of the polygon (default 0.5)\r\n * * The parameter `tessellation` sets the number of polygon sides (positive integer, default 64). So a tessellation valued to 3 will build a triangle, to 4 a square, etc\r\n * * You can create an unclosed polygon with the parameter `arc` (positive float, default 1), valued between 0 and 1, what is the ratio of the circumference : 2 x PI x ratio\r\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\r\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#side-orientation\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\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 scene defines the hosting scene\r\n * @returns the plane polygonal mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#disc-or-regular-polygon\r\n */\r\nexport function CreateDisc(\r\n name: string,\r\n options: { radius?: number; tessellation?: number; arc?: number; updatable?: boolean; sideOrientation?: number; frontUVs?: Vector4; backUVs?: Vector4 } = {},\r\n scene: Nullable<Scene> = null\r\n): Mesh {\r\n const disc = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n disc._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n const vertexData = CreateDiscVertexData(options);\r\n\r\n vertexData.applyToMesh(disc, options.updatable);\r\n\r\n return disc;\r\n}\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated please use CreateDisc directly\r\n */\r\nexport const DiscBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateDisc,\r\n};\r\n\r\nVertexData.CreateDisc = CreateDiscVertexData;\r\n\r\nMesh.CreateDisc = (name: string, radius: number, tessellation: number, scene: Nullable<Scene> = null, updatable?: boolean, sideOrientation?: number): Mesh => {\r\n const options = {\r\n radius,\r\n tessellation,\r\n sideOrientation,\r\n updatable,\r\n };\r\n\r\n return CreateDisc(name, options, scene);\r\n};\r\n"]}
1
+ {"version":3,"file":"discBuilder.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/discBuilder.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\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\n/**\r\n * Creates the VertexData of the Disc or regular Polygon\r\n * @param options an object used to set the following optional parameters for the disc, required but can be empty\r\n * * radius the radius of the disc, optional default 0.5\r\n * * tessellation the number of polygon sides, optional, default 64\r\n * * arc a number from 0 to 1, to create an unclosed polygon based on the fraction of the circumference given by the arc value, optional, default 1\r\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\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 box\r\n */\r\nexport function CreateDiscVertexData(options: {\r\n radius?: number;\r\n tessellation?: number;\r\n arc?: number;\r\n sideOrientation?: number;\r\n frontUVs?: Vector4;\r\n backUVs?: Vector4;\r\n}): VertexData {\r\n const positions: number[] = [];\r\n const indices: number[] = [];\r\n const normals: number[] = [];\r\n const uvs: number[] = [];\r\n\r\n const radius = options.radius || 0.5;\r\n const tessellation = options.tessellation || 64;\r\n const arc: number = options.arc && (options.arc <= 0 || options.arc > 1) ? 1.0 : options.arc || 1.0;\r\n const sideOrientation = options.sideOrientation === 0 ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n // positions and uvs\r\n positions.push(0, 0, 0); // disc center first\r\n uvs.push(0.5, 0.5);\r\n\r\n const theta = Math.PI * 2 * arc;\r\n const step = arc === 1 ? theta / tessellation : theta / (tessellation - 1);\r\n let a = 0;\r\n for (let t = 0; t < tessellation; t++) {\r\n const x = Math.cos(a);\r\n const y = Math.sin(a);\r\n const u = (x + 1) / 2;\r\n const v = (1 - y) / 2;\r\n positions.push(radius * x, radius * y, 0);\r\n uvs.push(u, useOpenGLOrientationForUV ? 1 - v : v);\r\n a += step;\r\n }\r\n if (arc === 1) {\r\n positions.push(positions[3], positions[4], positions[5]); // close the circle\r\n uvs.push(uvs[2], useOpenGLOrientationForUV ? 1 - uvs[3] : uvs[3]);\r\n }\r\n\r\n //indices\r\n const vertexNb = positions.length / 3;\r\n for (let i = 1; i < vertexNb - 1; i++) {\r\n indices.push(i + 1, 0, i);\r\n }\r\n\r\n // result\r\n VertexData.ComputeNormals(positions, indices, normals);\r\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\r\n\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 plane polygonal mesh. By default, this is a disc\r\n * * The parameter `radius` sets the radius size (float) of the polygon (default 0.5)\r\n * * The parameter `tessellation` sets the number of polygon sides (positive integer, default 64). So a tessellation valued to 3 will build a triangle, to 4 a square, etc\r\n * * You can create an unclosed polygon with the parameter `arc` (positive float, default 1), valued between 0 and 1, what is the ratio of the circumference : 2 x PI x ratio\r\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\r\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#side-orientation\r\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created\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 scene defines the hosting scene\r\n * @returns the plane polygonal mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#disc-or-regular-polygon\r\n */\r\nexport function CreateDisc(\r\n name: string,\r\n options: { radius?: number; tessellation?: number; arc?: number; updatable?: boolean; sideOrientation?: number; frontUVs?: Vector4; backUVs?: Vector4 } = {},\r\n scene: Nullable<Scene> = null\r\n): Mesh {\r\n const disc = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n disc._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n const vertexData = CreateDiscVertexData(options);\r\n\r\n vertexData.applyToMesh(disc, options.updatable);\r\n\r\n return disc;\r\n}\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated please use CreateDisc directly\r\n */\r\nexport const DiscBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateDisc,\r\n};\r\n\r\nVertexData.CreateDisc = CreateDiscVertexData;\r\n\r\nMesh.CreateDisc = (name: string, radius: number, tessellation: number, scene: Nullable<Scene> = null, updatable?: boolean, sideOrientation?: number): Mesh => {\r\n const options = {\r\n radius,\r\n tessellation,\r\n sideOrientation,\r\n updatable,\r\n };\r\n\r\n return CreateDisc(name, options, scene);\r\n};\r\n"]}
@@ -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