@rings-webgpu/core 1.0.26 → 1.0.27
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/dist/rings.es.js +213 -211
- package/dist/rings.es.js.map +3 -3
- package/dist/rings.es.max.js +930 -6
- package/dist/rings.umd.js +215 -213
- package/dist/rings.umd.js.map +3 -3
- package/dist/rings.umd.max.js +934 -5
- package/dist/types/index.d.ts +1 -0
- package/dist/types/loader/parser/ply/PlyLoader.d.ts +6 -2
- package/dist/types/loader/parser/ply/PlyParser.d.ts +7 -0
- package/dist/types/loader/parser/ply/PlyTypes.d.ts +25 -0
- package/package.json +1 -1
package/dist/rings.es.max.js
CHANGED
|
@@ -41425,7 +41425,7 @@ class PostProcessingComponent extends ComponentBase {
|
|
|
41425
41425
|
}
|
|
41426
41426
|
}
|
|
41427
41427
|
|
|
41428
|
-
const version = "1.0.
|
|
41428
|
+
const version = "1.0.26";
|
|
41429
41429
|
|
|
41430
41430
|
class Engine3D {
|
|
41431
41431
|
/**
|
|
@@ -59137,6 +59137,15 @@ function detectGSplatFormat(buffer) {
|
|
|
59137
59137
|
return "unknown" /* UNKNOWN */;
|
|
59138
59138
|
}
|
|
59139
59139
|
|
|
59140
|
+
var PlyMode = /* @__PURE__ */ ((PlyMode2) => {
|
|
59141
|
+
PlyMode2[PlyMode2["Splat"] = 0] = "Splat";
|
|
59142
|
+
PlyMode2[PlyMode2["PointCloud"] = 1] = "PointCloud";
|
|
59143
|
+
PlyMode2[PlyMode2["Mesh"] = 2] = "Mesh";
|
|
59144
|
+
return PlyMode2;
|
|
59145
|
+
})(PlyMode || {});
|
|
59146
|
+
const splatProperties = ["x", "y", "z", "scale_0", "scale_1", "scale_2", "opacity", "rot_0", "rot_1", "rot_2", "rot_3"];
|
|
59147
|
+
const splatColorProperties = ["red", "green", "blue", "f_dc_0", "f_dc_1", "f_dc_2"];
|
|
59148
|
+
|
|
59140
59149
|
function byteSizeOfType(t) {
|
|
59141
59150
|
switch (t) {
|
|
59142
59151
|
case "char":
|
|
@@ -59212,34 +59221,85 @@ function parsePlyHeader(buffer) {
|
|
|
59212
59221
|
const lines = headerText.split(/\r?\n/);
|
|
59213
59222
|
let format = "";
|
|
59214
59223
|
let vertexCount = 0;
|
|
59224
|
+
let faceCount = 0;
|
|
59215
59225
|
const properties = [];
|
|
59226
|
+
const faceProperties = [];
|
|
59227
|
+
const textureFiles = [];
|
|
59216
59228
|
let inVertexElement = false;
|
|
59229
|
+
let inFaceElement = false;
|
|
59217
59230
|
for (const line of lines) {
|
|
59218
59231
|
if (line.startsWith("format ")) {
|
|
59219
59232
|
format = line.split(/\s+/)[1];
|
|
59233
|
+
} else if (line.startsWith("comment TextureFile ")) {
|
|
59234
|
+
const texturePath = line.substring("comment TextureFile ".length).trim();
|
|
59235
|
+
if (texturePath) {
|
|
59236
|
+
textureFiles.push(texturePath);
|
|
59237
|
+
}
|
|
59220
59238
|
} else if (line.startsWith("element ")) {
|
|
59221
59239
|
const toks = line.split(/\s+/);
|
|
59222
59240
|
inVertexElement = toks[1] === "vertex";
|
|
59223
|
-
|
|
59241
|
+
inFaceElement = toks[1] === "face";
|
|
59242
|
+
if (inVertexElement) {
|
|
59243
|
+
vertexCount = parseInt(toks[2]);
|
|
59244
|
+
inFaceElement = false;
|
|
59245
|
+
}
|
|
59246
|
+
if (inFaceElement) {
|
|
59247
|
+
faceCount = parseInt(toks[2]);
|
|
59248
|
+
inVertexElement = false;
|
|
59249
|
+
}
|
|
59224
59250
|
} else if (inVertexElement && line.startsWith("property ")) {
|
|
59225
59251
|
const toks = line.split(/\s+/);
|
|
59226
59252
|
const type = toks[1];
|
|
59227
59253
|
const name = toks[2];
|
|
59228
59254
|
properties.push({ name, type });
|
|
59255
|
+
} else if (inFaceElement && line.startsWith("property ")) {
|
|
59256
|
+
const toks = line.split(/\s+/);
|
|
59257
|
+
if (toks[1] === "list") {
|
|
59258
|
+
const countType = toks[2];
|
|
59259
|
+
const itemType = toks[3];
|
|
59260
|
+
const name = toks[4];
|
|
59261
|
+
faceProperties.push({ name, type: `list ${countType} ${itemType}` });
|
|
59262
|
+
} else {
|
|
59263
|
+
const type = toks[1];
|
|
59264
|
+
const name = toks[2];
|
|
59265
|
+
faceProperties.push({ name, type });
|
|
59266
|
+
}
|
|
59229
59267
|
}
|
|
59230
59268
|
}
|
|
59231
|
-
if (format !== "binary_little_endian") {
|
|
59232
|
-
throw new Error(
|
|
59269
|
+
if (format !== "binary_little_endian" && format !== "ascii") {
|
|
59270
|
+
throw new Error(`PLY: Unsupported format: ${format}. Only binary_little_endian and ascii are supported.`);
|
|
59271
|
+
}
|
|
59272
|
+
let splatPropertyCount = 0;
|
|
59273
|
+
let splatPropertyColorCount = 0;
|
|
59274
|
+
for (const property of properties) {
|
|
59275
|
+
if (splatProperties.includes(property.name)) {
|
|
59276
|
+
splatPropertyCount++;
|
|
59277
|
+
}
|
|
59278
|
+
if (splatColorProperties.includes(property.name)) {
|
|
59279
|
+
splatPropertyColorCount++;
|
|
59280
|
+
}
|
|
59233
59281
|
}
|
|
59234
59282
|
return {
|
|
59235
59283
|
format,
|
|
59236
59284
|
vertexCount,
|
|
59285
|
+
faceCount,
|
|
59237
59286
|
properties,
|
|
59238
|
-
|
|
59287
|
+
faceProperties: faceProperties.length > 0 ? faceProperties : void 0,
|
|
59288
|
+
textureFiles,
|
|
59289
|
+
headerByteLength: headerText.length,
|
|
59290
|
+
mode: faceCount ? PlyMode.Mesh : splatPropertyCount === splatProperties.length && splatPropertyColorCount === 3 ? PlyMode.Splat : PlyMode.PointCloud
|
|
59239
59291
|
};
|
|
59240
59292
|
}
|
|
59241
59293
|
function parsePlyGaussianSplat(buffer) {
|
|
59242
59294
|
const header = parsePlyHeader(buffer);
|
|
59295
|
+
const { format } = header;
|
|
59296
|
+
if (format === "ascii") {
|
|
59297
|
+
return parsePlyGaussianSplatASCII(buffer, header);
|
|
59298
|
+
} else {
|
|
59299
|
+
return parsePlyGaussianSplatBinary(buffer, header);
|
|
59300
|
+
}
|
|
59301
|
+
}
|
|
59302
|
+
function parsePlyGaussianSplatBinary(buffer, header) {
|
|
59243
59303
|
const { vertexCount, properties, headerByteLength } = header;
|
|
59244
59304
|
const payload = new DataView(buffer, headerByteLength);
|
|
59245
59305
|
const has = (n) => properties.find((p) => p.name === n) != null;
|
|
@@ -59361,6 +59421,743 @@ function parsePlyGaussianSplat(buffer) {
|
|
|
59361
59421
|
sh: hasSH && shCoeffs ? { order: shOrder, coeffs: shCoeffs } : void 0
|
|
59362
59422
|
};
|
|
59363
59423
|
}
|
|
59424
|
+
function parsePlyGaussianSplatASCII(buffer, header) {
|
|
59425
|
+
const { vertexCount, properties } = header;
|
|
59426
|
+
const text = new TextDecoder("utf-8").decode(buffer);
|
|
59427
|
+
const headerEnd = text.indexOf("end_header");
|
|
59428
|
+
if (headerEnd < 0) {
|
|
59429
|
+
throw new Error("PLY: Invalid PLY header");
|
|
59430
|
+
}
|
|
59431
|
+
let bodyStart = headerEnd + "end_header".length;
|
|
59432
|
+
while (bodyStart < text.length && (text[bodyStart] === " " || text[bodyStart] === "\n" || text[bodyStart] === "\r")) {
|
|
59433
|
+
bodyStart++;
|
|
59434
|
+
}
|
|
59435
|
+
const bodyText = text.substring(bodyStart);
|
|
59436
|
+
const tokens = bodyText.split(/\s+/).filter((token) => token.length > 0);
|
|
59437
|
+
let tokenIndex = 0;
|
|
59438
|
+
const has = (n) => properties.find((p) => p.name === n) != null;
|
|
59439
|
+
const propIndex = (n) => properties.findIndex((p) => p.name === n);
|
|
59440
|
+
const parseASCIINumber = (type) => {
|
|
59441
|
+
if (tokenIndex >= tokens.length) {
|
|
59442
|
+
throw new Error("PLY: Unexpected end of file");
|
|
59443
|
+
}
|
|
59444
|
+
const value = tokens[tokenIndex++];
|
|
59445
|
+
switch (type) {
|
|
59446
|
+
case "char":
|
|
59447
|
+
case "uchar":
|
|
59448
|
+
case "short":
|
|
59449
|
+
case "ushort":
|
|
59450
|
+
case "int":
|
|
59451
|
+
case "uint":
|
|
59452
|
+
case "int8":
|
|
59453
|
+
case "uint8":
|
|
59454
|
+
case "int16":
|
|
59455
|
+
case "uint16":
|
|
59456
|
+
case "int32":
|
|
59457
|
+
case "uint32":
|
|
59458
|
+
return parseInt(value);
|
|
59459
|
+
case "float":
|
|
59460
|
+
case "double":
|
|
59461
|
+
case "float32":
|
|
59462
|
+
case "float64":
|
|
59463
|
+
return parseFloat(value);
|
|
59464
|
+
default:
|
|
59465
|
+
return parseFloat(value);
|
|
59466
|
+
}
|
|
59467
|
+
};
|
|
59468
|
+
const position = new Float32Array(vertexCount * 3);
|
|
59469
|
+
const scale = has("scale_0") ? new Float32Array(vertexCount * 3) : void 0;
|
|
59470
|
+
const rotation = has("rot_0") ? new Float32Array(vertexCount * 4) : void 0;
|
|
59471
|
+
const opacity = has("opacity") ? new Float32Array(vertexCount) : void 0;
|
|
59472
|
+
const dcIdx = [propIndex("f_dc_0"), propIndex("f_dc_1"), propIndex("f_dc_2")];
|
|
59473
|
+
const restIndices = [];
|
|
59474
|
+
for (let i = 0; i < properties.length; i++) {
|
|
59475
|
+
if (properties[i].name.startsWith("f_rest_")) restIndices.push(i);
|
|
59476
|
+
}
|
|
59477
|
+
const hasSH = dcIdx[0] >= 0 && dcIdx[1] >= 0 && dcIdx[2] >= 0;
|
|
59478
|
+
let shCoeffs = void 0;
|
|
59479
|
+
let shOrder = 0;
|
|
59480
|
+
if (hasSH) {
|
|
59481
|
+
const coeffsPerColor = 1 + restIndices.length / 3;
|
|
59482
|
+
shOrder = inferSHOrder(coeffsPerColor);
|
|
59483
|
+
shCoeffs = new Float32Array(vertexCount * coeffsPerColor * 3);
|
|
59484
|
+
}
|
|
59485
|
+
const ix = propIndex("x");
|
|
59486
|
+
const iy = propIndex("y");
|
|
59487
|
+
const iz = propIndex("z");
|
|
59488
|
+
if (ix < 0 || iy < 0 || iz < 0) {
|
|
59489
|
+
throw new Error("PLY: Missing x/y/z for vertex");
|
|
59490
|
+
}
|
|
59491
|
+
const s0 = scale ? propIndex("scale_0") : -1;
|
|
59492
|
+
const s1 = scale ? propIndex("scale_1") : -1;
|
|
59493
|
+
const s2 = scale ? propIndex("scale_2") : -1;
|
|
59494
|
+
const r0 = rotation ? propIndex("rot_0") : -1;
|
|
59495
|
+
const r1 = rotation ? propIndex("rot_1") : -1;
|
|
59496
|
+
const r2 = rotation ? propIndex("rot_2") : -1;
|
|
59497
|
+
const r3 = rotation ? propIndex("rot_3") : -1;
|
|
59498
|
+
const oi = opacity ? propIndex("opacity") : -1;
|
|
59499
|
+
for (let v = 0; v < vertexCount; v++) {
|
|
59500
|
+
for (let pIdx = 0; pIdx < properties.length; pIdx++) {
|
|
59501
|
+
const prop = properties[pIdx];
|
|
59502
|
+
const value = parseASCIINumber(prop.type);
|
|
59503
|
+
if (pIdx === ix) {
|
|
59504
|
+
position[v * 3 + 0] = value;
|
|
59505
|
+
} else if (pIdx === iy) {
|
|
59506
|
+
position[v * 3 + 1] = value;
|
|
59507
|
+
} else if (pIdx === iz) {
|
|
59508
|
+
position[v * 3 + 2] = value;
|
|
59509
|
+
}
|
|
59510
|
+
if (scale && pIdx === s0) {
|
|
59511
|
+
scale[v * 3 + 0] = value;
|
|
59512
|
+
} else if (scale && pIdx === s1) {
|
|
59513
|
+
scale[v * 3 + 1] = value;
|
|
59514
|
+
} else if (scale && pIdx === s2) {
|
|
59515
|
+
scale[v * 3 + 2] = value;
|
|
59516
|
+
}
|
|
59517
|
+
if (rotation && pIdx === r0) {
|
|
59518
|
+
rotation[v * 4 + 3] = value;
|
|
59519
|
+
} else if (rotation && pIdx === r1) {
|
|
59520
|
+
rotation[v * 4 + 0] = value;
|
|
59521
|
+
} else if (rotation && pIdx === r2) {
|
|
59522
|
+
rotation[v * 4 + 1] = value;
|
|
59523
|
+
} else if (rotation && pIdx === r3) {
|
|
59524
|
+
rotation[v * 4 + 2] = value;
|
|
59525
|
+
}
|
|
59526
|
+
if (opacity && pIdx === oi) {
|
|
59527
|
+
opacity[v] = value;
|
|
59528
|
+
}
|
|
59529
|
+
if (hasSH && shCoeffs) {
|
|
59530
|
+
const coeffsPerColor = 1 + restIndices.length / 3;
|
|
59531
|
+
const baseIndex = v * coeffsPerColor * 3;
|
|
59532
|
+
if (pIdx === dcIdx[0]) {
|
|
59533
|
+
shCoeffs[baseIndex + 0] = value;
|
|
59534
|
+
} else if (pIdx === dcIdx[1]) {
|
|
59535
|
+
shCoeffs[baseIndex + coeffsPerColor + 0] = value;
|
|
59536
|
+
} else if (pIdx === dcIdx[2]) {
|
|
59537
|
+
shCoeffs[baseIndex + 2 * coeffsPerColor + 0] = value;
|
|
59538
|
+
}
|
|
59539
|
+
for (let i = 0; i < restIndices.length; i += 3) {
|
|
59540
|
+
const ri = restIndices[i + 0];
|
|
59541
|
+
const gi = restIndices[i + 1];
|
|
59542
|
+
const bi = restIndices[i + 2];
|
|
59543
|
+
if (pIdx === ri) {
|
|
59544
|
+
shCoeffs[baseIndex + (i / 3 + 1)] = value;
|
|
59545
|
+
} else if (pIdx === gi) {
|
|
59546
|
+
shCoeffs[baseIndex + coeffsPerColor + (i / 3 + 1)] = value;
|
|
59547
|
+
} else if (pIdx === bi) {
|
|
59548
|
+
shCoeffs[baseIndex + 2 * coeffsPerColor + (i / 3 + 1)] = value;
|
|
59549
|
+
}
|
|
59550
|
+
}
|
|
59551
|
+
}
|
|
59552
|
+
}
|
|
59553
|
+
}
|
|
59554
|
+
return {
|
|
59555
|
+
vertexCount,
|
|
59556
|
+
position,
|
|
59557
|
+
scale,
|
|
59558
|
+
rotation,
|
|
59559
|
+
opacity,
|
|
59560
|
+
sh: hasSH && shCoeffs ? { order: shOrder, coeffs: shCoeffs } : void 0
|
|
59561
|
+
};
|
|
59562
|
+
}
|
|
59563
|
+
function parsePlyMesh(buffer) {
|
|
59564
|
+
const header = parsePlyHeader(buffer);
|
|
59565
|
+
const { format, vertexCount, faceCount, properties, faceProperties, textureFiles, headerByteLength } = header;
|
|
59566
|
+
if (format === "ascii") {
|
|
59567
|
+
return parsePlyMeshASCII(buffer, header);
|
|
59568
|
+
} else {
|
|
59569
|
+
return parsePlyMeshBinary(buffer, header);
|
|
59570
|
+
}
|
|
59571
|
+
}
|
|
59572
|
+
function parsePlyMeshBinary(buffer, header) {
|
|
59573
|
+
const { vertexCount, faceCount, properties, faceProperties, textureFiles, headerByteLength } = header;
|
|
59574
|
+
const payload = new DataView(buffer, headerByteLength);
|
|
59575
|
+
const has = (n) => properties.find((p) => p.name === n) != null;
|
|
59576
|
+
const propIndex = (n) => properties.findIndex((p) => p.name === n);
|
|
59577
|
+
const hasTexcoord = faceProperties?.some((p) => p.name === "texcoord") || false;
|
|
59578
|
+
const hasTexnumber = faceProperties?.some((p) => p.name === "texnumber") || false;
|
|
59579
|
+
faceProperties?.find((p) => p.name === "texcoord");
|
|
59580
|
+
faceProperties?.find((p) => p.name === "texnumber");
|
|
59581
|
+
const position = new Float32Array(vertexCount * 3);
|
|
59582
|
+
const hasNormalData = has("nx") && has("ny") && has("nz");
|
|
59583
|
+
const normal = hasNormalData ? new Float32Array(vertexCount * 3) : new Float32Array(vertexCount * 3);
|
|
59584
|
+
const color = (has("red") || has("r")) && (has("green") || has("g")) && (has("blue") || has("b")) ? new Float32Array(vertexCount * 3) : void 0;
|
|
59585
|
+
const hasVertexUV = (has("u") || has("s")) && (has("v") || has("t"));
|
|
59586
|
+
const uv = hasVertexUV || hasTexcoord ? new Float32Array(vertexCount * 2) : void 0;
|
|
59587
|
+
const faceTexcoords = /* @__PURE__ */ new Map();
|
|
59588
|
+
const faceTexnumbers = hasTexnumber ? new Array(faceCount) : [];
|
|
59589
|
+
const propOffsets = [];
|
|
59590
|
+
let stride = 0;
|
|
59591
|
+
for (const p of properties) {
|
|
59592
|
+
propOffsets.push(stride);
|
|
59593
|
+
stride += byteSizeOfType(p.type);
|
|
59594
|
+
}
|
|
59595
|
+
let base = 0;
|
|
59596
|
+
for (let v = 0; v < vertexCount; v++) {
|
|
59597
|
+
const vOffset = base;
|
|
59598
|
+
const ix = propIndex("x");
|
|
59599
|
+
const iy = propIndex("y");
|
|
59600
|
+
const iz = propIndex("z");
|
|
59601
|
+
if (ix < 0 || iy < 0 || iz < 0) {
|
|
59602
|
+
throw new Error("PLY: Missing x/y/z for vertex");
|
|
59603
|
+
}
|
|
59604
|
+
position[v * 3 + 0] = readByType(payload, vOffset + propOffsets[ix], properties[ix].type);
|
|
59605
|
+
position[v * 3 + 1] = readByType(payload, vOffset + propOffsets[iy], properties[iy].type);
|
|
59606
|
+
position[v * 3 + 2] = readByType(payload, vOffset + propOffsets[iz], properties[iz].type);
|
|
59607
|
+
if (hasNormalData) {
|
|
59608
|
+
const nx = propIndex("nx");
|
|
59609
|
+
const ny = propIndex("ny");
|
|
59610
|
+
const nz = propIndex("nz");
|
|
59611
|
+
normal[v * 3 + 0] = readByType(payload, vOffset + propOffsets[nx], properties[nx].type);
|
|
59612
|
+
normal[v * 3 + 1] = readByType(payload, vOffset + propOffsets[ny], properties[ny].type);
|
|
59613
|
+
normal[v * 3 + 2] = readByType(payload, vOffset + propOffsets[nz], properties[nz].type);
|
|
59614
|
+
}
|
|
59615
|
+
if (color) {
|
|
59616
|
+
const rIdx = propIndex("red") >= 0 ? propIndex("red") : propIndex("r");
|
|
59617
|
+
const gIdx = propIndex("green") >= 0 ? propIndex("green") : propIndex("g");
|
|
59618
|
+
const bIdx = propIndex("blue") >= 0 ? propIndex("blue") : propIndex("b");
|
|
59619
|
+
if (rIdx >= 0 && gIdx >= 0 && bIdx >= 0) {
|
|
59620
|
+
let r = readByType(payload, vOffset + propOffsets[rIdx], properties[rIdx].type);
|
|
59621
|
+
let g = readByType(payload, vOffset + propOffsets[gIdx], properties[gIdx].type);
|
|
59622
|
+
let b = readByType(payload, vOffset + propOffsets[bIdx], properties[bIdx].type);
|
|
59623
|
+
if (properties[rIdx].type === "uchar" || properties[rIdx].type === "uint8") {
|
|
59624
|
+
r /= 255;
|
|
59625
|
+
g /= 255;
|
|
59626
|
+
b /= 255;
|
|
59627
|
+
}
|
|
59628
|
+
color[v * 3 + 0] = r;
|
|
59629
|
+
color[v * 3 + 1] = g;
|
|
59630
|
+
color[v * 3 + 2] = b;
|
|
59631
|
+
}
|
|
59632
|
+
}
|
|
59633
|
+
if (uv) {
|
|
59634
|
+
const uIdx = propIndex("u") >= 0 ? propIndex("u") : propIndex("s");
|
|
59635
|
+
const vIdx = propIndex("v") >= 0 ? propIndex("v") : propIndex("t");
|
|
59636
|
+
if (uIdx >= 0 && vIdx >= 0) {
|
|
59637
|
+
uv[v * 2 + 0] = readByType(payload, vOffset + propOffsets[uIdx], properties[uIdx].type);
|
|
59638
|
+
uv[v * 2 + 1] = readByType(payload, vOffset + propOffsets[vIdx], properties[vIdx].type);
|
|
59639
|
+
}
|
|
59640
|
+
}
|
|
59641
|
+
base += stride;
|
|
59642
|
+
}
|
|
59643
|
+
const indices = [];
|
|
59644
|
+
const triangleTexnumbers = [];
|
|
59645
|
+
const faceVertexUvs = [];
|
|
59646
|
+
let faceBase = base;
|
|
59647
|
+
uv && !hasVertexUV && !hasTexcoord ? new Array(vertexCount).fill(false) : null;
|
|
59648
|
+
for (let f = 0; f < faceCount; f++) {
|
|
59649
|
+
let currentOffset = faceBase;
|
|
59650
|
+
let faceIndices = [];
|
|
59651
|
+
let faceTexcoordArray = void 0;
|
|
59652
|
+
let faceTexnum = 0;
|
|
59653
|
+
let vertexCountInFace = 0;
|
|
59654
|
+
if (!faceProperties || faceProperties.length === 0) {
|
|
59655
|
+
throw new Error("PLY: Face element must have properties");
|
|
59656
|
+
}
|
|
59657
|
+
for (const prop of faceProperties) {
|
|
59658
|
+
if (prop.name === "vertex_indices") {
|
|
59659
|
+
const parts = prop.type.split(" ");
|
|
59660
|
+
if (parts.length !== 3 || parts[0] !== "list") {
|
|
59661
|
+
throw new Error(`PLY: Invalid vertex_indices property type: ${prop.type}`);
|
|
59662
|
+
}
|
|
59663
|
+
const countType = parts[1];
|
|
59664
|
+
const itemType = parts[2];
|
|
59665
|
+
vertexCountInFace = readByType(payload, currentOffset, countType);
|
|
59666
|
+
currentOffset += byteSizeOfType(countType);
|
|
59667
|
+
if (vertexCountInFace < 3) {
|
|
59668
|
+
throw new Error(`PLY: Face ${f} has less than 3 vertices`);
|
|
59669
|
+
}
|
|
59670
|
+
const indexSize = byteSizeOfType(itemType);
|
|
59671
|
+
faceIndices = [];
|
|
59672
|
+
for (let i = 0; i < vertexCountInFace; i++) {
|
|
59673
|
+
const idx = readByType(payload, currentOffset, itemType);
|
|
59674
|
+
faceIndices.push(idx);
|
|
59675
|
+
currentOffset += indexSize;
|
|
59676
|
+
}
|
|
59677
|
+
} else if (prop.name === "texcoord") {
|
|
59678
|
+
const parts = prop.type.split(" ");
|
|
59679
|
+
if (parts.length !== 3 || parts[0] !== "list") {
|
|
59680
|
+
throw new Error(`PLY: Invalid texcoord property type: ${prop.type}`);
|
|
59681
|
+
}
|
|
59682
|
+
const countType = parts[1];
|
|
59683
|
+
const itemType = parts[2];
|
|
59684
|
+
const texcoordCount = readByType(payload, currentOffset, countType);
|
|
59685
|
+
currentOffset += byteSizeOfType(countType);
|
|
59686
|
+
const itemSize = byteSizeOfType(itemType);
|
|
59687
|
+
faceTexcoordArray = new Float32Array(texcoordCount);
|
|
59688
|
+
for (let i = 0; i < texcoordCount; i++) {
|
|
59689
|
+
faceTexcoordArray[i] = readByType(payload, currentOffset, itemType);
|
|
59690
|
+
currentOffset += itemSize;
|
|
59691
|
+
}
|
|
59692
|
+
faceTexcoords.set(f, faceTexcoordArray);
|
|
59693
|
+
} else if (prop.name === "texnumber") {
|
|
59694
|
+
faceTexnum = readByType(payload, currentOffset, prop.type);
|
|
59695
|
+
currentOffset += byteSizeOfType(prop.type);
|
|
59696
|
+
faceTexnumbers[f] = faceTexnum;
|
|
59697
|
+
} else {
|
|
59698
|
+
if (prop.type.startsWith("list ")) {
|
|
59699
|
+
const parts = prop.type.split(" ");
|
|
59700
|
+
if (parts.length === 3) {
|
|
59701
|
+
const countType = parts[1];
|
|
59702
|
+
const itemType = parts[2];
|
|
59703
|
+
const count = readByType(payload, currentOffset, countType);
|
|
59704
|
+
currentOffset += byteSizeOfType(countType);
|
|
59705
|
+
const itemSize = byteSizeOfType(itemType);
|
|
59706
|
+
currentOffset += count * itemSize;
|
|
59707
|
+
}
|
|
59708
|
+
} else {
|
|
59709
|
+
currentOffset += byteSizeOfType(prop.type);
|
|
59710
|
+
}
|
|
59711
|
+
}
|
|
59712
|
+
}
|
|
59713
|
+
faceBase = currentOffset;
|
|
59714
|
+
const texnum = hasTexnumber ? faceTexnumbers[f] ?? 0 : 0;
|
|
59715
|
+
if (vertexCountInFace === 3) {
|
|
59716
|
+
indices.push(faceIndices[0], faceIndices[1], faceIndices[2]);
|
|
59717
|
+
if (hasTexnumber) {
|
|
59718
|
+
triangleTexnumbers.push(texnum);
|
|
59719
|
+
}
|
|
59720
|
+
if (hasTexcoord && faceTexcoordArray && faceTexcoordArray.length >= 6) {
|
|
59721
|
+
faceVertexUvs.push(
|
|
59722
|
+
faceTexcoordArray[0],
|
|
59723
|
+
1 - faceTexcoordArray[1],
|
|
59724
|
+
// vertex 0
|
|
59725
|
+
faceTexcoordArray[2],
|
|
59726
|
+
1 - faceTexcoordArray[3],
|
|
59727
|
+
// vertex 1
|
|
59728
|
+
faceTexcoordArray[4],
|
|
59729
|
+
1 - faceTexcoordArray[5]
|
|
59730
|
+
// vertex 2
|
|
59731
|
+
);
|
|
59732
|
+
}
|
|
59733
|
+
} else {
|
|
59734
|
+
for (let i = 1; i < vertexCountInFace - 1; i++) {
|
|
59735
|
+
indices.push(faceIndices[0], faceIndices[i], faceIndices[i + 1]);
|
|
59736
|
+
if (hasTexnumber) {
|
|
59737
|
+
triangleTexnumbers.push(texnum);
|
|
59738
|
+
}
|
|
59739
|
+
if (hasTexcoord && faceTexcoordArray && faceTexcoordArray.length >= vertexCountInFace * 2) {
|
|
59740
|
+
faceVertexUvs.push(
|
|
59741
|
+
faceTexcoordArray[0],
|
|
59742
|
+
1 - faceTexcoordArray[1],
|
|
59743
|
+
// vertex 0 (center of fan)
|
|
59744
|
+
faceTexcoordArray[i * 2 + 0],
|
|
59745
|
+
1 - faceTexcoordArray[i * 2 + 1],
|
|
59746
|
+
// vertex i
|
|
59747
|
+
faceTexcoordArray[(i + 1) * 2 + 0],
|
|
59748
|
+
1 - faceTexcoordArray[(i + 1) * 2 + 1]
|
|
59749
|
+
// vertex i+1
|
|
59750
|
+
);
|
|
59751
|
+
}
|
|
59752
|
+
}
|
|
59753
|
+
}
|
|
59754
|
+
}
|
|
59755
|
+
if (!hasNormalData) {
|
|
59756
|
+
for (let i = 0; i < vertexCount * 3; i++) {
|
|
59757
|
+
normal[i] = 0;
|
|
59758
|
+
}
|
|
59759
|
+
for (let i = 0; i < indices.length; i += 3) {
|
|
59760
|
+
const i0 = indices[i];
|
|
59761
|
+
const i1 = indices[i + 1];
|
|
59762
|
+
const i2 = indices[i + 2];
|
|
59763
|
+
const v0x = position[i0 * 3 + 0];
|
|
59764
|
+
const v0y = position[i0 * 3 + 1];
|
|
59765
|
+
const v0z = position[i0 * 3 + 2];
|
|
59766
|
+
const v1x = position[i1 * 3 + 0];
|
|
59767
|
+
const v1y = position[i1 * 3 + 1];
|
|
59768
|
+
const v1z = position[i1 * 3 + 2];
|
|
59769
|
+
const v2x = position[i2 * 3 + 0];
|
|
59770
|
+
const v2y = position[i2 * 3 + 1];
|
|
59771
|
+
const v2z = position[i2 * 3 + 2];
|
|
59772
|
+
const edge1x = v1x - v0x;
|
|
59773
|
+
const edge1y = v1y - v0y;
|
|
59774
|
+
const edge1z = v1z - v0z;
|
|
59775
|
+
const edge2x = v2x - v0x;
|
|
59776
|
+
const edge2y = v2y - v0y;
|
|
59777
|
+
const edge2z = v2z - v0z;
|
|
59778
|
+
const nx = edge1y * edge2z - edge1z * edge2y;
|
|
59779
|
+
const ny = edge1z * edge2x - edge1x * edge2z;
|
|
59780
|
+
const nz = edge1x * edge2y - edge1y * edge2x;
|
|
59781
|
+
normal[i0 * 3 + 0] += nx;
|
|
59782
|
+
normal[i0 * 3 + 1] += ny;
|
|
59783
|
+
normal[i0 * 3 + 2] += nz;
|
|
59784
|
+
normal[i1 * 3 + 0] += nx;
|
|
59785
|
+
normal[i1 * 3 + 1] += ny;
|
|
59786
|
+
normal[i1 * 3 + 2] += nz;
|
|
59787
|
+
normal[i2 * 3 + 0] += nx;
|
|
59788
|
+
normal[i2 * 3 + 1] += ny;
|
|
59789
|
+
normal[i2 * 3 + 2] += nz;
|
|
59790
|
+
}
|
|
59791
|
+
for (let v = 0; v < vertexCount; v++) {
|
|
59792
|
+
const nx = normal[v * 3 + 0];
|
|
59793
|
+
const ny = normal[v * 3 + 1];
|
|
59794
|
+
const nz = normal[v * 3 + 2];
|
|
59795
|
+
const length = Math.sqrt(nx * nx + ny * ny + nz * nz);
|
|
59796
|
+
if (length > 1e-5) {
|
|
59797
|
+
normal[v * 3 + 0] = nx / length;
|
|
59798
|
+
normal[v * 3 + 1] = ny / length;
|
|
59799
|
+
normal[v * 3 + 2] = nz / length;
|
|
59800
|
+
} else {
|
|
59801
|
+
normal[v * 3 + 0] = 0;
|
|
59802
|
+
normal[v * 3 + 1] = 1;
|
|
59803
|
+
normal[v * 3 + 2] = 0;
|
|
59804
|
+
}
|
|
59805
|
+
}
|
|
59806
|
+
}
|
|
59807
|
+
let finalPosition = position;
|
|
59808
|
+
let finalNormal = normal;
|
|
59809
|
+
let finalColor = color;
|
|
59810
|
+
let finalUv = void 0;
|
|
59811
|
+
let finalIndices = void 0;
|
|
59812
|
+
if (hasTexcoord && faceVertexUvs.length > 0) {
|
|
59813
|
+
const triangleCount = indices.length / 3;
|
|
59814
|
+
const expandedPosition = new Float32Array(triangleCount * 3 * 3);
|
|
59815
|
+
const expandedNormal = new Float32Array(triangleCount * 3 * 3);
|
|
59816
|
+
const expandedColor = color ? new Float32Array(triangleCount * 3 * 3) : void 0;
|
|
59817
|
+
finalUv = new Float32Array(faceVertexUvs);
|
|
59818
|
+
for (let i = 0; i < triangleCount; i++) {
|
|
59819
|
+
const baseIdx = i * 3;
|
|
59820
|
+
const i0 = indices[baseIdx + 0];
|
|
59821
|
+
const i1 = indices[baseIdx + 1];
|
|
59822
|
+
const i2 = indices[baseIdx + 2];
|
|
59823
|
+
expandedPosition[i * 9 + 0] = position[i0 * 3 + 0];
|
|
59824
|
+
expandedPosition[i * 9 + 1] = position[i0 * 3 + 1];
|
|
59825
|
+
expandedPosition[i * 9 + 2] = position[i0 * 3 + 2];
|
|
59826
|
+
expandedPosition[i * 9 + 3] = position[i1 * 3 + 0];
|
|
59827
|
+
expandedPosition[i * 9 + 4] = position[i1 * 3 + 1];
|
|
59828
|
+
expandedPosition[i * 9 + 5] = position[i1 * 3 + 2];
|
|
59829
|
+
expandedPosition[i * 9 + 6] = position[i2 * 3 + 0];
|
|
59830
|
+
expandedPosition[i * 9 + 7] = position[i2 * 3 + 1];
|
|
59831
|
+
expandedPosition[i * 9 + 8] = position[i2 * 3 + 2];
|
|
59832
|
+
expandedNormal[i * 9 + 0] = normal[i0 * 3 + 0];
|
|
59833
|
+
expandedNormal[i * 9 + 1] = normal[i0 * 3 + 1];
|
|
59834
|
+
expandedNormal[i * 9 + 2] = normal[i0 * 3 + 2];
|
|
59835
|
+
expandedNormal[i * 9 + 3] = normal[i1 * 3 + 0];
|
|
59836
|
+
expandedNormal[i * 9 + 4] = normal[i1 * 3 + 1];
|
|
59837
|
+
expandedNormal[i * 9 + 5] = normal[i1 * 3 + 2];
|
|
59838
|
+
expandedNormal[i * 9 + 6] = normal[i2 * 3 + 0];
|
|
59839
|
+
expandedNormal[i * 9 + 7] = normal[i2 * 3 + 1];
|
|
59840
|
+
expandedNormal[i * 9 + 8] = normal[i2 * 3 + 2];
|
|
59841
|
+
if (expandedColor && color) {
|
|
59842
|
+
expandedColor[i * 9 + 0] = color[i0 * 3 + 0];
|
|
59843
|
+
expandedColor[i * 9 + 1] = color[i0 * 3 + 1];
|
|
59844
|
+
expandedColor[i * 9 + 2] = color[i0 * 3 + 2];
|
|
59845
|
+
expandedColor[i * 9 + 3] = color[i1 * 3 + 0];
|
|
59846
|
+
expandedColor[i * 9 + 4] = color[i1 * 3 + 1];
|
|
59847
|
+
expandedColor[i * 9 + 5] = color[i1 * 3 + 2];
|
|
59848
|
+
expandedColor[i * 9 + 6] = color[i2 * 3 + 0];
|
|
59849
|
+
expandedColor[i * 9 + 7] = color[i2 * 3 + 1];
|
|
59850
|
+
expandedColor[i * 9 + 8] = color[i2 * 3 + 2];
|
|
59851
|
+
}
|
|
59852
|
+
}
|
|
59853
|
+
finalPosition = expandedPosition;
|
|
59854
|
+
finalNormal = expandedNormal;
|
|
59855
|
+
finalColor = expandedColor;
|
|
59856
|
+
const sequentialIndices = new Uint32Array(triangleCount * 3);
|
|
59857
|
+
for (let i = 0; i < triangleCount * 3; i++) {
|
|
59858
|
+
sequentialIndices[i] = i;
|
|
59859
|
+
}
|
|
59860
|
+
finalIndices = sequentialIndices;
|
|
59861
|
+
} else {
|
|
59862
|
+
finalIndices = new Uint32Array(indices);
|
|
59863
|
+
finalUv = uv;
|
|
59864
|
+
}
|
|
59865
|
+
return {
|
|
59866
|
+
vertexCount: hasTexcoord && faceVertexUvs.length > 0 ? finalPosition.length / 3 : vertexCount,
|
|
59867
|
+
faceCount,
|
|
59868
|
+
position: finalPosition,
|
|
59869
|
+
normal: finalNormal,
|
|
59870
|
+
color: finalColor,
|
|
59871
|
+
uv: finalUv,
|
|
59872
|
+
indices: finalIndices,
|
|
59873
|
+
textureFiles: textureFiles.length > 0 ? textureFiles : void 0,
|
|
59874
|
+
triangleTexnumbers: triangleTexnumbers.length > 0 ? triangleTexnumbers : void 0
|
|
59875
|
+
};
|
|
59876
|
+
}
|
|
59877
|
+
function parsePlyMeshASCII(buffer, header) {
|
|
59878
|
+
const { vertexCount, faceCount, properties, faceProperties, textureFiles, headerByteLength } = header;
|
|
59879
|
+
const text = new TextDecoder("utf-8").decode(buffer);
|
|
59880
|
+
const headerEnd = text.indexOf("end_header");
|
|
59881
|
+
if (headerEnd < 0) {
|
|
59882
|
+
throw new Error("PLY: Invalid PLY header");
|
|
59883
|
+
}
|
|
59884
|
+
let bodyStart = headerEnd + "end_header".length;
|
|
59885
|
+
while (bodyStart < text.length && (text[bodyStart] === " " || text[bodyStart] === "\n" || text[bodyStart] === "\r")) {
|
|
59886
|
+
bodyStart++;
|
|
59887
|
+
}
|
|
59888
|
+
const bodyText = text.substring(bodyStart);
|
|
59889
|
+
const tokens = bodyText.split(/\s+/).filter((token) => token.length > 0);
|
|
59890
|
+
let tokenIndex = 0;
|
|
59891
|
+
const has = (n) => properties.find((p) => p.name === n) != null;
|
|
59892
|
+
const parseASCIINumber = (type) => {
|
|
59893
|
+
if (tokenIndex >= tokens.length) {
|
|
59894
|
+
throw new Error("PLY: Unexpected end of file");
|
|
59895
|
+
}
|
|
59896
|
+
const value = tokens[tokenIndex++];
|
|
59897
|
+
switch (type) {
|
|
59898
|
+
case "char":
|
|
59899
|
+
case "uchar":
|
|
59900
|
+
case "short":
|
|
59901
|
+
case "ushort":
|
|
59902
|
+
case "int":
|
|
59903
|
+
case "uint":
|
|
59904
|
+
case "int8":
|
|
59905
|
+
case "uint8":
|
|
59906
|
+
case "int16":
|
|
59907
|
+
case "uint16":
|
|
59908
|
+
case "int32":
|
|
59909
|
+
case "uint32":
|
|
59910
|
+
return parseInt(value);
|
|
59911
|
+
case "float":
|
|
59912
|
+
case "double":
|
|
59913
|
+
case "float32":
|
|
59914
|
+
case "float64":
|
|
59915
|
+
return parseFloat(value);
|
|
59916
|
+
default:
|
|
59917
|
+
return parseFloat(value);
|
|
59918
|
+
}
|
|
59919
|
+
};
|
|
59920
|
+
const position = new Float32Array(vertexCount * 3);
|
|
59921
|
+
const hasNormalData = has("nx") && has("ny") && has("nz");
|
|
59922
|
+
const normal = hasNormalData ? new Float32Array(vertexCount * 3) : new Float32Array(vertexCount * 3);
|
|
59923
|
+
const color = (has("red") || has("r")) && (has("green") || has("g")) && (has("blue") || has("b")) ? new Float32Array(vertexCount * 3) : void 0;
|
|
59924
|
+
const hasVertexUV = (has("u") || has("s")) && (has("v") || has("t"));
|
|
59925
|
+
const hasTexcoord = faceProperties?.some((p) => p.name === "texcoord") || false;
|
|
59926
|
+
const uv = hasVertexUV || hasTexcoord ? new Float32Array(vertexCount * 2) : void 0;
|
|
59927
|
+
const faceTexcoords = /* @__PURE__ */ new Map();
|
|
59928
|
+
const hasTexnumber = faceProperties?.some((p) => p.name === "texnumber") || false;
|
|
59929
|
+
const faceTexnumbers = hasTexnumber ? new Array(faceCount) : [];
|
|
59930
|
+
const indices = [];
|
|
59931
|
+
const triangleTexnumbers = [];
|
|
59932
|
+
const faceVertexUvs = [];
|
|
59933
|
+
const propIndex = (n) => properties.findIndex((p) => p.name === n);
|
|
59934
|
+
const xIdx = propIndex("x");
|
|
59935
|
+
const yIdx = propIndex("y");
|
|
59936
|
+
const zIdx = propIndex("z");
|
|
59937
|
+
const nxIdx = hasNormalData ? propIndex("nx") : -1;
|
|
59938
|
+
const nyIdx = hasNormalData ? propIndex("ny") : -1;
|
|
59939
|
+
const nzIdx = hasNormalData ? propIndex("nz") : -1;
|
|
59940
|
+
const rIdx = color ? propIndex("red") >= 0 ? propIndex("red") : propIndex("r") : -1;
|
|
59941
|
+
const gIdx = color ? propIndex("green") >= 0 ? propIndex("green") : propIndex("g") : -1;
|
|
59942
|
+
const bIdx = color ? propIndex("blue") >= 0 ? propIndex("blue") : propIndex("b") : -1;
|
|
59943
|
+
const uIdx = uv && hasVertexUV ? propIndex("u") >= 0 ? propIndex("u") : propIndex("s") : -1;
|
|
59944
|
+
const vIdx = uv && hasVertexUV ? propIndex("v") >= 0 ? propIndex("v") : propIndex("t") : -1;
|
|
59945
|
+
for (let v = 0; v < vertexCount; v++) {
|
|
59946
|
+
for (let pIdx = 0; pIdx < properties.length; pIdx++) {
|
|
59947
|
+
const prop = properties[pIdx];
|
|
59948
|
+
const value = parseASCIINumber(prop.type);
|
|
59949
|
+
if (pIdx === xIdx) {
|
|
59950
|
+
position[v * 3 + 0] = value;
|
|
59951
|
+
} else if (pIdx === yIdx) {
|
|
59952
|
+
position[v * 3 + 1] = value;
|
|
59953
|
+
} else if (pIdx === zIdx) {
|
|
59954
|
+
position[v * 3 + 2] = value;
|
|
59955
|
+
} else if (pIdx === nxIdx) {
|
|
59956
|
+
normal[v * 3 + 0] = value;
|
|
59957
|
+
} else if (pIdx === nyIdx) {
|
|
59958
|
+
normal[v * 3 + 1] = value;
|
|
59959
|
+
} else if (pIdx === nzIdx) {
|
|
59960
|
+
normal[v * 3 + 2] = value;
|
|
59961
|
+
} else if (pIdx === rIdx && color) {
|
|
59962
|
+
color[v * 3 + 0] = prop.type === "uchar" || prop.type === "uint8" ? value / 255 : value;
|
|
59963
|
+
} else if (pIdx === gIdx && color) {
|
|
59964
|
+
color[v * 3 + 1] = prop.type === "uchar" || prop.type === "uint8" ? value / 255 : value;
|
|
59965
|
+
} else if (pIdx === bIdx && color) {
|
|
59966
|
+
color[v * 3 + 2] = prop.type === "uchar" || prop.type === "uint8" ? value / 255 : value;
|
|
59967
|
+
} else if (pIdx === uIdx && uv) {
|
|
59968
|
+
uv[v * 2 + 0] = value;
|
|
59969
|
+
} else if (pIdx === vIdx && uv) {
|
|
59970
|
+
uv[v * 2 + 1] = value;
|
|
59971
|
+
}
|
|
59972
|
+
}
|
|
59973
|
+
}
|
|
59974
|
+
for (let f = 0; f < faceCount; f++) {
|
|
59975
|
+
let faceIndices = [];
|
|
59976
|
+
let faceTexcoordArray = void 0;
|
|
59977
|
+
let faceTexnum = 0;
|
|
59978
|
+
for (const prop of faceProperties || []) {
|
|
59979
|
+
if (prop.name === "vertex_indices") {
|
|
59980
|
+
const parts = prop.type.split(" ");
|
|
59981
|
+
const countType = parts[1];
|
|
59982
|
+
const itemType = parts[2];
|
|
59983
|
+
const vertexCountInFace2 = parseASCIINumber(countType);
|
|
59984
|
+
faceIndices = [];
|
|
59985
|
+
for (let i = 0; i < vertexCountInFace2; i++) {
|
|
59986
|
+
faceIndices.push(parseASCIINumber(itemType));
|
|
59987
|
+
}
|
|
59988
|
+
} else if (prop.name === "texcoord") {
|
|
59989
|
+
const parts = prop.type.split(" ");
|
|
59990
|
+
const countType = parts[1];
|
|
59991
|
+
const itemType = parts[2];
|
|
59992
|
+
const texcoordCount = parseASCIINumber(countType);
|
|
59993
|
+
faceTexcoordArray = new Float32Array(texcoordCount);
|
|
59994
|
+
for (let i = 0; i < texcoordCount; i++) {
|
|
59995
|
+
faceTexcoordArray[i] = parseASCIINumber(itemType);
|
|
59996
|
+
}
|
|
59997
|
+
faceTexcoords.set(f, faceTexcoordArray);
|
|
59998
|
+
} else if (prop.name === "texnumber") {
|
|
59999
|
+
faceTexnum = parseASCIINumber(prop.type);
|
|
60000
|
+
faceTexnumbers[f] = faceTexnum;
|
|
60001
|
+
}
|
|
60002
|
+
}
|
|
60003
|
+
const vertexCountInFace = faceIndices.length;
|
|
60004
|
+
const texnum = hasTexnumber ? faceTexnumbers[f] ?? 0 : 0;
|
|
60005
|
+
if (vertexCountInFace === 3) {
|
|
60006
|
+
indices.push(faceIndices[0], faceIndices[1], faceIndices[2]);
|
|
60007
|
+
if (hasTexnumber) {
|
|
60008
|
+
triangleTexnumbers.push(texnum);
|
|
60009
|
+
}
|
|
60010
|
+
if (hasTexcoord && faceTexcoordArray && faceTexcoordArray.length >= 6) {
|
|
60011
|
+
faceVertexUvs.push(
|
|
60012
|
+
faceTexcoordArray[0],
|
|
60013
|
+
1 - faceTexcoordArray[1],
|
|
60014
|
+
faceTexcoordArray[2],
|
|
60015
|
+
1 - faceTexcoordArray[3],
|
|
60016
|
+
faceTexcoordArray[4],
|
|
60017
|
+
1 - faceTexcoordArray[5]
|
|
60018
|
+
);
|
|
60019
|
+
}
|
|
60020
|
+
} else {
|
|
60021
|
+
for (let i = 1; i < vertexCountInFace - 1; i++) {
|
|
60022
|
+
indices.push(faceIndices[0], faceIndices[i], faceIndices[i + 1]);
|
|
60023
|
+
if (hasTexnumber) {
|
|
60024
|
+
triangleTexnumbers.push(texnum);
|
|
60025
|
+
}
|
|
60026
|
+
if (hasTexcoord && faceTexcoordArray && faceTexcoordArray.length >= vertexCountInFace * 2) {
|
|
60027
|
+
faceVertexUvs.push(
|
|
60028
|
+
faceTexcoordArray[0],
|
|
60029
|
+
1 - faceTexcoordArray[1],
|
|
60030
|
+
faceTexcoordArray[i * 2 + 0],
|
|
60031
|
+
1 - faceTexcoordArray[i * 2 + 1],
|
|
60032
|
+
faceTexcoordArray[(i + 1) * 2 + 0],
|
|
60033
|
+
1 - faceTexcoordArray[(i + 1) * 2 + 1]
|
|
60034
|
+
);
|
|
60035
|
+
}
|
|
60036
|
+
}
|
|
60037
|
+
}
|
|
60038
|
+
}
|
|
60039
|
+
if (!hasNormalData) {
|
|
60040
|
+
for (let i = 0; i < vertexCount * 3; i++) {
|
|
60041
|
+
normal[i] = 0;
|
|
60042
|
+
}
|
|
60043
|
+
for (let i = 0; i < indices.length; i += 3) {
|
|
60044
|
+
const i0 = indices[i];
|
|
60045
|
+
const i1 = indices[i + 1];
|
|
60046
|
+
const i2 = indices[i + 2];
|
|
60047
|
+
const v0x = position[i0 * 3 + 0];
|
|
60048
|
+
const v0y = position[i0 * 3 + 1];
|
|
60049
|
+
const v0z = position[i0 * 3 + 2];
|
|
60050
|
+
const v1x = position[i1 * 3 + 0];
|
|
60051
|
+
const v1y = position[i1 * 3 + 1];
|
|
60052
|
+
const v1z = position[i1 * 3 + 2];
|
|
60053
|
+
const v2x = position[i2 * 3 + 0];
|
|
60054
|
+
const v2y = position[i2 * 3 + 1];
|
|
60055
|
+
const v2z = position[i2 * 3 + 2];
|
|
60056
|
+
const edge1x = v1x - v0x;
|
|
60057
|
+
const edge1y = v1y - v0y;
|
|
60058
|
+
const edge1z = v1z - v0z;
|
|
60059
|
+
const edge2x = v2x - v0x;
|
|
60060
|
+
const edge2y = v2y - v0y;
|
|
60061
|
+
const edge2z = v2z - v0z;
|
|
60062
|
+
const nx = edge1y * edge2z - edge1z * edge2y;
|
|
60063
|
+
const ny = edge1z * edge2x - edge1x * edge2z;
|
|
60064
|
+
const nz = edge1x * edge2y - edge1y * edge2x;
|
|
60065
|
+
normal[i0 * 3 + 0] += nx;
|
|
60066
|
+
normal[i0 * 3 + 1] += ny;
|
|
60067
|
+
normal[i0 * 3 + 2] += nz;
|
|
60068
|
+
normal[i1 * 3 + 0] += nx;
|
|
60069
|
+
normal[i1 * 3 + 1] += ny;
|
|
60070
|
+
normal[i1 * 3 + 2] += nz;
|
|
60071
|
+
normal[i2 * 3 + 0] += nx;
|
|
60072
|
+
normal[i2 * 3 + 1] += ny;
|
|
60073
|
+
normal[i2 * 3 + 2] += nz;
|
|
60074
|
+
}
|
|
60075
|
+
for (let v = 0; v < vertexCount; v++) {
|
|
60076
|
+
const nx = normal[v * 3 + 0];
|
|
60077
|
+
const ny = normal[v * 3 + 1];
|
|
60078
|
+
const nz = normal[v * 3 + 2];
|
|
60079
|
+
const length = Math.sqrt(nx * nx + ny * ny + nz * nz);
|
|
60080
|
+
if (length > 1e-5) {
|
|
60081
|
+
normal[v * 3 + 0] = nx / length;
|
|
60082
|
+
normal[v * 3 + 1] = ny / length;
|
|
60083
|
+
normal[v * 3 + 2] = nz / length;
|
|
60084
|
+
} else {
|
|
60085
|
+
normal[v * 3 + 0] = 0;
|
|
60086
|
+
normal[v * 3 + 1] = 1;
|
|
60087
|
+
normal[v * 3 + 2] = 0;
|
|
60088
|
+
}
|
|
60089
|
+
}
|
|
60090
|
+
}
|
|
60091
|
+
let finalPosition = position;
|
|
60092
|
+
let finalNormal = normal;
|
|
60093
|
+
let finalColor = color;
|
|
60094
|
+
let finalUv = void 0;
|
|
60095
|
+
let finalIndices = void 0;
|
|
60096
|
+
if (hasTexcoord && faceVertexUvs.length > 0) {
|
|
60097
|
+
const triangleCount = indices.length / 3;
|
|
60098
|
+
const expandedPosition = new Float32Array(triangleCount * 3 * 3);
|
|
60099
|
+
const expandedNormal = new Float32Array(triangleCount * 3 * 3);
|
|
60100
|
+
const expandedColor = color ? new Float32Array(triangleCount * 3 * 3) : void 0;
|
|
60101
|
+
finalUv = new Float32Array(faceVertexUvs);
|
|
60102
|
+
for (let i = 0; i < triangleCount; i++) {
|
|
60103
|
+
const baseIdx = i * 3;
|
|
60104
|
+
const i0 = indices[baseIdx + 0];
|
|
60105
|
+
const i1 = indices[baseIdx + 1];
|
|
60106
|
+
const i2 = indices[baseIdx + 2];
|
|
60107
|
+
expandedPosition[i * 9 + 0] = position[i0 * 3 + 0];
|
|
60108
|
+
expandedPosition[i * 9 + 1] = position[i0 * 3 + 1];
|
|
60109
|
+
expandedPosition[i * 9 + 2] = position[i0 * 3 + 2];
|
|
60110
|
+
expandedPosition[i * 9 + 3] = position[i1 * 3 + 0];
|
|
60111
|
+
expandedPosition[i * 9 + 4] = position[i1 * 3 + 1];
|
|
60112
|
+
expandedPosition[i * 9 + 5] = position[i1 * 3 + 2];
|
|
60113
|
+
expandedPosition[i * 9 + 6] = position[i2 * 3 + 0];
|
|
60114
|
+
expandedPosition[i * 9 + 7] = position[i2 * 3 + 1];
|
|
60115
|
+
expandedPosition[i * 9 + 8] = position[i2 * 3 + 2];
|
|
60116
|
+
expandedNormal[i * 9 + 0] = normal[i0 * 3 + 0];
|
|
60117
|
+
expandedNormal[i * 9 + 1] = normal[i0 * 3 + 1];
|
|
60118
|
+
expandedNormal[i * 9 + 2] = normal[i0 * 3 + 2];
|
|
60119
|
+
expandedNormal[i * 9 + 3] = normal[i1 * 3 + 0];
|
|
60120
|
+
expandedNormal[i * 9 + 4] = normal[i1 * 3 + 1];
|
|
60121
|
+
expandedNormal[i * 9 + 5] = normal[i1 * 3 + 2];
|
|
60122
|
+
expandedNormal[i * 9 + 6] = normal[i2 * 3 + 0];
|
|
60123
|
+
expandedNormal[i * 9 + 7] = normal[i2 * 3 + 1];
|
|
60124
|
+
expandedNormal[i * 9 + 8] = normal[i2 * 3 + 2];
|
|
60125
|
+
if (expandedColor && color) {
|
|
60126
|
+
expandedColor[i * 9 + 0] = color[i0 * 3 + 0];
|
|
60127
|
+
expandedColor[i * 9 + 1] = color[i0 * 3 + 1];
|
|
60128
|
+
expandedColor[i * 9 + 2] = color[i0 * 3 + 2];
|
|
60129
|
+
expandedColor[i * 9 + 3] = color[i1 * 3 + 0];
|
|
60130
|
+
expandedColor[i * 9 + 4] = color[i1 * 3 + 1];
|
|
60131
|
+
expandedColor[i * 9 + 5] = color[i1 * 3 + 2];
|
|
60132
|
+
expandedColor[i * 9 + 6] = color[i2 * 3 + 0];
|
|
60133
|
+
expandedColor[i * 9 + 7] = color[i2 * 3 + 1];
|
|
60134
|
+
expandedColor[i * 9 + 8] = color[i2 * 3 + 2];
|
|
60135
|
+
}
|
|
60136
|
+
}
|
|
60137
|
+
finalPosition = expandedPosition;
|
|
60138
|
+
finalNormal = expandedNormal;
|
|
60139
|
+
finalColor = expandedColor;
|
|
60140
|
+
const sequentialIndices = new Uint32Array(triangleCount * 3);
|
|
60141
|
+
for (let i = 0; i < triangleCount * 3; i++) {
|
|
60142
|
+
sequentialIndices[i] = i;
|
|
60143
|
+
}
|
|
60144
|
+
finalIndices = sequentialIndices;
|
|
60145
|
+
} else {
|
|
60146
|
+
finalIndices = new Uint32Array(indices);
|
|
60147
|
+
finalUv = uv;
|
|
60148
|
+
}
|
|
60149
|
+
return {
|
|
60150
|
+
vertexCount: hasTexcoord && faceVertexUvs.length > 0 ? finalPosition.length / 3 : vertexCount,
|
|
60151
|
+
faceCount,
|
|
60152
|
+
position: finalPosition,
|
|
60153
|
+
normal: finalNormal,
|
|
60154
|
+
color: finalColor,
|
|
60155
|
+
uv: finalUv,
|
|
60156
|
+
indices: finalIndices,
|
|
60157
|
+
textureFiles: textureFiles.length > 0 ? textureFiles : void 0,
|
|
60158
|
+
triangleTexnumbers: triangleTexnumbers.length > 0 ? triangleTexnumbers : void 0
|
|
60159
|
+
};
|
|
60160
|
+
}
|
|
59364
60161
|
|
|
59365
60162
|
class GaussianSplatParser extends ParserBase {
|
|
59366
60163
|
static format = ParserFormat.BIN;
|
|
@@ -59469,6 +60266,133 @@ class KHR_lights_punctual {
|
|
|
59469
60266
|
class KHR_materials_ior {
|
|
59470
60267
|
}
|
|
59471
60268
|
|
|
60269
|
+
class PlyParser extends ParserBase {
|
|
60270
|
+
static format = ParserFormat.BIN;
|
|
60271
|
+
async parseBuffer(buffer) {
|
|
60272
|
+
const header = parsePlyHeader(buffer);
|
|
60273
|
+
switch (header.mode) {
|
|
60274
|
+
case PlyMode.Splat: {
|
|
60275
|
+
const plyData = parsePlyGaussianSplat(buffer);
|
|
60276
|
+
const asset = {
|
|
60277
|
+
count: plyData.vertexCount,
|
|
60278
|
+
position: plyData.position,
|
|
60279
|
+
rotation: plyData.rotation,
|
|
60280
|
+
scale: plyData.scale,
|
|
60281
|
+
opacity: plyData.opacity,
|
|
60282
|
+
sh: plyData.sh
|
|
60283
|
+
};
|
|
60284
|
+
asset.bbox = computeAABBFromPositions(plyData.position);
|
|
60285
|
+
const gsplatObj = new Object3D();
|
|
60286
|
+
gsplatObj.name = "GaussianSplat";
|
|
60287
|
+
const renderer = gsplatObj.addComponent(GSplatRenderer);
|
|
60288
|
+
renderer.initAsset(asset);
|
|
60289
|
+
this.data = gsplatObj;
|
|
60290
|
+
break;
|
|
60291
|
+
}
|
|
60292
|
+
case PlyMode.PointCloud: {
|
|
60293
|
+
break;
|
|
60294
|
+
}
|
|
60295
|
+
case PlyMode.Mesh: {
|
|
60296
|
+
const plyData = parsePlyMesh(buffer);
|
|
60297
|
+
const rootObj = new Object3D();
|
|
60298
|
+
rootObj.name = "PLYMesh";
|
|
60299
|
+
const textureGroups = /* @__PURE__ */ new Map();
|
|
60300
|
+
if (plyData.triangleTexnumbers && plyData.triangleTexnumbers.length > 0) {
|
|
60301
|
+
for (let i = 0; i < plyData.triangleTexnumbers.length; i++) {
|
|
60302
|
+
const texnum = plyData.triangleTexnumbers[i];
|
|
60303
|
+
if (!textureGroups.has(texnum)) {
|
|
60304
|
+
textureGroups.set(texnum, []);
|
|
60305
|
+
}
|
|
60306
|
+
textureGroups.get(texnum).push(i);
|
|
60307
|
+
}
|
|
60308
|
+
} else {
|
|
60309
|
+
const triangleCount = plyData.indices.length / 3;
|
|
60310
|
+
const allTriangles = [];
|
|
60311
|
+
for (let i = 0; i < triangleCount; i++) {
|
|
60312
|
+
allTriangles.push(i);
|
|
60313
|
+
}
|
|
60314
|
+
textureGroups.set(0, allTriangles);
|
|
60315
|
+
}
|
|
60316
|
+
const materials = /* @__PURE__ */ new Map();
|
|
60317
|
+
if (plyData.textureFiles && plyData.textureFiles.length > 0) {
|
|
60318
|
+
const promiseList = [];
|
|
60319
|
+
for (let texnum = 0; texnum < plyData.textureFiles.length; texnum++) {
|
|
60320
|
+
const material = new LitMaterial();
|
|
60321
|
+
const texturePath = StringUtil.normalizePath(
|
|
60322
|
+
this.baseUrl + plyData.textureFiles[texnum]
|
|
60323
|
+
);
|
|
60324
|
+
promiseList.push(Engine3D.res.loadTexture(texturePath).then((texture) => {
|
|
60325
|
+
material.baseMap = texture;
|
|
60326
|
+
materials.set(texnum, material);
|
|
60327
|
+
}));
|
|
60328
|
+
}
|
|
60329
|
+
await Promise.all(promiseList);
|
|
60330
|
+
}
|
|
60331
|
+
if (materials.size === 0) {
|
|
60332
|
+
materials.set(0, new LitMaterial());
|
|
60333
|
+
}
|
|
60334
|
+
for (const [texnum, triangleIndices] of textureGroups) {
|
|
60335
|
+
const groupIndices = [];
|
|
60336
|
+
for (const triIdx of triangleIndices) {
|
|
60337
|
+
const baseIdx = triIdx * 3;
|
|
60338
|
+
groupIndices.push(
|
|
60339
|
+
plyData.indices[baseIdx + 0],
|
|
60340
|
+
plyData.indices[baseIdx + 1],
|
|
60341
|
+
plyData.indices[baseIdx + 2]
|
|
60342
|
+
);
|
|
60343
|
+
}
|
|
60344
|
+
const geometry = new GeometryBase();
|
|
60345
|
+
geometry.setAttribute(
|
|
60346
|
+
VertexAttributeName.position,
|
|
60347
|
+
plyData.position
|
|
60348
|
+
);
|
|
60349
|
+
geometry.setAttribute(
|
|
60350
|
+
VertexAttributeName.normal,
|
|
60351
|
+
plyData.normal
|
|
60352
|
+
);
|
|
60353
|
+
if (plyData.uv) {
|
|
60354
|
+
geometry.setAttribute(
|
|
60355
|
+
VertexAttributeName.uv,
|
|
60356
|
+
plyData.uv
|
|
60357
|
+
);
|
|
60358
|
+
}
|
|
60359
|
+
if (plyData.color) {
|
|
60360
|
+
geometry.setAttribute(
|
|
60361
|
+
VertexAttributeName.color,
|
|
60362
|
+
plyData.color
|
|
60363
|
+
);
|
|
60364
|
+
}
|
|
60365
|
+
geometry.setIndices(new Uint32Array(groupIndices));
|
|
60366
|
+
geometry.addSubGeometry({
|
|
60367
|
+
indexStart: 0,
|
|
60368
|
+
indexCount: groupIndices.length,
|
|
60369
|
+
vertexStart: 0,
|
|
60370
|
+
vertexCount: 0,
|
|
60371
|
+
firstStart: 0,
|
|
60372
|
+
index: 0,
|
|
60373
|
+
topology: 0
|
|
60374
|
+
});
|
|
60375
|
+
let material = materials.get(texnum);
|
|
60376
|
+
if (!material) {
|
|
60377
|
+
material = materials.values().next().value || new LitMaterial();
|
|
60378
|
+
}
|
|
60379
|
+
const meshObj = new Object3D();
|
|
60380
|
+
meshObj.name = `PLYMesh_Texture_${texnum}`;
|
|
60381
|
+
const renderer = meshObj.addComponent(MeshRenderer);
|
|
60382
|
+
renderer.geometry = geometry;
|
|
60383
|
+
renderer.material = material;
|
|
60384
|
+
rootObj.addChild(meshObj);
|
|
60385
|
+
}
|
|
60386
|
+
this.data = rootObj;
|
|
60387
|
+
break;
|
|
60388
|
+
}
|
|
60389
|
+
}
|
|
60390
|
+
}
|
|
60391
|
+
verification() {
|
|
60392
|
+
return !!this.data;
|
|
60393
|
+
}
|
|
60394
|
+
}
|
|
60395
|
+
|
|
59472
60396
|
class PrefabBoneData {
|
|
59473
60397
|
boneName;
|
|
59474
60398
|
bonePath;
|
|
@@ -69044,4 +69968,4 @@ const __viteBrowserExternal = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.def
|
|
|
69044
69968
|
__proto__: null
|
|
69045
69969
|
}, Symbol.toStringTag, { value: 'Module' }));
|
|
69046
69970
|
|
|
69047
|
-
export { AccelerateDecelerateInterpolator, AccelerateInterpolator, AnimationCurve, AnimationCurveT, AnimationMonitor, AnimatorComponent, AnimatorEventKeyframe, AnticipateInterpolator, AnticipateOvershootInterpolator, ArrayHas, ArrayItemIndex, AtlasParser, AtmosphericComponent, AtmosphericScatteringSky, AtmosphericScatteringSkySetting, AtmosphericScatteringSky_shader, AttributeAnimCurve, AxisObject, B3DMLoader, B3DMLoaderBase, B3DMParseUtil, B3DMParser, BRDFLUT, BRDFLUTGenerate, BRDF_frag, BatchTable, BiMap, BillboardComponent, BillboardType, BitUtil, BitmapTexture2D, BitmapTexture2DArray, BitmapTextureCube, Blend, BlendFactor, BlendMode, BlendShapeData, BlendShapePropertyData, BloomPost, BlurEffectCreatorBlur_cs, BlurEffectCreatorSample_cs, BlurTexture2DBufferCreator, BounceInterpolator, BoundUtil, BoundingBox, BoundingSphere, BoundingVolume, BoxColliderShape, BoxGeometry, BrdfLut_frag, BsDF_frag, BxDF_frag, BxdfDebug_frag, BytesArray, CEvent, CEventDispatcher, CEventListener, CResizeEvent, CSM, Camera3D, CameraControllerBase, CameraType, CameraUtil, CapsuleColliderShape, CastPointShadowMaterialPass, CastShadowMaterialPass, Clearcoat_frag, ClusterBoundsSource_cs, ClusterConfig, ClusterDebug_frag, ClusterLight, ClusterLightingBuffer, ClusterLightingRender, ClusterLighting_cs, CollectInfo, ColliderComponent, ColliderShape, ColliderShapeType, Color, ColorGradient, ColorLitMaterial, ColorLitShader, ColorPassFragmentOutput, ColorPassRenderer, ColorUtil, ComData, Combine_cs, Common_frag, Common_vert, ComponentBase, ComponentCollect, ComputeGPUBuffer, ComputeShader, Context3D, CubeCamera, CubeMapFaceEnum, CubeSky_Shader, CubicBezierCurve, CubicBezierPath, CubicBezierType, CycleInterpolator, CylinderGeometry, DDGIIrradianceComputePass, DDGIIrradianceGPUBufferReader, DDGIIrradianceVolume, DDGIIrradiance_shader, DDGILightingPass, DDGILighting_shader, DDGIMultiBouncePass, DDGIProbeRenderer, DEGREES_TO_RADIANS, DRACO_DECODER_GLTF_JS, DecelerateInterpolator, Denoising_cs, Depth2DTextureArray, DepthCubeArrayTexture, DepthMaterialPass, DepthOfFieldPost, DepthOfView_cs, DirectLight, DoubleArray, EditorInspector, Engine3D, Entity, EntityBatchCollect, EntityCollect, EnvMap_frag, ErpImage2CubeMap, ErpImage2CubeMapCreateCube_cs, ErpImage2CubeMapRgbe2rgba_cs, ExtrudeGeometry, FAILED, FASTFLOOR, FXAAPost, FXAAShader, FastMathShader, FatLineGeometry, FatLineMaterial, FatLineRenderer, FatLineShader, FatLine_FS, FatLine_VS, FeatureTable, FileLoader, FirstPersonCameraController, Float16ArrayTexture, Float32ArrayTexture, FlyCameraController, FontChar, FontInfo, FontPage, FontParser, ForwardRenderJob, FragmentOutput, FragmentVarying, FrameCache, Frustum, FrustumCSM, FrustumCulling_cs, FullQuad_vert_wgsl, GBufferFrame, GBufferPass, GBufferPost, GBufferStand, GBuffer_pass, GILighting, GIProbeMaterial, GIProbeMaterialType, GIProbeShader, GIRenderCompleteEvent, GIRenderStartEvent, GLBChunk, GLBHeader, GLBParser, GLSLLexer, GLSLLexerToken, GLSLPreprocessor, GLSLSyntax, GLTFBinaryExtension, GLTFMaterial, GLTFParser, GLTFSubParser, GLTFSubParserCamera, GLTFSubParserConverter, GLTFSubParserMaterial, GLTFSubParserMesh, GLTFSubParserSkeleton, GLTFSubParserSkin, GLTFType, GLTF_Accessors, GLTF_Info, GLTF_Light, GLTF_Mesh, GLTF_Node, GLTF_Primitives, GLTF_Scene, GPUAddressMode, GPUBlendFactor, GPUBufferBase, GPUBufferType, GPUCompareFunction, GPUContext, GPUCullMode, GPUFilterMode, GPUPrimitiveTopology, GPUTextureFormat, GPUVertexFormat, GPUVertexStepMode, GSplatFormat, GSplatGeometry, GSplatMaterial, GSplatRenderer, GSplatShader, GSplat_FS, GSplat_VS, GTAOPost, GTAO_cs, GUIAtlasTexture, GUICanvas, GUIConfig, GUIGeometry, GUIGeometryRebuild, GUIMaterial, GUIPassRenderer, GUIPick, GUIPickHelper, GUIQuad, GUIQuadAttrEnum, GUIRenderer, GUIShader, GUISpace, GUISprite, GUITexture, GaussianSplatParser, GenerayRandomDir, GeoJsonParser, GeoJsonUtil, GeoType, GeometryBase, GeometryIndicesBuffer, GeometryUtil, GeometryVertexBuffer, GeometryVertexType, GetComponentClass, GetCountInstanceID, GetRepeat, GetShader, GlassShader, GlobalBindGroup, GlobalBindGroupLayout, GlobalFog, GlobalFog_shader, GlobalIlluminationComponent, GlobalUniform, GlobalUniformGroup, GodRayPost, GodRay_cs, GridObject, HDRTexture, HDRTextureCube, Hair_frag, Hair_shader_op, Hair_shader_tr, HaltonSeq, Horizontal, HoverCameraController, I3DMLoader, I3DMLoaderBase, I3DMParser, IBLEnvMapCreator, IBLEnvMapCreator_cs, IESProfiles, IESProfiles_frag, IKDTreeUserData, ImageType, IndicesGPUBuffer, Inline_vert, InputSystem, InstanceDrawComponent, InstanceUniform, InstancedMesh, Interpolator, InterpolatorEnum, IrradianceDataReaderCompleteEvent, IrradianceVolumeData_frag, Irradiance_frag, IsEditorInspector, IsNonSerialize, Joint, JointPose, JumperInterpolator, KDTreeEntity, KDTreeNode, KDTreeRange, KDTreeSpace, KDTreeUUID, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_clearcoat, KHR_materials_emissive_strength, KHR_materials_ior, KHR_materials_unlit, KMZParser, KV, KelvinUtil, KeyCode, KeyEvent, Keyframe, KeyframeT, LDRTextureCube, LOADED, LOADING, LRUCache, LambertMaterial, Lambert_shader, Light, LightBase, LightData, LightEntries, LightType, LightingFunction_frag, Line, LineClassification, LinearInterpolator, LitMaterial, LitSSSShader, LitShader, Lit_shader, LoaderBase, LoaderEvent, LoaderManager, MAX_VALUE, MIN_VALUE, Material, MaterialDataUniformGPUBuffer, MaterialUtilities, MathShader, MathUtil, Matrix3, Matrix4, MatrixBindGroup, MatrixGPUBuffer, MatrixShader, MemoryDO, MemoryInfo, MergeRGBACreator, MergeRGBA_cs, MeshColliderShape, MeshFilter, MeshRenderer, MinMaxAnimationCurves, MinMaxCurve, MinMaxCurveState, MinMaxPolyCurves, MorePassParser, MorePassShader, MorphTargetBlender, MorphTargetData, MorphTargetFrame, MorphTargetTransformKey, MorphTarget_shader, MouseCode, MultiBouncePass_cs, Navi3DAstar, Navi3DConst, Navi3DEdge, Navi3DFunnel, Navi3DMaskType, Navi3DMesh, Navi3DPoint, Navi3DPoint2D, Navi3DPointFat, Navi3DRouter, Navi3DTriangle, NonSerialize, NormalMap_frag, OAnimationEvent, OBJParser, Object3D, Object3DEvent, Object3DTransformTools, Object3DUtil, ObjectAnimClip, OcclusionSystem, Octree, OctreeEntity, OrbitController, OrderMap, Orientation3D, OutLineBlendColor_cs, OutlineCalcOutline_cs, OutlinePass, OutlinePost, OutlinePostData, OutlinePostManager, OutlinePostSlot, Outline_cs, OvershootInterpolator, PARSING, PBRLItShader, PBRLitSSSShader, PLUGIN_REGISTERED, ParserBase, ParserFormat, ParticleSystemCurveEvalMode, ParticleSystemRandomnessIds, PassGenerate, PassShader, PassType, PhysicMaterialUniform_frag, PickCompute, PickFire, PickGUIEvent3D, PickResult, Picker_cs, PingPong, PipelinePool, Plane3D, PlaneClassification, PlaneGeometry, PointClassification, PointLight, PointLightShadowRenderer, PointShadowCubeCamera, PointerEvent3D, Polynomial, PolynomialCurve, Polynomials, PoolNode, PostBase, PostProcessingComponent, PostRenderer, PreDepthPassRenderer, PreFilteredEnvironment_cs, PreFilteredEnvironment_cs2, PreIntegratedLut, PreIntegratedLutCompute, PrefabAvatarData, PrefabAvatarParser, PrefabBoneData, PrefabMaterialParser, PrefabMeshData, PrefabMeshParser, PrefabNode, PrefabParser, PrefabStringUtil, PrefabTextureData, PrefabTextureParser, Preprocessor, PriorityQueue, Probe, ProbeEntries, ProbeGBufferFrame, ProfilerUtil, PropertyAnimClip, PropertyAnimTag, PropertyAnimation, PropertyAnimationClip, PropertyAnimationClipState, PropertyAnimationEvent, PropertyHelp, QuadAABB, QuadGlsl_fs, QuadGlsl_vs, QuadRoot, QuadShader, QuadTree, QuadTreeCell, Quad_depth2dArray_frag_wgsl, Quad_depth2d_frag_wgsl, Quad_depthCube_frag_wgsl, Quad_frag_wgsl, Quad_vert_wgsl, Quaternion, R32UintTexture, RADIANS_TO_DEGREES, RGBEErrorCode, RGBEHeader, RGBEParser, RTDescriptor, RTFrame, RTResourceConfig, RTResourceMap, Rand, RandomSeed, Ray, RayCastMeshDetail, Reader, Rect, Reference, Reflection, ReflectionCG, ReflectionEntries, ReflectionMaterial, ReflectionRenderer, ReflectionShader, ReflectionShader_shader, RegisterComponent, RegisterShader, RenderContext, RenderLayer, RenderLayerUtil, RenderNode, RenderShaderCollect, RenderShaderCompute, RenderShaderPass, RenderTexture, RendererBase, RendererJob, RendererMap, RendererMask, RendererMaskUtil, RendererPassState, RepeatSE, Res, RotationControlComponents, SHCommon_frag, SN_ArrayConstant, SN_BinaryOperation, SN_Break, SN_CodeBlock, SN_Constant, SN_Continue, SN_Declaration, SN_Discard, SN_DoWhileLoop, SN_Expression, SN_ForLoop, SN_Function, SN_FunctionArgs, SN_FunctionCall, SN_IFBranch, SN_Identifier, SN_IndexOperation, SN_Layout, SN_ParenExpression, SN_Precision, SN_Return, SN_SelectOperation, SN_Struct, SN_TernaryOperation, SN_UnaryOperation, SN_WhileLoop, SSAO_cs, SSGI2_cs, SSGIPost, SSRPost, SSR_BlendColor_cs, SSR_IS_Kernel, SSR_IS_cs, SSR_RayTrace_cs, ScaleControlComponents, Scene3D, Shader, ShaderAttributeInfo, ShaderConverter, ShaderConverterResult, ShaderLib, ShaderPassBase, ShaderReflection, ShaderStage, ShaderState, ShaderUniformInfo, ShaderUtil, ShadingInput, ShadowLightsCollect, ShadowMapPassRenderer, ShadowMapping_frag, Skeleton, SkeletonAnimationClip, SkeletonAnimationClipState, SkeletonAnimationComponent, SkeletonAnimationCompute, SkeletonAnimation_shader, SkeletonBlendComputeArgs, SkeletonPose, SkeletonTransformComputeArgs, SkinnedMeshRenderer, SkinnedMeshRenderer2, SkyGBufferPass, SkyGBuffer_pass, SkyMaterial, SkyRenderer, SkyShader, SolidColorSky, SphereColliderShape, SphereGeometry, SphereReflection, SpotLight, StandShader, StatementNode, StorageGPUBuffer, StringUtil, Struct, StructStorageGPUBuffer, SubGeometry, TAACopyTex_cs, TAAPost, TAASharpTex_cs, TAA_cs, TestComputeLoadBuffer, TextAnchor, TextFieldLayout, TextFieldLine, Texture, TextureCube, TextureCubeFaceData, TextureCubeStdCreator, TextureCubeUtils, TextureMipmapCompute, TextureMipmapGenerator, TextureScaleCompute, ThirdPersonCameraController, Tile, TileSet, TileSetChild, TileSetChildContent, TileSetChildContentMetaData, TileSetRoot, TilesRenderer, Time, TokenType, TorusGeometry, TouchData, TrailGeometry, Transform, TransformAxisEnum, TransformControllerBaseComponent, TransformMode, TransformSpaceMode, TranslationControlComponents, TranslatorContext, TriGeometry, Triangle, UIButton, UIButtonTransition, UIComponentBase, UIEvent, UIImage, UIImageGroup, UIInteractive, UIInteractiveStyle, UIPanel, UIRenderAble, UIShadow, UITextField, UITransform, UNLOADED, UUID, UV, Uint32ArrayTexture, Uint8ArrayTexture, UnLit, UnLitMaterial, UnLitMaterialUniform_frag, UnLitShader, UnLitTexArrayMaterial, UnLitTexArrayShader, UnLitTextureArray, UnLit_frag, UniformGPUBuffer, UniformNode, UniformType, ValueEnumType, ValueOp, ValueParser, ValueSpread, Vector2, Vector3, Vector3Ex, Vector4, VertexAttribute, VertexAttributeIndexShader, VertexAttributeName, VertexAttributeSize, VertexAttributeStride, VertexAttributes_vert, VertexBufferLayout, VertexFormat, VertexGPUBuffer, Vertical, VideoUniform_frag, View3D, ViewPanel, ViewQuad, VirtualTexture, WGS84_FLATTENING, WGS84_HEIGHT, WGS84_RADIUS, WGSLTranslator, WayLines3D, WayPoint3D, WebGPUDescriptorCreator, WorldMatrixUniform, WorldPanel, WrapMode, WrapTimeMode, ZCullingCompute, ZPassShader_cs, ZPassShader_fs, ZPassShader_vs, ZSorterUtil, append, arrayToString, blendComponent, buildCurves, byteSizeOfType, calculateCurveRangesValue, calculateMinMax, castPointShadowMap_vert, clamp, clampRepeat, computeAABBFromPositions, cos, crossProduct, cubicPolynomialRoot, cubicPolynomialRootsGeneric, curvesSupportProcedural, deg2Rad, detectGSplatFormat, directionShadowCastMap_frag, dot, doubleIntegrateSegment, downSample, fastInvSqrt, floorfToIntPos, fonts, generateRandom, generateRandom3, getFloatFromInt, getGLTypeFromTypedArray, getGLTypeFromTypedArrayType, getGlobalRandomSeed, getTypedArray, getTypedArrayTypeFromGLType, grad1, grad2, grad3, grad4, inferSHOrder, integrateSegment, irradianceDataReader, kPI, lerp, lerpByte, lerpColor, lerpVector3, lruPriorityCallback, magnitude, makeAloneSprite, makeGUISprite, makeMatrix44, markUsedSetLeaves, markUsedTiles, markVisibleTiles, matrixMultiply, matrixRotate, matrixRotateY, mergeFunctions, multiplyMatrices4x4REF, normal_distribution, normalizeFast, normalizeSafe, normalizedToByte, normalizedToWord, outlinePostData, outlinePostManager, parsePlyGaussianSplat, parsePlyHeader, perm, post, priorityCallback, quadraticPolynomialRootsGeneric, rad2Deg, random01, randomBarycentricCoord, randomPointBetweenEllipsoid, randomPointBetweenSphere, randomPointInsideCube, randomPointInsideEllipsoid, randomPointInsideUnitCircle, randomPointInsideUnitSphere, randomQuaternion, randomQuaternionUniformDistribution, randomSeed, randomUnitVector, randomUnitVector2, rangedRandomFloat, rangedRandomInt, readByType, readMagicBytes, registerMaterial, repeat, rotMatrix, rotateVectorByQuat, roundfToIntPos, scale, shadowCastMap_frag, shadowCastMap_vert, simplex, sin, snoise1, snoise2, snoise3, snoise4, sqrMagnitude, sqrtImpl, stencilStateFace, swap, textureCompress, threshold, throttle, toHalfFloat, toggleTiles, traverseAncestors, traverseSet, tw, uniform_real_distribution, uniform_real_distribution2, upSample$1 as upSample, webGPUContext, zSorterUtil };
|
|
69971
|
+
export { AccelerateDecelerateInterpolator, AccelerateInterpolator, AnimationCurve, AnimationCurveT, AnimationMonitor, AnimatorComponent, AnimatorEventKeyframe, AnticipateInterpolator, AnticipateOvershootInterpolator, ArrayHas, ArrayItemIndex, AtlasParser, AtmosphericComponent, AtmosphericScatteringSky, AtmosphericScatteringSkySetting, AtmosphericScatteringSky_shader, AttributeAnimCurve, AxisObject, B3DMLoader, B3DMLoaderBase, B3DMParseUtil, B3DMParser, BRDFLUT, BRDFLUTGenerate, BRDF_frag, BatchTable, BiMap, BillboardComponent, BillboardType, BitUtil, BitmapTexture2D, BitmapTexture2DArray, BitmapTextureCube, Blend, BlendFactor, BlendMode, BlendShapeData, BlendShapePropertyData, BloomPost, BlurEffectCreatorBlur_cs, BlurEffectCreatorSample_cs, BlurTexture2DBufferCreator, BounceInterpolator, BoundUtil, BoundingBox, BoundingSphere, BoundingVolume, BoxColliderShape, BoxGeometry, BrdfLut_frag, BsDF_frag, BxDF_frag, BxdfDebug_frag, BytesArray, CEvent, CEventDispatcher, CEventListener, CResizeEvent, CSM, Camera3D, CameraControllerBase, CameraType, CameraUtil, CapsuleColliderShape, CastPointShadowMaterialPass, CastShadowMaterialPass, Clearcoat_frag, ClusterBoundsSource_cs, ClusterConfig, ClusterDebug_frag, ClusterLight, ClusterLightingBuffer, ClusterLightingRender, ClusterLighting_cs, CollectInfo, ColliderComponent, ColliderShape, ColliderShapeType, Color, ColorGradient, ColorLitMaterial, ColorLitShader, ColorPassFragmentOutput, ColorPassRenderer, ColorUtil, ComData, Combine_cs, Common_frag, Common_vert, ComponentBase, ComponentCollect, ComputeGPUBuffer, ComputeShader, Context3D, CubeCamera, CubeMapFaceEnum, CubeSky_Shader, CubicBezierCurve, CubicBezierPath, CubicBezierType, CycleInterpolator, CylinderGeometry, DDGIIrradianceComputePass, DDGIIrradianceGPUBufferReader, DDGIIrradianceVolume, DDGIIrradiance_shader, DDGILightingPass, DDGILighting_shader, DDGIMultiBouncePass, DDGIProbeRenderer, DEGREES_TO_RADIANS, DRACO_DECODER_GLTF_JS, DecelerateInterpolator, Denoising_cs, Depth2DTextureArray, DepthCubeArrayTexture, DepthMaterialPass, DepthOfFieldPost, DepthOfView_cs, DirectLight, DoubleArray, EditorInspector, Engine3D, Entity, EntityBatchCollect, EntityCollect, EnvMap_frag, ErpImage2CubeMap, ErpImage2CubeMapCreateCube_cs, ErpImage2CubeMapRgbe2rgba_cs, ExtrudeGeometry, FAILED, FASTFLOOR, FXAAPost, FXAAShader, FastMathShader, FatLineGeometry, FatLineMaterial, FatLineRenderer, FatLineShader, FatLine_FS, FatLine_VS, FeatureTable, FileLoader, FirstPersonCameraController, Float16ArrayTexture, Float32ArrayTexture, FlyCameraController, FontChar, FontInfo, FontPage, FontParser, ForwardRenderJob, FragmentOutput, FragmentVarying, FrameCache, Frustum, FrustumCSM, FrustumCulling_cs, FullQuad_vert_wgsl, GBufferFrame, GBufferPass, GBufferPost, GBufferStand, GBuffer_pass, GILighting, GIProbeMaterial, GIProbeMaterialType, GIProbeShader, GIRenderCompleteEvent, GIRenderStartEvent, GLBChunk, GLBHeader, GLBParser, GLSLLexer, GLSLLexerToken, GLSLPreprocessor, GLSLSyntax, GLTFBinaryExtension, GLTFMaterial, GLTFParser, GLTFSubParser, GLTFSubParserCamera, GLTFSubParserConverter, GLTFSubParserMaterial, GLTFSubParserMesh, GLTFSubParserSkeleton, GLTFSubParserSkin, GLTFType, GLTF_Accessors, GLTF_Info, GLTF_Light, GLTF_Mesh, GLTF_Node, GLTF_Primitives, GLTF_Scene, GPUAddressMode, GPUBlendFactor, GPUBufferBase, GPUBufferType, GPUCompareFunction, GPUContext, GPUCullMode, GPUFilterMode, GPUPrimitiveTopology, GPUTextureFormat, GPUVertexFormat, GPUVertexStepMode, GSplatFormat, GSplatGeometry, GSplatMaterial, GSplatRenderer, GSplatShader, GSplat_FS, GSplat_VS, GTAOPost, GTAO_cs, GUIAtlasTexture, GUICanvas, GUIConfig, GUIGeometry, GUIGeometryRebuild, GUIMaterial, GUIPassRenderer, GUIPick, GUIPickHelper, GUIQuad, GUIQuadAttrEnum, GUIRenderer, GUIShader, GUISpace, GUISprite, GUITexture, GaussianSplatParser, GenerayRandomDir, GeoJsonParser, GeoJsonUtil, GeoType, GeometryBase, GeometryIndicesBuffer, GeometryUtil, GeometryVertexBuffer, GeometryVertexType, GetComponentClass, GetCountInstanceID, GetRepeat, GetShader, GlassShader, GlobalBindGroup, GlobalBindGroupLayout, GlobalFog, GlobalFog_shader, GlobalIlluminationComponent, GlobalUniform, GlobalUniformGroup, GodRayPost, GodRay_cs, GridObject, HDRTexture, HDRTextureCube, Hair_frag, Hair_shader_op, Hair_shader_tr, HaltonSeq, Horizontal, HoverCameraController, I3DMLoader, I3DMLoaderBase, I3DMParser, IBLEnvMapCreator, IBLEnvMapCreator_cs, IESProfiles, IESProfiles_frag, IKDTreeUserData, ImageType, IndicesGPUBuffer, Inline_vert, InputSystem, InstanceDrawComponent, InstanceUniform, InstancedMesh, Interpolator, InterpolatorEnum, IrradianceDataReaderCompleteEvent, IrradianceVolumeData_frag, Irradiance_frag, IsEditorInspector, IsNonSerialize, Joint, JointPose, JumperInterpolator, KDTreeEntity, KDTreeNode, KDTreeRange, KDTreeSpace, KDTreeUUID, KHR_draco_mesh_compression, KHR_lights_punctual, KHR_materials_clearcoat, KHR_materials_emissive_strength, KHR_materials_ior, KHR_materials_unlit, KMZParser, KV, KelvinUtil, KeyCode, KeyEvent, Keyframe, KeyframeT, LDRTextureCube, LOADED, LOADING, LRUCache, LambertMaterial, Lambert_shader, Light, LightBase, LightData, LightEntries, LightType, LightingFunction_frag, Line, LineClassification, LinearInterpolator, LitMaterial, LitSSSShader, LitShader, Lit_shader, LoaderBase, LoaderEvent, LoaderManager, MAX_VALUE, MIN_VALUE, Material, MaterialDataUniformGPUBuffer, MaterialUtilities, MathShader, MathUtil, Matrix3, Matrix4, MatrixBindGroup, MatrixGPUBuffer, MatrixShader, MemoryDO, MemoryInfo, MergeRGBACreator, MergeRGBA_cs, MeshColliderShape, MeshFilter, MeshRenderer, MinMaxAnimationCurves, MinMaxCurve, MinMaxCurveState, MinMaxPolyCurves, MorePassParser, MorePassShader, MorphTargetBlender, MorphTargetData, MorphTargetFrame, MorphTargetTransformKey, MorphTarget_shader, MouseCode, MultiBouncePass_cs, Navi3DAstar, Navi3DConst, Navi3DEdge, Navi3DFunnel, Navi3DMaskType, Navi3DMesh, Navi3DPoint, Navi3DPoint2D, Navi3DPointFat, Navi3DRouter, Navi3DTriangle, NonSerialize, NormalMap_frag, OAnimationEvent, OBJParser, Object3D, Object3DEvent, Object3DTransformTools, Object3DUtil, ObjectAnimClip, OcclusionSystem, Octree, OctreeEntity, OrbitController, OrderMap, Orientation3D, OutLineBlendColor_cs, OutlineCalcOutline_cs, OutlinePass, OutlinePost, OutlinePostData, OutlinePostManager, OutlinePostSlot, Outline_cs, OvershootInterpolator, PARSING, PBRLItShader, PBRLitSSSShader, PLUGIN_REGISTERED, ParserBase, ParserFormat, ParticleSystemCurveEvalMode, ParticleSystemRandomnessIds, PassGenerate, PassShader, PassType, PhysicMaterialUniform_frag, PickCompute, PickFire, PickGUIEvent3D, PickResult, Picker_cs, PingPong, PipelinePool, Plane3D, PlaneClassification, PlaneGeometry, PlyMode, PlyParser, PointClassification, PointLight, PointLightShadowRenderer, PointShadowCubeCamera, PointerEvent3D, Polynomial, PolynomialCurve, Polynomials, PoolNode, PostBase, PostProcessingComponent, PostRenderer, PreDepthPassRenderer, PreFilteredEnvironment_cs, PreFilteredEnvironment_cs2, PreIntegratedLut, PreIntegratedLutCompute, PrefabAvatarData, PrefabAvatarParser, PrefabBoneData, PrefabMaterialParser, PrefabMeshData, PrefabMeshParser, PrefabNode, PrefabParser, PrefabStringUtil, PrefabTextureData, PrefabTextureParser, Preprocessor, PriorityQueue, Probe, ProbeEntries, ProbeGBufferFrame, ProfilerUtil, PropertyAnimClip, PropertyAnimTag, PropertyAnimation, PropertyAnimationClip, PropertyAnimationClipState, PropertyAnimationEvent, PropertyHelp, QuadAABB, QuadGlsl_fs, QuadGlsl_vs, QuadRoot, QuadShader, QuadTree, QuadTreeCell, Quad_depth2dArray_frag_wgsl, Quad_depth2d_frag_wgsl, Quad_depthCube_frag_wgsl, Quad_frag_wgsl, Quad_vert_wgsl, Quaternion, R32UintTexture, RADIANS_TO_DEGREES, RGBEErrorCode, RGBEHeader, RGBEParser, RTDescriptor, RTFrame, RTResourceConfig, RTResourceMap, Rand, RandomSeed, Ray, RayCastMeshDetail, Reader, Rect, Reference, Reflection, ReflectionCG, ReflectionEntries, ReflectionMaterial, ReflectionRenderer, ReflectionShader, ReflectionShader_shader, RegisterComponent, RegisterShader, RenderContext, RenderLayer, RenderLayerUtil, RenderNode, RenderShaderCollect, RenderShaderCompute, RenderShaderPass, RenderTexture, RendererBase, RendererJob, RendererMap, RendererMask, RendererMaskUtil, RendererPassState, RepeatSE, Res, RotationControlComponents, SHCommon_frag, SN_ArrayConstant, SN_BinaryOperation, SN_Break, SN_CodeBlock, SN_Constant, SN_Continue, SN_Declaration, SN_Discard, SN_DoWhileLoop, SN_Expression, SN_ForLoop, SN_Function, SN_FunctionArgs, SN_FunctionCall, SN_IFBranch, SN_Identifier, SN_IndexOperation, SN_Layout, SN_ParenExpression, SN_Precision, SN_Return, SN_SelectOperation, SN_Struct, SN_TernaryOperation, SN_UnaryOperation, SN_WhileLoop, SSAO_cs, SSGI2_cs, SSGIPost, SSRPost, SSR_BlendColor_cs, SSR_IS_Kernel, SSR_IS_cs, SSR_RayTrace_cs, ScaleControlComponents, Scene3D, Shader, ShaderAttributeInfo, ShaderConverter, ShaderConverterResult, ShaderLib, ShaderPassBase, ShaderReflection, ShaderStage, ShaderState, ShaderUniformInfo, ShaderUtil, ShadingInput, ShadowLightsCollect, ShadowMapPassRenderer, ShadowMapping_frag, Skeleton, SkeletonAnimationClip, SkeletonAnimationClipState, SkeletonAnimationComponent, SkeletonAnimationCompute, SkeletonAnimation_shader, SkeletonBlendComputeArgs, SkeletonPose, SkeletonTransformComputeArgs, SkinnedMeshRenderer, SkinnedMeshRenderer2, SkyGBufferPass, SkyGBuffer_pass, SkyMaterial, SkyRenderer, SkyShader, SolidColorSky, SphereColliderShape, SphereGeometry, SphereReflection, SpotLight, StandShader, StatementNode, StorageGPUBuffer, StringUtil, Struct, StructStorageGPUBuffer, SubGeometry, TAACopyTex_cs, TAAPost, TAASharpTex_cs, TAA_cs, TestComputeLoadBuffer, TextAnchor, TextFieldLayout, TextFieldLine, Texture, TextureCube, TextureCubeFaceData, TextureCubeStdCreator, TextureCubeUtils, TextureMipmapCompute, TextureMipmapGenerator, TextureScaleCompute, ThirdPersonCameraController, Tile, TileSet, TileSetChild, TileSetChildContent, TileSetChildContentMetaData, TileSetRoot, TilesRenderer, Time, TokenType, TorusGeometry, TouchData, TrailGeometry, Transform, TransformAxisEnum, TransformControllerBaseComponent, TransformMode, TransformSpaceMode, TranslationControlComponents, TranslatorContext, TriGeometry, Triangle, UIButton, UIButtonTransition, UIComponentBase, UIEvent, UIImage, UIImageGroup, UIInteractive, UIInteractiveStyle, UIPanel, UIRenderAble, UIShadow, UITextField, UITransform, UNLOADED, UUID, UV, Uint32ArrayTexture, Uint8ArrayTexture, UnLit, UnLitMaterial, UnLitMaterialUniform_frag, UnLitShader, UnLitTexArrayMaterial, UnLitTexArrayShader, UnLitTextureArray, UnLit_frag, UniformGPUBuffer, UniformNode, UniformType, ValueEnumType, ValueOp, ValueParser, ValueSpread, Vector2, Vector3, Vector3Ex, Vector4, VertexAttribute, VertexAttributeIndexShader, VertexAttributeName, VertexAttributeSize, VertexAttributeStride, VertexAttributes_vert, VertexBufferLayout, VertexFormat, VertexGPUBuffer, Vertical, VideoUniform_frag, View3D, ViewPanel, ViewQuad, VirtualTexture, WGS84_FLATTENING, WGS84_HEIGHT, WGS84_RADIUS, WGSLTranslator, WayLines3D, WayPoint3D, WebGPUDescriptorCreator, WorldMatrixUniform, WorldPanel, WrapMode, WrapTimeMode, ZCullingCompute, ZPassShader_cs, ZPassShader_fs, ZPassShader_vs, ZSorterUtil, append, arrayToString, blendComponent, buildCurves, byteSizeOfType, calculateCurveRangesValue, calculateMinMax, castPointShadowMap_vert, clamp, clampRepeat, computeAABBFromPositions, cos, crossProduct, cubicPolynomialRoot, cubicPolynomialRootsGeneric, curvesSupportProcedural, deg2Rad, detectGSplatFormat, directionShadowCastMap_frag, dot, doubleIntegrateSegment, downSample, fastInvSqrt, floorfToIntPos, fonts, generateRandom, generateRandom3, getFloatFromInt, getGLTypeFromTypedArray, getGLTypeFromTypedArrayType, getGlobalRandomSeed, getTypedArray, getTypedArrayTypeFromGLType, grad1, grad2, grad3, grad4, inferSHOrder, integrateSegment, irradianceDataReader, kPI, lerp, lerpByte, lerpColor, lerpVector3, lruPriorityCallback, magnitude, makeAloneSprite, makeGUISprite, makeMatrix44, markUsedSetLeaves, markUsedTiles, markVisibleTiles, matrixMultiply, matrixRotate, matrixRotateY, mergeFunctions, multiplyMatrices4x4REF, normal_distribution, normalizeFast, normalizeSafe, normalizedToByte, normalizedToWord, outlinePostData, outlinePostManager, parsePlyGaussianSplat, parsePlyHeader, parsePlyMesh, perm, post, priorityCallback, quadraticPolynomialRootsGeneric, rad2Deg, random01, randomBarycentricCoord, randomPointBetweenEllipsoid, randomPointBetweenSphere, randomPointInsideCube, randomPointInsideEllipsoid, randomPointInsideUnitCircle, randomPointInsideUnitSphere, randomQuaternion, randomQuaternionUniformDistribution, randomSeed, randomUnitVector, randomUnitVector2, rangedRandomFloat, rangedRandomInt, readByType, readMagicBytes, registerMaterial, repeat, rotMatrix, rotateVectorByQuat, roundfToIntPos, scale, shadowCastMap_frag, shadowCastMap_vert, simplex, sin, snoise1, snoise2, snoise3, snoise4, splatColorProperties, splatProperties, sqrMagnitude, sqrtImpl, stencilStateFace, swap, textureCompress, threshold, throttle, toHalfFloat, toggleTiles, traverseAncestors, traverseSet, tw, uniform_real_distribution, uniform_real_distribution2, upSample$1 as upSample, webGPUContext, zSorterUtil };
|