@onerjs/core 8.54.2 → 8.54.3
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.
- package/Animations/animatable.core.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSoundSource.d.ts +26 -0
- package/AudioV2/abstractAudio/abstractSoundSource.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.js +2 -0
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioSoundSource.d.ts +16 -0
- package/AudioV2/webAudio/webAudioSoundSource.js +43 -1
- package/AudioV2/webAudio/webAudioSoundSource.js.map +1 -1
- package/Bones/skeleton.functions.js +1 -1
- package/Bones/skeleton.functions.js.map +1 -1
- package/Cameras/inputMapper.js.map +1 -1
- package/Debug/physicsViewer.pure.js +1 -1
- package/Debug/physicsViewer.pure.js.map +1 -1
- package/Engines/Extensions/engine.alphaToCoverage.d.ts +6 -0
- package/Engines/Extensions/engine.alphaToCoverage.js +9 -0
- package/Engines/Extensions/engine.alphaToCoverage.js.map +1 -0
- package/Engines/Extensions/engine.alphaToCoverage.pure.d.ts +6 -0
- package/Engines/Extensions/engine.alphaToCoverage.pure.js +54 -0
- package/Engines/Extensions/engine.alphaToCoverage.pure.js.map +1 -0
- package/Engines/Extensions/engine.alphaToCoverage.types.d.ts +21 -0
- package/Engines/Extensions/engine.alphaToCoverage.types.js +2 -0
- package/Engines/Extensions/engine.alphaToCoverage.types.js.map +1 -0
- package/Engines/Extensions/index.d.ts +1 -0
- package/Engines/Extensions/index.js +1 -0
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/Extensions/pure.d.ts +1 -0
- package/Engines/Extensions/pure.js +1 -0
- package/Engines/Extensions/pure.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +6 -4
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +1 -0
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.d.ts +6 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.js +9 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.js.map +1 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.d.ts +6 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.js +34 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.pure.js.map +1 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.d.ts +16 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.js +2 -0
- package/Engines/WebGPU/Extensions/engine.alphaToCoverage.types.js.map +1 -0
- package/Engines/WebGPU/Extensions/index.d.ts +1 -0
- package/Engines/WebGPU/Extensions/index.js +1 -0
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/pure.d.ts +1 -0
- package/Engines/WebGPU/Extensions/pure.js +1 -0
- package/Engines/WebGPU/Extensions/pure.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +0 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +0 -15
- package/Engines/abstractEngine.pure.js +2 -23
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +2 -2
- package/Engines/engine.js +1 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engine.pure.js +1 -1
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +0 -11
- package/Engines/thinEngine.pure.js +0 -19
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +2 -0
- package/Engines/webgpuEngine.js +2 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +0 -5
- package/Engines/webgpuEngine.pure.js +1 -10
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/Loading/loadingScreen.pure.js +2 -0
- package/Loading/loadingScreen.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js.map +1 -1
- package/Materials/Textures/ktx2decoderTypes.d.ts +14 -3
- package/Materials/Textures/ktx2decoderTypes.js +2 -0
- package/Materials/Textures/ktx2decoderTypes.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.functions.d.ts +29 -0
- package/Materials/Textures/rawTexture2DArray.functions.js +71 -0
- package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
- package/Materials/material.pure.d.ts +1 -0
- package/Materials/material.pure.js +1 -0
- package/Materials/material.pure.js.map +1 -1
- package/Meshes/Builders/pure.d.ts +2 -2
- package/Meshes/Builders/pure.js +2 -2
- package/Meshes/Builders/pure.js.map +1 -1
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.d.ts +1 -83
- package/Meshes/Builders/tiledBoxBuilder.js +3 -215
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.pure.d.ts +89 -0
- package/Meshes/Builders/tiledBoxBuilder.pure.js +229 -0
- package/Meshes/Builders/tiledBoxBuilder.pure.js.map +1 -0
- package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -79
- package/Meshes/Builders/tiledPlaneBuilder.js +3 -429
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.pure.d.ts +85 -0
- package/Meshes/Builders/tiledPlaneBuilder.pure.js +442 -0
- package/Meshes/Builders/tiledPlaneBuilder.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +29 -9
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/Node/Blocks/bevelBlock.pure.js.map +1 -1
- package/Meshes/meshBuilder.d.ts +21 -57
- package/Meshes/meshBuilder.js +21 -58
- package/Meshes/meshBuilder.js.map +1 -1
- package/Meshes/meshBuilder.pure.d.ts +58 -0
- package/Meshes/meshBuilder.pure.js +60 -0
- package/Meshes/meshBuilder.pure.js.map +1 -0
- package/Meshes/pure.d.ts +1 -1
- package/Meshes/pure.js +1 -1
- package/Meshes/pure.js.map +1 -1
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/khronosTextureContainer2.d.ts +10 -0
- package/Misc/khronosTextureContainer2.js +23 -12
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/perfCounter.d.ts +2 -0
- package/Misc/perfCounter.js +17 -2
- package/Misc/perfCounter.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -1
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.js +1 -1
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +3 -0
- package/PostProcesses/volumetricLightScatteringPostProcess.js +3 -0
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.d.ts +1 -0
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +25 -6
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrDielectricReflectance.js +6 -6
- package/Shaders/ShadersInclude/openpbrDielectricReflectance.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/depthPrePass.js +2 -0
- package/ShadersWGSL/ShadersInclude/depthPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js +7 -8
- package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +3 -0
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +3 -0
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +3 -0
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/volumetricLightScattering.fragment.d.ts +5 -0
- package/ShadersWGSL/volumetricLightScattering.fragment.js +20 -0
- package/ShadersWGSL/volumetricLightScattering.fragment.js.map +1 -0
- package/ShadersWGSL/volumetricLightScatteringPass.fragment.d.ts +5 -0
- package/ShadersWGSL/volumetricLightScatteringPass.fragment.js +24 -0
- package/ShadersWGSL/volumetricLightScatteringPass.fragment.js.map +1 -0
- package/ShadersWGSL/volumetricLightScatteringPass.vertex.d.ts +5 -0
- package/ShadersWGSL/volumetricLightScatteringPass.vertex.js +67 -0
- package/ShadersWGSL/volumetricLightScatteringPass.vertex.js.map +1 -0
- package/SmartAssets/smartAssetManager.pure.js +9 -1
- package/SmartAssets/smartAssetManager.pure.js.map +1 -1
- package/States/alphaCullingState.d.ts +0 -9
- package/States/alphaCullingState.js +4 -31
- package/States/alphaCullingState.js.map +1 -1
- package/XR/features/WebXRLayers.pure.js +4 -4
- package/XR/features/WebXRLayers.pure.js.map +1 -1
- package/node.d.ts +18 -1
- package/node.js +52 -1
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/types.js.map +1 -1
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/** This file must only contain pure code and pure imports */
|
|
2
|
+
import { Matrix, Vector3, Vector4 } from "../../Maths/math.vector.pure.js";
|
|
3
|
+
import { Color4 } from "../../Maths/math.color.pure.js";
|
|
4
|
+
import { Mesh } from "../mesh.pure.js";
|
|
5
|
+
import { VertexData } from "../mesh.vertexData.js";
|
|
6
|
+
import { CreateTiledPlaneVertexData, RegisterTiledPlaneBuilder } from "./tiledPlaneBuilder.pure.js";
|
|
7
|
+
import { useOpenGLOrientationForUV } from "../../Compat/compatibilityOptions.js";
|
|
8
|
+
const OP_ADD = 1;
|
|
9
|
+
const OP_SUB = -1;
|
|
10
|
+
/**
|
|
11
|
+
* Creates the VertexData for a tiled box
|
|
12
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_box
|
|
13
|
+
* @param options an object used to set the following optional parameters for the tiled box, required but can be empty
|
|
14
|
+
* * pattern sets the rotation or reflection pattern for the tiles,
|
|
15
|
+
* * size of the box
|
|
16
|
+
* * width of the box, overwrites size
|
|
17
|
+
* * height of the box, overwrites size
|
|
18
|
+
* * depth of the box, overwrites size
|
|
19
|
+
* * tileSize sets the size of a tile
|
|
20
|
+
* * tileWidth sets the tile width and overwrites tileSize
|
|
21
|
+
* * tileHeight sets the tile width and overwrites tileSize
|
|
22
|
+
* * faceUV an array of 6 Vector4 elements used to set different images to each box side
|
|
23
|
+
* * faceColors an array of 6 Color4 elements used to set different colors to each box side
|
|
24
|
+
* * alignHorizontal places whole tiles aligned to the center, left or right of a row
|
|
25
|
+
* * alignVertical places whole tiles aligned to the center, left or right of a column
|
|
26
|
+
* * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
|
|
27
|
+
* @returns the VertexData of the TiledBox
|
|
28
|
+
*/
|
|
29
|
+
export function CreateTiledBoxVertexData(options) {
|
|
30
|
+
const nbFaces = 6;
|
|
31
|
+
const faceUV = options.faceUV || new Array(6);
|
|
32
|
+
const faceColors = options.faceColors;
|
|
33
|
+
const flipTile = options.pattern || Mesh.NO_FLIP;
|
|
34
|
+
const width = options.width || options.size || 1;
|
|
35
|
+
const height = options.height || options.size || 1;
|
|
36
|
+
const depth = options.depth || options.size || 1;
|
|
37
|
+
const tileWidth = options.tileWidth || options.tileSize || 1;
|
|
38
|
+
const tileHeight = options.tileHeight || options.tileSize || 1;
|
|
39
|
+
const alignH = options.alignHorizontal || 0;
|
|
40
|
+
const alignV = options.alignVertical || 0;
|
|
41
|
+
const sideOrientation = options.sideOrientation === 0 ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;
|
|
42
|
+
// default face colors and UV if undefined
|
|
43
|
+
for (let f = 0; f < nbFaces; f++) {
|
|
44
|
+
if (faceUV[f] === undefined) {
|
|
45
|
+
faceUV[f] = new Vector4(0, 0, 1, 1);
|
|
46
|
+
}
|
|
47
|
+
if (faceColors && faceColors[f] === undefined) {
|
|
48
|
+
faceColors[f] = new Color4(1, 1, 1, 1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const halfWidth = width / 2;
|
|
52
|
+
const halfHeight = height / 2;
|
|
53
|
+
const halfDepth = depth / 2;
|
|
54
|
+
const faceVertexData = [];
|
|
55
|
+
for (let f = 0; f < 2; f++) {
|
|
56
|
+
//front and back
|
|
57
|
+
faceVertexData[f] = CreateTiledPlaneVertexData({
|
|
58
|
+
pattern: flipTile,
|
|
59
|
+
tileWidth: tileWidth,
|
|
60
|
+
tileHeight: tileHeight,
|
|
61
|
+
width: width,
|
|
62
|
+
height: height,
|
|
63
|
+
alignVertical: alignV,
|
|
64
|
+
alignHorizontal: alignH,
|
|
65
|
+
sideOrientation: sideOrientation,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
for (let f = 2; f < 4; f++) {
|
|
69
|
+
//sides
|
|
70
|
+
faceVertexData[f] = CreateTiledPlaneVertexData({
|
|
71
|
+
pattern: flipTile,
|
|
72
|
+
tileWidth: tileWidth,
|
|
73
|
+
tileHeight: tileHeight,
|
|
74
|
+
width: depth,
|
|
75
|
+
height: height,
|
|
76
|
+
alignVertical: alignV,
|
|
77
|
+
alignHorizontal: alignH,
|
|
78
|
+
sideOrientation: sideOrientation,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
let baseAlignV = alignV;
|
|
82
|
+
if (alignV === Mesh.BOTTOM) {
|
|
83
|
+
baseAlignV = Mesh.TOP;
|
|
84
|
+
}
|
|
85
|
+
else if (alignV === Mesh.TOP) {
|
|
86
|
+
baseAlignV = Mesh.BOTTOM;
|
|
87
|
+
}
|
|
88
|
+
for (let f = 4; f < 6; f++) {
|
|
89
|
+
//top and bottom
|
|
90
|
+
faceVertexData[f] = CreateTiledPlaneVertexData({
|
|
91
|
+
pattern: flipTile,
|
|
92
|
+
tileWidth: tileWidth,
|
|
93
|
+
tileHeight: tileHeight,
|
|
94
|
+
width: width,
|
|
95
|
+
height: depth,
|
|
96
|
+
alignVertical: baseAlignV,
|
|
97
|
+
alignHorizontal: alignH,
|
|
98
|
+
sideOrientation: sideOrientation,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const positions = [];
|
|
102
|
+
const normals = [];
|
|
103
|
+
let uvs = [];
|
|
104
|
+
let indices = [];
|
|
105
|
+
const colors = [];
|
|
106
|
+
const facePositions = [];
|
|
107
|
+
const faceNormals = [];
|
|
108
|
+
const newFaceUV = [];
|
|
109
|
+
let lu;
|
|
110
|
+
let li = 0;
|
|
111
|
+
for (let f = 0; f < nbFaces; f++) {
|
|
112
|
+
const len = faceVertexData[f].positions.length;
|
|
113
|
+
facePositions[f] = [];
|
|
114
|
+
faceNormals[f] = [];
|
|
115
|
+
for (let p = 0; p < len / 3; p++) {
|
|
116
|
+
facePositions[f].push(new Vector3(faceVertexData[f].positions[3 * p], faceVertexData[f].positions[3 * p + 1], faceVertexData[f].positions[3 * p + 2]));
|
|
117
|
+
faceNormals[f].push(new Vector3(faceVertexData[f].normals[3 * p], faceVertexData[f].normals[3 * p + 1], faceVertexData[f].normals[3 * p + 2]));
|
|
118
|
+
}
|
|
119
|
+
// uvs
|
|
120
|
+
lu = faceVertexData[f].uvs.length;
|
|
121
|
+
newFaceUV[f] = [];
|
|
122
|
+
for (let i = 0; i < lu; i += 2) {
|
|
123
|
+
newFaceUV[f][i] = faceUV[f].x + (faceUV[f].z - faceUV[f].x) * faceVertexData[f].uvs[i];
|
|
124
|
+
newFaceUV[f][i + 1] = faceUV[f].y + (faceUV[f].w - faceUV[f].y) * faceVertexData[f].uvs[i + 1];
|
|
125
|
+
if (useOpenGLOrientationForUV) {
|
|
126
|
+
newFaceUV[f][i + 1] = 1.0 - newFaceUV[f][i + 1];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
uvs = uvs.concat(newFaceUV[f]);
|
|
130
|
+
indices = indices.concat(faceVertexData[f].indices.map((x) => x + li));
|
|
131
|
+
li += facePositions[f].length;
|
|
132
|
+
if (faceColors) {
|
|
133
|
+
const color = faceColors[f];
|
|
134
|
+
for (let p = 0; p < facePositions[f].length; p++) {
|
|
135
|
+
colors.push(color.r, color.g, color.b, color.a);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Define transforms for each face
|
|
140
|
+
const faceTransforms = [
|
|
141
|
+
// FRONT
|
|
142
|
+
{ m: Matrix.RotationY(Math.PI), t: new Vector3(0, 0, halfDepth), op: OP_ADD },
|
|
143
|
+
// BACK
|
|
144
|
+
{ m: Matrix.Identity(), t: new Vector3(0, 0, halfDepth), op: OP_SUB },
|
|
145
|
+
// RIGHT
|
|
146
|
+
{ m: Matrix.RotationY(-Math.PI / 2), t: new Vector3(halfWidth, 0, 0), op: OP_ADD },
|
|
147
|
+
// LEFT
|
|
148
|
+
{ m: Matrix.RotationY(Math.PI / 2), t: new Vector3(halfWidth, 0, 0), op: OP_SUB },
|
|
149
|
+
// TOP
|
|
150
|
+
{ m: Matrix.RotationX(Math.PI / 2), t: new Vector3(0, halfHeight, 0), op: OP_ADD },
|
|
151
|
+
// BOTTOM
|
|
152
|
+
{ m: Matrix.RotationX(-Math.PI / 2), t: new Vector3(0, halfHeight, 0), op: OP_SUB },
|
|
153
|
+
];
|
|
154
|
+
// Assemble positions and normals
|
|
155
|
+
for (let f = 0; f < nbFaces; f++) {
|
|
156
|
+
const { m, t, op } = faceTransforms[f];
|
|
157
|
+
for (const v of facePositions[f]) {
|
|
158
|
+
const p = Vector3.TransformCoordinates(v, m);
|
|
159
|
+
const final = op === OP_ADD ? p.add(t) : p.subtract(t);
|
|
160
|
+
positions.push(final.x, final.y, final.z);
|
|
161
|
+
}
|
|
162
|
+
for (const n of faceNormals[f]) {
|
|
163
|
+
const nn = Vector3.TransformNormal(n, m);
|
|
164
|
+
normals.push(nn.x, nn.y, nn.z);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Result
|
|
168
|
+
const vertexData = new VertexData();
|
|
169
|
+
vertexData.indices = indices;
|
|
170
|
+
vertexData.positions = positions;
|
|
171
|
+
vertexData.normals = normals;
|
|
172
|
+
vertexData.uvs = uvs;
|
|
173
|
+
if (faceColors) {
|
|
174
|
+
const totalColors = sideOrientation === VertexData.DOUBLESIDE ? colors.concat(colors) : colors;
|
|
175
|
+
vertexData.colors = totalColors;
|
|
176
|
+
}
|
|
177
|
+
return vertexData;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Creates a tiled box mesh
|
|
181
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_box
|
|
182
|
+
* @param name defines the name of the mesh
|
|
183
|
+
* @param options an object used to set the following optional parameters for the tiled box, required but can be empty
|
|
184
|
+
* * pattern sets the rotation or reflection pattern for the tiles,
|
|
185
|
+
* * size of the box
|
|
186
|
+
* * width of the box, overwrites size
|
|
187
|
+
* * height of the box, overwrites size
|
|
188
|
+
* * depth of the box, overwrites size
|
|
189
|
+
* * tileSize sets the size of a tile
|
|
190
|
+
* * tileWidth sets the tile width and overwrites tileSize
|
|
191
|
+
* * tileHeight sets the tile width and overwrites tileSize
|
|
192
|
+
* * faceUV an array of 6 Vector4 elements used to set different images to each box side
|
|
193
|
+
* * faceColors an array of 6 Color3 elements used to set different colors to each box side
|
|
194
|
+
* * alignHorizontal places whole tiles aligned to the center, left or right of a row
|
|
195
|
+
* * alignVertical places whole tiles aligned to the center, left or right of a column
|
|
196
|
+
* * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
|
|
197
|
+
* @param scene defines the hosting scene
|
|
198
|
+
* @returns the box mesh
|
|
199
|
+
*/
|
|
200
|
+
export function CreateTiledBox(name, options, scene = null) {
|
|
201
|
+
const box = new Mesh(name, scene);
|
|
202
|
+
options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);
|
|
203
|
+
box._originalBuilderSideOrientation = options.sideOrientation;
|
|
204
|
+
const vertexData = CreateTiledBoxVertexData(options);
|
|
205
|
+
vertexData.applyToMesh(box, options.updatable);
|
|
206
|
+
return box;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Class containing static functions to help procedurally build meshes
|
|
210
|
+
* @deprecated use CreateTiledBox instead
|
|
211
|
+
*/
|
|
212
|
+
export const TiledBoxBuilder = {
|
|
213
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
214
|
+
CreateTiledBox,
|
|
215
|
+
};
|
|
216
|
+
let _Registered = false;
|
|
217
|
+
/**
|
|
218
|
+
* Register side effects for the tiled box builder.
|
|
219
|
+
* Safe to call multiple times; only the first call has an effect.
|
|
220
|
+
*/
|
|
221
|
+
export function RegisterTiledBoxBuilder() {
|
|
222
|
+
if (_Registered) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
_Registered = true;
|
|
226
|
+
RegisterTiledPlaneBuilder();
|
|
227
|
+
VertexData.CreateTiledBox = CreateTiledBoxVertexData;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=tiledBoxBuilder.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiledBoxBuilder.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Builders/tiledBoxBuilder.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { Matrix, Vector3, Vector4 } from \"../../Maths/math.vector.pure\";\r\nimport { Color4 } from \"../../Maths/math.color.pure\";\r\nimport { Mesh } from \"../mesh.pure\";\r\nimport { VertexData } from \"../mesh.vertexData\";\r\nimport { CreateTiledPlaneVertexData, RegisterTiledPlaneBuilder } from \"./tiledPlaneBuilder.pure\";\r\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions\";\r\n\r\nconst OP_ADD = 1;\r\nconst OP_SUB = -1;\r\n\r\n/**\r\n * Creates the VertexData for a tiled box\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_box\r\n * @param options an object used to set the following optional parameters for the tiled box, required but can be empty\r\n * * pattern sets the rotation or reflection pattern for the tiles,\r\n * * size of the box\r\n * * width of the box, overwrites size\r\n * * height of the box, overwrites size\r\n * * depth of the box, overwrites size\r\n * * tileSize sets the size of a tile\r\n * * tileWidth sets the tile width and overwrites tileSize\r\n * * tileHeight sets the tile width and overwrites tileSize\r\n * * faceUV an array of 6 Vector4 elements used to set different images to each box side\r\n * * faceColors an array of 6 Color4 elements used to set different colors to each box side\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 * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * @returns the VertexData of the TiledBox\r\n */\r\nexport function CreateTiledBoxVertexData(options: {\r\n pattern?: number;\r\n size?: number;\r\n width?: number;\r\n height?: number;\r\n depth?: number;\r\n tileSize?: number;\r\n tileWidth?: number;\r\n tileHeight?: number;\r\n faceUV?: Vector4[];\r\n faceColors?: Color4[];\r\n alignHorizontal?: number;\r\n alignVertical?: number;\r\n sideOrientation?: number;\r\n}): VertexData {\r\n const nbFaces = 6;\r\n\r\n const faceUV: Vector4[] = options.faceUV || new Array<Vector4>(6);\r\n const faceColors = options.faceColors;\r\n\r\n const flipTile = options.pattern || Mesh.NO_FLIP;\r\n\r\n const width = options.width || options.size || 1;\r\n const height = options.height || options.size || 1;\r\n const depth = options.depth || options.size || 1;\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 sideOrientation = options.sideOrientation === 0 ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\r\n\r\n // default face colors and UV if undefined\r\n for (let f = 0; f < nbFaces; f++) {\r\n if (faceUV[f] === undefined) {\r\n faceUV[f] = new Vector4(0, 0, 1, 1);\r\n }\r\n if (faceColors && faceColors[f] === undefined) {\r\n faceColors[f] = new Color4(1, 1, 1, 1);\r\n }\r\n }\r\n\r\n const halfWidth = width / 2;\r\n const halfHeight = height / 2;\r\n const halfDepth = depth / 2;\r\n\r\n const faceVertexData: Array<VertexData> = [];\r\n\r\n for (let f = 0; f < 2; f++) {\r\n //front and back\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: width,\r\n height: height,\r\n alignVertical: alignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation,\r\n });\r\n }\r\n\r\n for (let f = 2; f < 4; f++) {\r\n //sides\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: depth,\r\n height: height,\r\n alignVertical: alignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation,\r\n });\r\n }\r\n\r\n let baseAlignV = alignV;\r\n if (alignV === Mesh.BOTTOM) {\r\n baseAlignV = Mesh.TOP;\r\n } else if (alignV === Mesh.TOP) {\r\n baseAlignV = Mesh.BOTTOM;\r\n }\r\n\r\n for (let f = 4; f < 6; f++) {\r\n //top and bottom\r\n faceVertexData[f] = CreateTiledPlaneVertexData({\r\n pattern: flipTile,\r\n tileWidth: tileWidth,\r\n tileHeight: tileHeight,\r\n width: width,\r\n height: depth,\r\n alignVertical: baseAlignV,\r\n alignHorizontal: alignH,\r\n sideOrientation: sideOrientation,\r\n });\r\n }\r\n\r\n const positions: Array<number> = [];\r\n const normals: Array<number> = [];\r\n let uvs: Array<number> = [];\r\n let indices: Array<number> = [];\r\n const colors: Array<number> = [];\r\n const facePositions: Array<Array<Vector3>> = [];\r\n const faceNormals: Array<Array<Vector3>> = [];\r\n\r\n const newFaceUV: Array<Array<number>> = [];\r\n let lu: number;\r\n\r\n let li: number = 0;\r\n\r\n for (let f = 0; f < nbFaces; f++) {\r\n const len = faceVertexData[f].positions!.length;\r\n facePositions[f] = [];\r\n faceNormals[f] = [];\r\n for (let p = 0; p < len / 3; p++) {\r\n facePositions[f].push(new Vector3(faceVertexData[f].positions![3 * p], faceVertexData[f].positions![3 * p + 1], faceVertexData[f].positions![3 * p + 2]));\r\n faceNormals[f].push(new Vector3(faceVertexData[f].normals![3 * p], faceVertexData[f].normals![3 * p + 1], faceVertexData[f].normals![3 * p + 2]));\r\n }\r\n // uvs\r\n lu = faceVertexData[f].uvs!.length;\r\n newFaceUV[f] = [];\r\n for (let i = 0; i < lu; i += 2) {\r\n newFaceUV[f][i] = faceUV[f].x + (faceUV[f].z - faceUV[f].x) * faceVertexData[f].uvs![i];\r\n newFaceUV[f][i + 1] = faceUV[f].y + (faceUV[f].w - faceUV[f].y) * faceVertexData[f].uvs![i + 1];\r\n\r\n if (useOpenGLOrientationForUV) {\r\n newFaceUV[f][i + 1] = 1.0 - newFaceUV[f][i + 1];\r\n }\r\n }\r\n uvs = uvs.concat(newFaceUV[f]);\r\n\r\n indices = indices.concat(<Array<number>>faceVertexData[f].indices!.map((x: number) => x + li));\r\n li += facePositions[f].length;\r\n if (faceColors) {\r\n const color = faceColors[f];\r\n for (let p = 0; p < facePositions[f].length; p++) {\r\n colors.push(color.r, color.g, color.b, color.a);\r\n }\r\n }\r\n }\r\n\r\n // Define transforms for each face\r\n const faceTransforms = [\r\n // FRONT\r\n { m: Matrix.RotationY(Math.PI), t: new Vector3(0, 0, halfDepth), op: OP_ADD },\r\n // BACK\r\n { m: Matrix.Identity(), t: new Vector3(0, 0, halfDepth), op: OP_SUB },\r\n // RIGHT\r\n { m: Matrix.RotationY(-Math.PI / 2), t: new Vector3(halfWidth, 0, 0), op: OP_ADD },\r\n // LEFT\r\n { m: Matrix.RotationY(Math.PI / 2), t: new Vector3(halfWidth, 0, 0), op: OP_SUB },\r\n // TOP\r\n { m: Matrix.RotationX(Math.PI / 2), t: new Vector3(0, halfHeight, 0), op: OP_ADD },\r\n // BOTTOM\r\n { m: Matrix.RotationX(-Math.PI / 2), t: new Vector3(0, halfHeight, 0), op: OP_SUB },\r\n ];\r\n\r\n // Assemble positions and normals\r\n for (let f = 0; f < nbFaces; f++) {\r\n const { m, t, op } = faceTransforms[f];\r\n\r\n for (const v of facePositions[f]) {\r\n const p = Vector3.TransformCoordinates(v, m);\r\n const final = op === OP_ADD ? p.add(t) : p.subtract(t);\r\n positions.push(final.x, final.y, final.z);\r\n }\r\n\r\n for (const n of faceNormals[f]) {\r\n const nn = Vector3.TransformNormal(n, m);\r\n normals.push(nn.x, nn.y, nn.z);\r\n }\r\n }\r\n\r\n // Result\r\n const vertexData = new VertexData();\r\n\r\n vertexData.indices = indices;\r\n vertexData.positions = positions;\r\n vertexData.normals = normals;\r\n vertexData.uvs = uvs;\r\n\r\n if (faceColors) {\r\n const totalColors = sideOrientation === VertexData.DOUBLESIDE ? colors.concat(colors) : colors;\r\n vertexData.colors = totalColors;\r\n }\r\n\r\n return vertexData;\r\n}\r\n\r\n/**\r\n * Creates a tiled box mesh\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_box\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 box, required but can be empty\r\n * * pattern sets the rotation or reflection pattern for the tiles,\r\n * * size of the box\r\n * * width of the box, overwrites size\r\n * * height of the box, overwrites size\r\n * * depth of the box, overwrites size\r\n * * tileSize sets the size of a tile\r\n * * tileWidth sets the tile width and overwrites tileSize\r\n * * tileHeight sets the tile width and overwrites tileSize\r\n * * faceUV an array of 6 Vector4 elements used to set different images to each box side\r\n * * faceColors an array of 6 Color3 elements used to set different colors to each box side\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 * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\r\n * @param scene defines the hosting scene\r\n * @returns the box mesh\r\n */\r\nexport function CreateTiledBox(\r\n name: string,\r\n options: {\r\n pattern?: number;\r\n width?: number;\r\n height?: number;\r\n depth?: number;\r\n tileSize?: number;\r\n tileWidth?: number;\r\n tileHeight?: number;\r\n alignHorizontal?: number;\r\n alignVertical?: number;\r\n faceUV?: Vector4[];\r\n faceColors?: Color4[];\r\n sideOrientation?: number;\r\n updatable?: boolean;\r\n },\r\n scene: Nullable<Scene> = null\r\n): Mesh {\r\n const box = new Mesh(name, scene);\r\n\r\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\r\n box._originalBuilderSideOrientation = options.sideOrientation;\r\n\r\n const vertexData = CreateTiledBoxVertexData(options);\r\n\r\n vertexData.applyToMesh(box, options.updatable);\r\n\r\n return box;\r\n}\r\n\r\n/**\r\n * Class containing static functions to help procedurally build meshes\r\n * @deprecated use CreateTiledBox instead\r\n */\r\nexport const TiledBoxBuilder = {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CreateTiledBox,\r\n};\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for the tiled box builder.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterTiledBoxBuilder(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterTiledPlaneBuilder();\r\n VertexData.CreateTiledBox = CreateTiledBoxVertexData;\r\n}\r\n"]}
|
|
@@ -1,79 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { type Scene } from "../../scene.js";
|
|
3
|
-
import { type Vector4 } from "../../Maths/math.vector.js";
|
|
4
|
-
import { Mesh } from "../mesh.pure.js";
|
|
5
|
-
import { VertexData } from "../mesh.vertexData.js";
|
|
6
|
-
/**
|
|
7
|
-
* Creates the VertexData for a tiled plane
|
|
8
|
-
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_plane
|
|
9
|
-
* @param options an object used to set the following optional parameters for the tiled plane, required but can be empty
|
|
10
|
-
* * pattern a limited pattern arrangement depending on the number
|
|
11
|
-
* * size of the box
|
|
12
|
-
* * width of the box, overwrites size
|
|
13
|
-
* * height of the box, overwrites size
|
|
14
|
-
* * tileSize sets the width, height and depth of the tile to the value of size, optional default 1
|
|
15
|
-
* * tileWidth sets the width (x direction) of the tile, overwrites the width set by size, optional, default size
|
|
16
|
-
* * tileHeight sets the height (y direction) of the tile, overwrites the height set by size, optional, default size
|
|
17
|
-
* * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
|
|
18
|
-
* * alignHorizontal places whole tiles aligned to the center, left or right of a row
|
|
19
|
-
* * alignVertical places whole tiles aligned to the center, left or right of a column
|
|
20
|
-
* * 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)
|
|
21
|
-
* * 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)
|
|
22
|
-
* @returns the VertexData of the tiled plane
|
|
23
|
-
*/
|
|
24
|
-
export declare function CreateTiledPlaneVertexData(options: {
|
|
25
|
-
pattern?: number;
|
|
26
|
-
tileSize?: number;
|
|
27
|
-
tileWidth?: number;
|
|
28
|
-
tileHeight?: number;
|
|
29
|
-
size?: number;
|
|
30
|
-
width?: number;
|
|
31
|
-
height?: number;
|
|
32
|
-
alignHorizontal?: number;
|
|
33
|
-
alignVertical?: number;
|
|
34
|
-
sideOrientation?: number;
|
|
35
|
-
frontUVs?: Vector4;
|
|
36
|
-
backUVs?: Vector4;
|
|
37
|
-
}): VertexData;
|
|
38
|
-
/**
|
|
39
|
-
* Creates a tiled plane mesh
|
|
40
|
-
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/tiled_plane
|
|
41
|
-
* @param name defines the name of the mesh
|
|
42
|
-
* @param options an object used to set the following optional parameters for the tiled plane, required but can be empty
|
|
43
|
-
* * pattern a limited pattern arrangement depending on the number
|
|
44
|
-
* * size of the box
|
|
45
|
-
* * width of the box, overwrites size
|
|
46
|
-
* * height of the box, overwrites size
|
|
47
|
-
* * tileSize sets the width, height and depth of the tile to the value of size, optional default 1
|
|
48
|
-
* * tileWidth sets the width (x direction) of the tile, overwrites the width set by size, optional, default size
|
|
49
|
-
* * tileHeight sets the height (y direction) of the tile, overwrites the height set by size, optional, default size
|
|
50
|
-
* * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE
|
|
51
|
-
* * alignHorizontal places whole tiles aligned to the center, left or right of a row
|
|
52
|
-
* * alignVertical places whole tiles aligned to the center, left or right of a column
|
|
53
|
-
* * 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)
|
|
54
|
-
* * 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)
|
|
55
|
-
* @param scene defines the hosting scene
|
|
56
|
-
* @returns the box mesh
|
|
57
|
-
*/
|
|
58
|
-
export declare function CreateTiledPlane(name: string, options: {
|
|
59
|
-
pattern?: number;
|
|
60
|
-
tileSize?: number;
|
|
61
|
-
tileWidth?: number;
|
|
62
|
-
tileHeight?: number;
|
|
63
|
-
size?: number;
|
|
64
|
-
width?: number;
|
|
65
|
-
height?: number;
|
|
66
|
-
alignHorizontal?: number;
|
|
67
|
-
alignVertical?: number;
|
|
68
|
-
sideOrientation?: number;
|
|
69
|
-
frontUVs?: Vector4;
|
|
70
|
-
backUVs?: Vector4;
|
|
71
|
-
updatable?: boolean;
|
|
72
|
-
}, scene?: Nullable<Scene>): Mesh;
|
|
73
|
-
/**
|
|
74
|
-
* Class containing static functions to help procedurally build meshes
|
|
75
|
-
* @deprecated use CreateTiledPlane instead
|
|
76
|
-
*/
|
|
77
|
-
export declare const TiledPlaneBuilder: {
|
|
78
|
-
CreateTiledPlane: typeof CreateTiledPlane;
|
|
79
|
-
};
|
|
1
|
+
export * from "./tiledPlaneBuilder.pure.js";
|