three-base 2.0.134 → 2.0.142
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/DirectionalLight.d.ts +6 -6
- package/DirectionalLight.js +68 -68
- package/DirectionalLight.ts +70 -0
- package/EventMap.d.ts +103 -0
- package/EventMap.js +17 -0
- package/EventMap.ts +139 -0
- package/EventMesh.d.ts +18 -18
- package/EventMesh.js +59 -59
- package/EventMesh.ts +60 -0
- package/ExtrudeMesh.d.ts +112 -112
- package/ExtrudeMesh.js +342 -366
- package/ExtrudeMesh.ts +553 -0
- package/FPScontrol.d.ts +511 -71
- package/FPScontrol.js +1799 -505
- package/FPScontrol.ts +1855 -0
- package/Fire/Fire.d.ts +28 -28
- package/Fire/Fire.js +80 -79
- package/Fire/Fire.ts +89 -0
- package/Fire/{FireGromtry.d.ts → FireGeometry.d.ts} +9 -9
- package/Fire/{FireGromtry.js → FireGeometry.js} +40 -40
- package/Fire/FireGeometry.ts +40 -0
- package/Fire/FireMaterial.d.ts +28 -28
- package/Fire/FireMaterial.js +32 -32
- package/Fire/FireMaterial.ts +89 -0
- package/Fire/index.d.ts +2 -1
- package/Fire/index.js +2 -1
- package/Fire/index.ts +2 -0
- package/GLTFDracoLoader.d.ts +71 -0
- package/GLTFDracoLoader.js +266 -0
- package/GLTFDracoLoader.ts +430 -0
- package/Grass/Grass.d.ts +8 -8
- package/Grass/Grass.js +38 -38
- package/Grass/Grass.ts +38 -0
- package/Grass/index.d.ts +2 -1
- package/Grass/index.js +2 -1
- package/Grass/index.ts +2 -0
- package/Ground1/Ground1.d.ts +10 -11
- package/Ground1/Ground1.js +95 -91
- package/Ground1/Ground1.ts +114 -0
- package/Ground1/index.d.ts +1 -1
- package/Ground1/index.js +1 -1
- package/Ground1/index.ts +1 -0
- package/MeshBase.d.ts +36 -35
- package/MeshBase.js +247 -223
- package/MeshBase.ts +253 -0
- package/Mirror.d.ts +25 -25
- package/Mirror.js +143 -139
- package/Mirror.ts +203 -0
- package/MktMesh/MktMesh.d.ts +291 -0
- package/MktMesh/MktMesh.js +1045 -0
- package/MktMesh/MktMesh.ts +1075 -0
- package/MktMesh/assetUrl.d.ts +35 -0
- package/MktMesh/assetUrl.js +69 -0
- package/MktMesh/assetUrl.ts +69 -0
- package/MktMesh/mktMappingShader.d.ts +12 -0
- package/MktMesh/mktMappingShader.js +139 -0
- package/MktMesh/mktMappingShader.ts +139 -0
- package/MktMesh/mktShader.d.ts +263 -0
- package/MktMesh/mktShader.js +1248 -0
- package/MktMesh/mktShader.ts +1344 -0
- package/MktMesh/panoBitmapTexture.d.ts +25 -0
- package/MktMesh/panoBitmapTexture.js +52 -0
- package/MktMesh/panoBitmapTexture.ts +54 -0
- package/MktMesh/panoSlotBind.d.ts +29 -0
- package/MktMesh/panoSlotBind.js +106 -0
- package/MktMesh/panoSlotBind.ts +153 -0
- package/MktMesh/panoSlotRoster.d.ts +22 -0
- package/MktMesh/panoSlotRoster.js +169 -0
- package/MktMesh/panoSlotRoster.ts +168 -0
- package/MktMesh/panoTileStitcher.d.ts +119 -0
- package/MktMesh/panoTileStitcher.js +533 -0
- package/MktMesh/panoTileStitcher.ts +616 -0
- package/MktMesh/types.d.ts +75 -0
- package/MktMesh/types.js +1 -0
- package/MktMesh/types.ts +87 -0
- package/MktMesh/wallCapTessellate.d.ts +33 -0
- package/MktMesh/wallCapTessellate.js +97 -0
- package/MktMesh/wallCapTessellate.ts +68 -0
- package/PipeMesh/PathGeometry.d.ts +44 -44
- package/PipeMesh/PathGeometry.js +307 -300
- package/PipeMesh/PathGeometry.ts +343 -0
- package/PipeMesh/PathPoint.d.ts +17 -17
- package/PipeMesh/PathPoint.js +31 -31
- package/PipeMesh/PathPoint.ts +36 -0
- package/PipeMesh/PathPointList.d.ts +31 -31
- package/PipeMesh/PathPointList.js +209 -208
- package/PipeMesh/PathPointList.ts +227 -0
- package/PipeMesh/PathTubeGeometry.d.ts +25 -25
- package/PipeMesh/PathTubeGeometry.js +130 -130
- package/PipeMesh/PathTubeGeometry.ts +146 -0
- package/PipeMesh/PipeMesh.d.ts +25 -25
- package/PipeMesh/PipeMesh.js +63 -63
- package/PipeMesh/PipeMesh.ts +76 -0
- package/PipeMesh/index.d.ts +1 -1
- package/PipeMesh/index.js +1 -1
- package/PipeMesh/index.ts +1 -0
- package/PlaneModal1/PlaneModal1.d.ts +34 -31
- package/PlaneModal1/PlaneModal1.js +109 -105
- package/PlaneModal1/PlaneModal1.ts +138 -0
- package/PlaneModal1/index.d.ts +1 -1
- package/PlaneModal1/index.js +1 -1
- package/PlaneModal1/index.ts +1 -0
- package/PlaneText.d.ts +27 -39
- package/PlaneText.js +35 -30
- package/PlaneText.ts +55 -0
- package/PlaneWithHtml.d.ts +13 -11
- package/PlaneWithHtml.js +64 -63
- package/PlaneWithHtml.ts +70 -0
- package/PointLight/PointLight.d.ts +13 -14
- package/PointLight/PointLight.js +64 -70
- package/PointLight/PointLight.ts +67 -0
- package/PointLight/index.d.ts +1 -1
- package/PointLight/index.js +1 -1
- package/PointLight/index.ts +1 -0
- package/README.md +110 -79
- package/Sky/Sky.d.ts +9 -9
- package/Sky/Sky.js +22 -22
- package/Sky/Sky.ts +22 -0
- package/Sky/index.d.ts +1 -1
- package/Sky/index.js +1 -1
- package/Sky/index.ts +1 -0
- package/SpotLight.d.ts +6 -6
- package/SpotLight.js +72 -72
- package/SpotLight.ts +74 -0
- package/SpriteModal1/SpriteModal1.d.ts +33 -30
- package/SpriteModal1/SpriteModal1.js +116 -110
- package/SpriteModal1/SpriteModal1.ts +146 -0
- package/SpriteModal1/index.d.ts +1 -1
- package/SpriteModal1/index.js +1 -1
- package/SpriteModal1/index.ts +1 -0
- package/SpriteText.d.ts +46 -45
- package/SpriteText.js +176 -163
- package/SpriteText.ts +205 -0
- package/SpriteText2.d.ts +48 -47
- package/SpriteText2.js +223 -198
- package/SpriteText2.ts +258 -0
- package/SpriteText3.d.ts +86 -0
- package/SpriteText3.js +519 -0
- package/SpriteText3.ts +599 -0
- package/SpriteWithHtml.d.ts +9 -7
- package/SpriteWithHtml.js +44 -44
- package/SpriteWithHtml.ts +50 -0
- package/Text3D/Text3D.d.ts +20 -20
- package/Text3D/Text3D.js +58 -62
- package/Text3D/Text3D.ts +77 -0
- package/Text3D/fontController.d.ts +60 -59
- package/Text3D/fontController.js +166 -199
- package/Text3D/fontController.ts +209 -0
- package/Text3D/index.d.ts +1 -1
- package/Text3D/index.js +1 -1
- package/Text3D/index.ts +1 -0
- package/ThreeBase.d.ts +248 -97
- package/ThreeBase.js +1202 -613
- package/ThreeBase.ts +1314 -0
- package/ThreeMouse.d.ts +54 -40
- package/ThreeMouse.js +453 -407
- package/ThreeMouse.ts +472 -0
- package/Transition.d.ts +45 -40
- package/Transition.js +209 -210
- package/Transition.ts +242 -0
- package/Water/Water.d.ts +5 -5
- package/Water/Water.js +44 -26
- package/Water/Water.ts +45 -0
- package/Water/index.d.ts +2 -0
- package/Water/index.js +2 -0
- package/Water/index.ts +2 -0
- package/WaterFlow/FloatingDuck.d.ts +88 -0
- package/WaterFlow/FloatingDuck.js +307 -0
- package/WaterFlow/FloatingDuck.ts +445 -0
- package/WaterFlow/GPUFluidSimulation.d.ts +56 -0
- package/WaterFlow/GPUFluidSimulation.js +785 -0
- package/WaterFlow/GPUFluidSimulation.ts +827 -0
- package/WaterFlow/ReservoirSystem.d.ts +106 -0
- package/WaterFlow/ReservoirSystem.js +621 -0
- package/WaterFlow/ReservoirSystem.ts +754 -0
- package/WaterFlow/SPHField.d.ts +35 -0
- package/WaterFlow/SPHField.js +204 -0
- package/WaterFlow/SPHField.ts +228 -0
- package/WaterFlow/ScreenSpaceFluidPass.d.ts +69 -0
- package/WaterFlow/ScreenSpaceFluidPass.js +736 -0
- package/WaterFlow/ScreenSpaceFluidPass.ts +789 -0
- package/WaterFlow/ShallowWaterSurface.d.ts +45 -0
- package/WaterFlow/ShallowWaterSurface.js +441 -0
- package/WaterFlow/ShallowWaterSurface.ts +510 -0
- package/WaterFlow/WaterFlow.d.ts +87 -0
- package/WaterFlow/WaterFlow.js +171 -0
- package/WaterFlow/WaterFlow.ts +219 -0
- package/WaterFlow/types.d.ts +161 -0
- package/WaterFlow/types.js +1 -0
- package/WaterFlow/types.ts +189 -0
- package/WaterFlow/waterFlowPass.d.ts +3 -0
- package/WaterFlow/waterFlowPass.js +20 -0
- package/WaterFlow/waterFlowPass.ts +40 -0
- package/collisionOBB.d.ts +42 -0
- package/collisionOBB.js +112 -0
- package/collisionOBB.ts +108 -0
- package/declare.d.ts +23 -165
- package/index.d.ts +1 -1
- package/index.js +1 -2
- package/index.ts +1 -0
- package/instanced/InstancedBatch.d.ts +57 -0
- package/instanced/InstancedBatch.js +348 -0
- package/instanced/InstancedBatch.ts +406 -0
- package/instanced/InstancedChild.d.ts +174 -0
- package/instanced/InstancedChild.js +264 -0
- package/instanced/InstancedChild.ts +327 -0
- package/instanced/InstancedGroup.d.ts +43 -0
- package/instanced/InstancedGroup.js +126 -0
- package/instanced/InstancedGroup.ts +137 -0
- package/{InstancedMeshBase.d.ts → instanced/InstancedMeshBase.d.ts} +38 -39
- package/{InstancedMeshBase.js → instanced/InstancedMeshBase.js} +282 -293
- package/instanced/InstancedMeshBase.ts +292 -0
- package/instanced/InstancedTemplate.d.ts +46 -0
- package/instanced/InstancedTemplate.js +125 -0
- package/instanced/InstancedTemplate.ts +188 -0
- package/keyControls.d.ts +30 -0
- package/{keyContorls.js → keyControls.js} +101 -98
- package/keyControls.ts +107 -0
- package/lensflare/LensFlare.d.ts +39 -0
- package/lensflare/LensFlare.js +373 -0
- package/lensflare/LensFlare.ts +448 -0
- package/lensflare/lensflare0.png +0 -0
- package/lensflare/lensflare3.png +0 -0
- package/lensflare/lensflare_custom.png +0 -0
- package/lensflare/lensflare_hex_ghost.png +0 -0
- package/lensflare/lensflare_hex_main.png +0 -0
- package/package.json +101 -26
- package/pass/bloom_pass.d.ts +2 -2
- package/pass/bloom_pass.js +188 -101
- package/pass/bloom_pass.ts +243 -0
- package/pass/cover_pass.d.ts +2 -2
- package/pass/cover_pass.js +122 -99
- package/pass/cover_pass.ts +182 -0
- package/pass/debugDepthState.d.ts +20 -0
- package/pass/debugDepthState.js +9 -0
- package/pass/debugDepthState.ts +22 -0
- package/pass/depthTestBias.d.ts +12 -0
- package/pass/depthTestBias.js +12 -0
- package/pass/depthTestBias.ts +12 -0
- package/pass/effectUserData.d.ts +27 -0
- package/pass/effectUserData.js +1 -0
- package/pass/effectUserData.ts +46 -0
- package/pass/frosted_glass_pass.d.ts +2 -2
- package/pass/frosted_glass_pass.js +167 -186
- package/pass/frosted_glass_pass.ts +288 -0
- package/pass/fsQuad.d.ts +9 -9
- package/pass/fsQuad.js +28 -28
- package/pass/fsQuad.ts +34 -0
- package/pass/glow_pass.d.ts +2 -2
- package/pass/glow_pass.js +449 -233
- package/pass/glow_pass.ts +654 -0
- package/pass/screen_bloom_pass.d.ts +11 -0
- package/pass/screen_bloom_pass.js +235 -0
- package/pass/screen_bloom_pass.ts +263 -0
- package/pass/ssao_pass.d.ts +88 -11
- package/pass/ssao_pass.js +802 -288
- package/pass/ssao_pass.ts +918 -0
- package/pass/stroke_pass.d.ts +2 -2
- package/pass/stroke_pass.js +329 -258
- package/pass/stroke_pass.ts +638 -0
- package/shaders/FXAAShaderMaterial.d.ts +3 -3
- package/shaders/FXAAShaderMaterial.js +23 -66
- package/shaders/FXAAShaderMaterial.ts +201 -0
- package/shaders/baseDepthVisShader.d.ts +11 -0
- package/shaders/baseDepthVisShader.js +36 -0
- package/shaders/baseDepthVisShader.ts +36 -0
- package/shaders/baseTextureToRenderShader.d.ts +2 -2
- package/shaders/baseTextureToRenderShader.js +55 -60
- package/shaders/baseTextureToRenderShader.ts +232 -0
- package/shaders/copyShader.d.ts +3 -3
- package/shaders/copyShader.js +13 -14
- package/shaders/copyShader.ts +32 -0
- package/shaders/debugDepthCompareShader.d.ts +14 -0
- package/shaders/debugDepthCompareShader.js +49 -0
- package/shaders/debugDepthCompareShader.ts +50 -0
- package/shaders/debugDepthJudgeShader.d.ts +18 -0
- package/shaders/debugDepthJudgeShader.js +52 -0
- package/shaders/debugDepthJudgeShader.ts +54 -0
- package/shaders/debugExcludedShader.d.ts +13 -0
- package/shaders/debugExcludedShader.js +46 -0
- package/shaders/debugExcludedShader.ts +48 -0
- package/spriteTextBg.d.ts +1 -0
- package/spriteTextBg.js +20 -0
- package/spriteTextBg.ts +20 -0
- package/threeLoader.d.ts +35 -34
- package/threeLoader.js +518 -527
- package/threeLoader.ts +525 -0
- package/threeUtils.d.ts +53 -52
- package/threeUtils.js +329 -330
- package/threeUtils.ts +373 -0
- package/types.d.ts +2 -0
- package/types.js +6 -0
- package/types.ts +8 -0
- package/ApngTexture.d.ts +0 -13
- package/ApngTexture.js +0 -61
- package/ApngTextureManage.d.ts +0 -18
- package/ApngTextureManage.js +0 -87
- package/KeyFrameAnimation.d.ts +0 -25
- package/KeyFrameAnimation.js +0 -78
- package/keyContorls.d.ts +0 -25
- package/lib/draco/draco_decoder.js +0 -34
- package/lib/draco/draco_decoder.wasm +0 -0
- package/lib/draco/draco_wasm_wrapper.js +0 -117
- package/shaders.d.ts +0 -5
- package/shaders.js +0 -93
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Matrix4 } from "three";
|
|
2
|
+
/**
|
|
3
|
+
* 单个纹理的运行时信息:url + 世界矩阵(位置 + 旋转,缩放忽略)。
|
|
4
|
+
* 纹理矩阵的「位置」即墨卡托投影的中心点(shader 里以它为原点求方向向量)。
|
|
5
|
+
*/
|
|
6
|
+
export interface MktTextureInfo {
|
|
7
|
+
/** 纹理地址(相对路径,兼容 hash 路由与 OSS 子目录部署)。
|
|
8
|
+
* ⚠️ 2026-09-20 起全景点改为「瓦片组合」(现行 横 8 × 竖 4 = 32 片,10-06 晚旨):渲染优先用 tiles,
|
|
9
|
+
* url 仅作兼容/回退(旧数据无 tiles 时按单张全图渲染)。 */
|
|
10
|
+
url: string;
|
|
11
|
+
/**
|
|
12
|
+
* 全景图名称(用户可编辑,用于标识这一张全景图;可留空)。
|
|
13
|
+
* 皇上旨 2026-09-19:「每一个全景图都需要一个 name 字段,并且可以编辑,放在 url 的上面」。
|
|
14
|
+
* ⚠️ 只是**标识**,不参与投影/渲染计算;留空时 UI 回落到「全景点 #索引」。
|
|
15
|
+
*/
|
|
16
|
+
name?: string;
|
|
17
|
+
/**
|
|
18
|
+
* 真瓦片地址(与 tiled 判据 `mktPanoTiledFlag` 同约定)。
|
|
19
|
+
* ⭐ 皇上旨 2026-10-06 晚(逐字)「我希望一次能够展示 8 个全景纹理, 每个全景纹理由左右 2 个 RT 组成,
|
|
20
|
+
* 每个 RT 由 16 个全景瓦片组成, 所以, 全景图在上传的时候, 只需要拆分成 横 8 * 竖 4 = 32 个瓦片图就可以了」
|
|
21
|
+
* ⇒ **现行唯一形态 = 32 张(横 8 × 竖 4)**:行优先从图像左上开始,运行时由
|
|
22
|
+
* `PanoTileStitcher` 用 shader 逐格画进 **2 张 4096×4096** `WebGLRenderTarget`(左半幅 / 右半幅,每槽 4×4 格),
|
|
23
|
+
* 2 槽组成完整全景再喂 shader。⚠️ 同一天早些时候那道「8×8 = 64 片 / 4 张 4096×2048」**已作废**。
|
|
24
|
+
* ⚠️ 每片向四边**多带** `RT_STITCH_SEAM_MARGIN_PX` 像素的邻居余量(治内部接缝;采样窗口由
|
|
25
|
+
* `rtStitchTileInset` 还原),所以片宽 ≠ 原图正好 1/8、片高 ≠ 正好 1/4。
|
|
26
|
+
* ⚠️ 只要有 1~32 条就整组交拼合器,缺的格子涂灰(数据不全一眼可见);旧的 4 张(2×2)/16 张(4×4)
|
|
27
|
+
* 逐张、逐 4 片路径已删(皇上「我会重新上传」⇒ ⛔ 不做兼容层)。
|
|
28
|
+
* 为空数组/缺省时回退到 url(单张全图,兼容旧数据)。
|
|
29
|
+
*/
|
|
30
|
+
tiles?: string[];
|
|
31
|
+
/** 纹理世界矩阵(位置 + 旋转) */
|
|
32
|
+
matrix: Matrix4;
|
|
33
|
+
}
|
|
34
|
+
/** 可序列化的单个纹理信息(矩阵展开为 16 元素数组) */
|
|
35
|
+
export interface MktTextureData {
|
|
36
|
+
url: string;
|
|
37
|
+
/** 全景图名称(用户可编辑;可留空) */
|
|
38
|
+
name?: string;
|
|
39
|
+
/** 真瓦片地址:32 张(横 8 × 竖 4,行优先;见 `MktTextureInfo.tiles`);缺省回退 url */
|
|
40
|
+
tiles?: string[];
|
|
41
|
+
matrix: number[];
|
|
42
|
+
}
|
|
43
|
+
/** 墙体正反面显示模式:正面(FrontSide) / 反面(BackSide) / 双面(DoubleSide) */
|
|
44
|
+
export type WallSide = "front" | "back" | "double";
|
|
45
|
+
/**
|
|
46
|
+
* MktMesh 导入 / 导出数据结构。
|
|
47
|
+
* 墙面(普通 Mesh)由一组地面折线点位(wallPoints,XZ 平面)挤出生成,
|
|
48
|
+
* 不再使用「实例矩阵」模型;故数据只含墙点位 + 墙高 + 是否闭合 + 纹理数组。
|
|
49
|
+
*/
|
|
50
|
+
export interface WallPoint {
|
|
51
|
+
/** 地面折线点的 X 坐标(世界) */
|
|
52
|
+
x: number;
|
|
53
|
+
/** 地面折线点的 Y 坐标(离地高度,默认 0;可调出阶梯/高低错落的墙基) */
|
|
54
|
+
y: number;
|
|
55
|
+
/** 地面折线点的 Z 坐标(世界) */
|
|
56
|
+
z: number;
|
|
57
|
+
}
|
|
58
|
+
export interface MktMeshData {
|
|
59
|
+
/** 墙体地面折线点位(XZ 平面,世界坐标),至少 2 个点才能生成墙体 */
|
|
60
|
+
wallPoints: WallPoint[];
|
|
61
|
+
/** 墙体高度(世界单位,沿 +Y 挤出) */
|
|
62
|
+
wallHeight: number;
|
|
63
|
+
/** 墙体折线是否闭合(首尾相连成环) */
|
|
64
|
+
wallClosed: boolean;
|
|
65
|
+
/** 墙体正反面显示:正面(FrontSide) / 反面(BackSide) / 双面(DoubleSide),默认双面 */
|
|
66
|
+
wallSide: WallSide;
|
|
67
|
+
/**
|
|
68
|
+
* 全景「序号直接取」映射:每个三角面(faceIndex)→ 被指派的「全景全局序号」(-1=未设)。
|
|
69
|
+
* 仅发布态/预览/编辑态的「序号直接取模式」下使用,由着色器按 aPanoIndex 在 panoIndices 槽里找对应全景纹理。
|
|
70
|
+
* 缺省(旧存档/无映射)时回落到距离-夹角取图,保证旧工程仍可正常渲染。
|
|
71
|
+
*/
|
|
72
|
+
panoFaceMapping?: number[];
|
|
73
|
+
/** 纹理数组 */
|
|
74
|
+
textures: MktTextureData[];
|
|
75
|
+
}
|
package/MktMesh/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/MktMesh/types.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: xiaosihan
|
|
3
|
+
* @Date: 2026-08-25
|
|
4
|
+
* @Description: MktMesh(墨卡托模型)的数据类型定义。
|
|
5
|
+
* - 运行时用 three 的 Matrix4(位置 + 旋转,缩放恒为 1);
|
|
6
|
+
* - 导入/导出序列化时矩阵统一展开为 16 元素 number[](列主序,同 Matrix4.toArray())。
|
|
7
|
+
*/
|
|
8
|
+
import type { Matrix4 } from "three";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 单个纹理的运行时信息:url + 世界矩阵(位置 + 旋转,缩放忽略)。
|
|
12
|
+
* 纹理矩阵的「位置」即墨卡托投影的中心点(shader 里以它为原点求方向向量)。
|
|
13
|
+
*/
|
|
14
|
+
export interface MktTextureInfo {
|
|
15
|
+
/** 纹理地址(相对路径,兼容 hash 路由与 OSS 子目录部署)。
|
|
16
|
+
* ⚠️ 2026-09-20 起全景点改为「瓦片组合」(现行 横 8 × 竖 4 = 32 片,10-06 晚旨):渲染优先用 tiles,
|
|
17
|
+
* url 仅作兼容/回退(旧数据无 tiles 时按单张全图渲染)。 */
|
|
18
|
+
url: string;
|
|
19
|
+
/**
|
|
20
|
+
* 全景图名称(用户可编辑,用于标识这一张全景图;可留空)。
|
|
21
|
+
* 皇上旨 2026-09-19:「每一个全景图都需要一个 name 字段,并且可以编辑,放在 url 的上面」。
|
|
22
|
+
* ⚠️ 只是**标识**,不参与投影/渲染计算;留空时 UI 回落到「全景点 #索引」。
|
|
23
|
+
*/
|
|
24
|
+
name?: string;
|
|
25
|
+
/**
|
|
26
|
+
* 真瓦片地址(与 tiled 判据 `mktPanoTiledFlag` 同约定)。
|
|
27
|
+
* ⭐ 皇上旨 2026-10-06 晚(逐字)「我希望一次能够展示 8 个全景纹理, 每个全景纹理由左右 2 个 RT 组成,
|
|
28
|
+
* 每个 RT 由 16 个全景瓦片组成, 所以, 全景图在上传的时候, 只需要拆分成 横 8 * 竖 4 = 32 个瓦片图就可以了」
|
|
29
|
+
* ⇒ **现行唯一形态 = 32 张(横 8 × 竖 4)**:行优先从图像左上开始,运行时由
|
|
30
|
+
* `PanoTileStitcher` 用 shader 逐格画进 **2 张 4096×4096** `WebGLRenderTarget`(左半幅 / 右半幅,每槽 4×4 格),
|
|
31
|
+
* 2 槽组成完整全景再喂 shader。⚠️ 同一天早些时候那道「8×8 = 64 片 / 4 张 4096×2048」**已作废**。
|
|
32
|
+
* ⚠️ 每片向四边**多带** `RT_STITCH_SEAM_MARGIN_PX` 像素的邻居余量(治内部接缝;采样窗口由
|
|
33
|
+
* `rtStitchTileInset` 还原),所以片宽 ≠ 原图正好 1/8、片高 ≠ 正好 1/4。
|
|
34
|
+
* ⚠️ 只要有 1~32 条就整组交拼合器,缺的格子涂灰(数据不全一眼可见);旧的 4 张(2×2)/16 张(4×4)
|
|
35
|
+
* 逐张、逐 4 片路径已删(皇上「我会重新上传」⇒ ⛔ 不做兼容层)。
|
|
36
|
+
* 为空数组/缺省时回退到 url(单张全图,兼容旧数据)。
|
|
37
|
+
*/
|
|
38
|
+
tiles?: string[];
|
|
39
|
+
/** 纹理世界矩阵(位置 + 旋转) */
|
|
40
|
+
matrix: Matrix4;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** 可序列化的单个纹理信息(矩阵展开为 16 元素数组) */
|
|
44
|
+
export interface MktTextureData {
|
|
45
|
+
url: string;
|
|
46
|
+
/** 全景图名称(用户可编辑;可留空) */
|
|
47
|
+
name?: string;
|
|
48
|
+
/** 真瓦片地址:32 张(横 8 × 竖 4,行优先;见 `MktTextureInfo.tiles`);缺省回退 url */
|
|
49
|
+
tiles?: string[];
|
|
50
|
+
matrix: number[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** 墙体正反面显示模式:正面(FrontSide) / 反面(BackSide) / 双面(DoubleSide) */
|
|
54
|
+
export type WallSide = "front" | "back" | "double";
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* MktMesh 导入 / 导出数据结构。
|
|
58
|
+
* 墙面(普通 Mesh)由一组地面折线点位(wallPoints,XZ 平面)挤出生成,
|
|
59
|
+
* 不再使用「实例矩阵」模型;故数据只含墙点位 + 墙高 + 是否闭合 + 纹理数组。
|
|
60
|
+
*/
|
|
61
|
+
export interface WallPoint {
|
|
62
|
+
/** 地面折线点的 X 坐标(世界) */
|
|
63
|
+
x: number;
|
|
64
|
+
/** 地面折线点的 Y 坐标(离地高度,默认 0;可调出阶梯/高低错落的墙基) */
|
|
65
|
+
y: number;
|
|
66
|
+
/** 地面折线点的 Z 坐标(世界) */
|
|
67
|
+
z: number;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface MktMeshData {
|
|
71
|
+
/** 墙体地面折线点位(XZ 平面,世界坐标),至少 2 个点才能生成墙体 */
|
|
72
|
+
wallPoints: WallPoint[];
|
|
73
|
+
/** 墙体高度(世界单位,沿 +Y 挤出) */
|
|
74
|
+
wallHeight: number;
|
|
75
|
+
/** 墙体折线是否闭合(首尾相连成环) */
|
|
76
|
+
wallClosed: boolean;
|
|
77
|
+
/** 墙体正反面显示:正面(FrontSide) / 反面(BackSide) / 双面(DoubleSide),默认双面 */
|
|
78
|
+
wallSide: WallSide;
|
|
79
|
+
/**
|
|
80
|
+
* 全景「序号直接取」映射:每个三角面(faceIndex)→ 被指派的「全景全局序号」(-1=未设)。
|
|
81
|
+
* 仅发布态/预览/编辑态的「序号直接取模式」下使用,由着色器按 aPanoIndex 在 panoIndices 槽里找对应全景纹理。
|
|
82
|
+
* 缺省(旧存档/无映射)时回落到距离-夹角取图,保证旧工程仍可正常渲染。
|
|
83
|
+
*/
|
|
84
|
+
panoFaceMapping?: number[];
|
|
85
|
+
/** 纹理数组 */
|
|
86
|
+
textures: MktTextureData[];
|
|
87
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 墙体上/下**封盖的三角形细分**(皇上旨 2026-10-07「上下封口的三角面能不能不要那么长 / 三角面再细分一下,
|
|
3
|
+
* 不要那么大」)。
|
|
4
|
+
*
|
|
5
|
+
* ## 为什么要切
|
|
6
|
+
* 封盖是用 `ShapeGeometry` 对墙的地面折线做**耳切三角化**得来的 —— 房间是矩形时,切出来常常是
|
|
7
|
+
* 两个横跨整个房间的细长大三角。而「序号映射 / 取图」是**逐三角面**指派的(`aPanoIndex`,一个面一个号)
|
|
8
|
+
* ⇒ 一块封盖三角面 = 一整片天花板或地面只能显示同一张全景,走到房间另一头也不换图。
|
|
9
|
+
* 切细之后:封盖上「一张全景」的区块变成若干米见方,天花板和地面终于能分区显示。
|
|
10
|
+
*
|
|
11
|
+
* ## 文件为什么单独一份
|
|
12
|
+
* ⭐ 与 `panoSlotRoster.ts` 同一套路:**零 import 的纯函数**,不碰 three、不碰 GL。
|
|
13
|
+
* ① 几何算法一处实现,`MktMesh` 只调一行;② 护栏测试可以单独转译本文件**真跑数字**
|
|
14
|
+
* (整个 `MktMesh` 要拉起 three 与一堆材质,太重、跑不动)。
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* 上/下封盖三角化后,单个三角形的**水平最长边**上限(米):超了就二分,直到每条边都不长于它。
|
|
18
|
+
* ⛔ 0 / 负数 / 非数 = **不细分** = 10-07 之前那一版(耳切大三角,一个能横跨整个房间)。
|
|
19
|
+
*/
|
|
20
|
+
export declare const WALL_CAP_MAX_EDGE_M = 2;
|
|
21
|
+
/** 细分硬顶:单个封盖最多这么多三角形(防阈值填得太小把面数炸穿 ⇒ 改墙那一下卡死)。 */
|
|
22
|
+
export declare const WALL_CAP_MAX_TRIS = 20000;
|
|
23
|
+
/**
|
|
24
|
+
* 把一批共面三角形按**最长边二分**切开,直到每条边的**水平长度**都不长于 `maxEdge`。
|
|
25
|
+
*
|
|
26
|
+
* · 输入/输出都是扁平数组(每 9 个数一个三角形:a.xyz / b.xyz / c.xyz),输出**按输入三角形的顺序展开**
|
|
27
|
+
* (第 i 个输入三角形切出来的那一批连在一起)⇒ 面序号与「未细分那一版」**逐块对应**,
|
|
28
|
+
* 存档里旧的逐面序号才能按块继承(`importData` 那句「按较小者逐面灌回」自动就对,无需第二套映射表)。
|
|
29
|
+
* · y 参与线性插值(中点取两端平均):封盖顶点 y = 该处墙基高度,切出来的中点必须落在原平面上。
|
|
30
|
+
* ⛔ 不能拿中点的 (x,z) 去反查点位高度 —— 内部点查不到会被打成 0 ⇒ 封盖塌下去。
|
|
31
|
+
* · ⛔ 只量**水平(XZ)**长度:封盖「大不大」看的是占地面积,墙基那点高低差不该把面切得更碎。
|
|
32
|
+
*/
|
|
33
|
+
export declare function subdivideCapTriangles(src: number[], maxEdge: number, maxTris?: number): number[];
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 墙体上/下**封盖的三角形细分**(皇上旨 2026-10-07「上下封口的三角面能不能不要那么长 / 三角面再细分一下,
|
|
3
|
+
* 不要那么大」)。
|
|
4
|
+
*
|
|
5
|
+
* ## 为什么要切
|
|
6
|
+
* 封盖是用 `ShapeGeometry` 对墙的地面折线做**耳切三角化**得来的 —— 房间是矩形时,切出来常常是
|
|
7
|
+
* 两个横跨整个房间的细长大三角。而「序号映射 / 取图」是**逐三角面**指派的(`aPanoIndex`,一个面一个号)
|
|
8
|
+
* ⇒ 一块封盖三角面 = 一整片天花板或地面只能显示同一张全景,走到房间另一头也不换图。
|
|
9
|
+
* 切细之后:封盖上「一张全景」的区块变成若干米见方,天花板和地面终于能分区显示。
|
|
10
|
+
*
|
|
11
|
+
* ## 文件为什么单独一份
|
|
12
|
+
* ⭐ 与 `panoSlotRoster.ts` 同一套路:**零 import 的纯函数**,不碰 three、不碰 GL。
|
|
13
|
+
* ① 几何算法一处实现,`MktMesh` 只调一行;② 护栏测试可以单独转译本文件**真跑数字**
|
|
14
|
+
* (整个 `MktMesh` 要拉起 three 与一堆材质,太重、跑不动)。
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* 上/下封盖三角化后,单个三角形的**水平最长边**上限(米):超了就二分,直到每条边都不长于它。
|
|
18
|
+
* ⛔ 0 / 负数 / 非数 = **不细分** = 10-07 之前那一版(耳切大三角,一个能横跨整个房间)。
|
|
19
|
+
*/
|
|
20
|
+
export const WALL_CAP_MAX_EDGE_M = 2;
|
|
21
|
+
/** 细分硬顶:单个封盖最多这么多三角形(防阈值填得太小把面数炸穿 ⇒ 改墙那一下卡死)。 */
|
|
22
|
+
export const WALL_CAP_MAX_TRIS = 20000;
|
|
23
|
+
/**
|
|
24
|
+
* 把一批共面三角形按**最长边二分**切开,直到每条边的**水平长度**都不长于 `maxEdge`。
|
|
25
|
+
*
|
|
26
|
+
* · 输入/输出都是扁平数组(每 9 个数一个三角形:a.xyz / b.xyz / c.xyz),输出**按输入三角形的顺序展开**
|
|
27
|
+
* (第 i 个输入三角形切出来的那一批连在一起)⇒ 面序号与「未细分那一版」**逐块对应**,
|
|
28
|
+
* 存档里旧的逐面序号才能按块继承(`importData` 那句「按较小者逐面灌回」自动就对,无需第二套映射表)。
|
|
29
|
+
* · y 参与线性插值(中点取两端平均):封盖顶点 y = 该处墙基高度,切出来的中点必须落在原平面上。
|
|
30
|
+
* ⛔ 不能拿中点的 (x,z) 去反查点位高度 —— 内部点查不到会被打成 0 ⇒ 封盖塌下去。
|
|
31
|
+
* · ⛔ 只量**水平(XZ)**长度:封盖「大不大」看的是占地面积,墙基那点高低差不该把面切得更碎。
|
|
32
|
+
*/
|
|
33
|
+
export function subdivideCapTriangles(src, maxEdge, maxTris = WALL_CAP_MAX_TRIS) {
|
|
34
|
+
if (!(maxEdge > 0) || !isFinite(maxEdge))
|
|
35
|
+
return src.slice();
|
|
36
|
+
const maxE2 = maxEdge * maxEdge;
|
|
37
|
+
const out = [];
|
|
38
|
+
for (let i = 0; i < src.length; i += 9) {
|
|
39
|
+
// ⚠️ 每个输入三角形**单独**用一个栈 ⇒ 输出顺序 = 输入顺序展开(全局共用一个栈会把顺序打乱,
|
|
40
|
+
// 那样旧存档的逐面序号就对不上了)。
|
|
41
|
+
const local = [src.slice(i, i + 9)];
|
|
42
|
+
let made = 0;
|
|
43
|
+
while (local.length) {
|
|
44
|
+
const t = local.pop();
|
|
45
|
+
const e0 = (t[0] - t[3]) * (t[0] - t[3]) + (t[2] - t[5]) * (t[2] - t[5]);
|
|
46
|
+
const e1 = (t[3] - t[6]) * (t[3] - t[6]) + (t[5] - t[8]) * (t[5] - t[8]);
|
|
47
|
+
const e2 = (t[6] - t[0]) * (t[6] - t[0]) + (t[8] - t[2]) * (t[8] - t[2]);
|
|
48
|
+
const m = Math.max(e0, e1, e2);
|
|
49
|
+
// ⚠️ 硬顶看的是**最终面数** = 已出的 + 栈里待出的 + 手上这一个(刚 pop 出来、还没归位):
|
|
50
|
+
// 只看「已出的」不算数 —— 栈里那一堆已切半的面照样会全倒出来 ⇒ 上限被穿成两三倍。
|
|
51
|
+
if (m <= maxE2 || out.length / 9 + local.length + 1 >= maxTris || made++ > 200000) {
|
|
52
|
+
out.push(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8]);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// 最长边 = (a,b) / (b,c) / (c,a) 里的一条,它的两端记为 a、b,剩下那点记为 o
|
|
56
|
+
let ax, ay, az, bx, by, bz, ox, oy, oz;
|
|
57
|
+
if (m === e0) {
|
|
58
|
+
ax = t[0];
|
|
59
|
+
ay = t[1];
|
|
60
|
+
az = t[2];
|
|
61
|
+
bx = t[3];
|
|
62
|
+
by = t[4];
|
|
63
|
+
bz = t[5];
|
|
64
|
+
ox = t[6];
|
|
65
|
+
oy = t[7];
|
|
66
|
+
oz = t[8];
|
|
67
|
+
}
|
|
68
|
+
else if (m === e1) {
|
|
69
|
+
ax = t[3];
|
|
70
|
+
ay = t[4];
|
|
71
|
+
az = t[5];
|
|
72
|
+
bx = t[6];
|
|
73
|
+
by = t[7];
|
|
74
|
+
bz = t[8];
|
|
75
|
+
ox = t[0];
|
|
76
|
+
oy = t[1];
|
|
77
|
+
oz = t[2];
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
ax = t[6];
|
|
81
|
+
ay = t[7];
|
|
82
|
+
az = t[8];
|
|
83
|
+
bx = t[0];
|
|
84
|
+
by = t[1];
|
|
85
|
+
bz = t[2];
|
|
86
|
+
ox = t[3];
|
|
87
|
+
oy = t[4];
|
|
88
|
+
oz = t[5];
|
|
89
|
+
}
|
|
90
|
+
const mx = (ax + bx) / 2, my = (ay + by) / 2, mz = (az + bz) / 2;
|
|
91
|
+
// 先出 A 半(a,m,o)再出 B 半(m,b,o):栈后进先出 ⇒ 先压 B 再压 A
|
|
92
|
+
local.push([mx, my, mz, bx, by, bz, ox, oy, oz]);
|
|
93
|
+
local.push([ax, ay, az, mx, my, mz, ox, oy, oz]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 墙体上/下**封盖的三角形细分**(皇上旨 2026-10-07「上下封口的三角面能不能不要那么长 / 三角面再细分一下,
|
|
3
|
+
* 不要那么大」)。
|
|
4
|
+
*
|
|
5
|
+
* ## 为什么要切
|
|
6
|
+
* 封盖是用 `ShapeGeometry` 对墙的地面折线做**耳切三角化**得来的 —— 房间是矩形时,切出来常常是
|
|
7
|
+
* 两个横跨整个房间的细长大三角。而「序号映射 / 取图」是**逐三角面**指派的(`aPanoIndex`,一个面一个号)
|
|
8
|
+
* ⇒ 一块封盖三角面 = 一整片天花板或地面只能显示同一张全景,走到房间另一头也不换图。
|
|
9
|
+
* 切细之后:封盖上「一张全景」的区块变成若干米见方,天花板和地面终于能分区显示。
|
|
10
|
+
*
|
|
11
|
+
* ## 文件为什么单独一份
|
|
12
|
+
* ⭐ 与 `panoSlotRoster.ts` 同一套路:**零 import 的纯函数**,不碰 three、不碰 GL。
|
|
13
|
+
* ① 几何算法一处实现,`MktMesh` 只调一行;② 护栏测试可以单独转译本文件**真跑数字**
|
|
14
|
+
* (整个 `MktMesh` 要拉起 three 与一堆材质,太重、跑不动)。
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 上/下封盖三角化后,单个三角形的**水平最长边**上限(米):超了就二分,直到每条边都不长于它。
|
|
19
|
+
* ⛔ 0 / 负数 / 非数 = **不细分** = 10-07 之前那一版(耳切大三角,一个能横跨整个房间)。
|
|
20
|
+
*/
|
|
21
|
+
export const WALL_CAP_MAX_EDGE_M = 2;
|
|
22
|
+
/** 细分硬顶:单个封盖最多这么多三角形(防阈值填得太小把面数炸穿 ⇒ 改墙那一下卡死)。 */
|
|
23
|
+
export const WALL_CAP_MAX_TRIS = 20000;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 把一批共面三角形按**最长边二分**切开,直到每条边的**水平长度**都不长于 `maxEdge`。
|
|
27
|
+
*
|
|
28
|
+
* · 输入/输出都是扁平数组(每 9 个数一个三角形:a.xyz / b.xyz / c.xyz),输出**按输入三角形的顺序展开**
|
|
29
|
+
* (第 i 个输入三角形切出来的那一批连在一起)⇒ 面序号与「未细分那一版」**逐块对应**,
|
|
30
|
+
* 存档里旧的逐面序号才能按块继承(`importData` 那句「按较小者逐面灌回」自动就对,无需第二套映射表)。
|
|
31
|
+
* · y 参与线性插值(中点取两端平均):封盖顶点 y = 该处墙基高度,切出来的中点必须落在原平面上。
|
|
32
|
+
* ⛔ 不能拿中点的 (x,z) 去反查点位高度 —— 内部点查不到会被打成 0 ⇒ 封盖塌下去。
|
|
33
|
+
* · ⛔ 只量**水平(XZ)**长度:封盖「大不大」看的是占地面积,墙基那点高低差不该把面切得更碎。
|
|
34
|
+
*/
|
|
35
|
+
export function subdivideCapTriangles(src: number[], maxEdge: number, maxTris: number = WALL_CAP_MAX_TRIS): number[] {
|
|
36
|
+
if (!(maxEdge > 0) || !isFinite(maxEdge)) return src.slice();
|
|
37
|
+
const maxE2 = maxEdge * maxEdge;
|
|
38
|
+
const out: number[] = [];
|
|
39
|
+
for (let i = 0; i < src.length; i += 9) {
|
|
40
|
+
// ⚠️ 每个输入三角形**单独**用一个栈 ⇒ 输出顺序 = 输入顺序展开(全局共用一个栈会把顺序打乱,
|
|
41
|
+
// 那样旧存档的逐面序号就对不上了)。
|
|
42
|
+
const local: number[][] = [src.slice(i, i + 9)];
|
|
43
|
+
let made = 0;
|
|
44
|
+
while (local.length) {
|
|
45
|
+
const t = local.pop() as number[];
|
|
46
|
+
const e0 = (t[0] - t[3]) * (t[0] - t[3]) + (t[2] - t[5]) * (t[2] - t[5]);
|
|
47
|
+
const e1 = (t[3] - t[6]) * (t[3] - t[6]) + (t[5] - t[8]) * (t[5] - t[8]);
|
|
48
|
+
const e2 = (t[6] - t[0]) * (t[6] - t[0]) + (t[8] - t[2]) * (t[8] - t[2]);
|
|
49
|
+
const m = Math.max(e0, e1, e2);
|
|
50
|
+
// ⚠️ 硬顶看的是**最终面数** = 已出的 + 栈里待出的 + 手上这一个(刚 pop 出来、还没归位):
|
|
51
|
+
// 只看「已出的」不算数 —— 栈里那一堆已切半的面照样会全倒出来 ⇒ 上限被穿成两三倍。
|
|
52
|
+
if (m <= maxE2 || out.length / 9 + local.length + 1 >= maxTris || made++ > 200000) {
|
|
53
|
+
out.push(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8]);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// 最长边 = (a,b) / (b,c) / (c,a) 里的一条,它的两端记为 a、b,剩下那点记为 o
|
|
57
|
+
let ax: number, ay: number, az: number, bx: number, by: number, bz: number, ox: number, oy: number, oz: number;
|
|
58
|
+
if (m === e0) { ax = t[0]; ay = t[1]; az = t[2]; bx = t[3]; by = t[4]; bz = t[5]; ox = t[6]; oy = t[7]; oz = t[8]; }
|
|
59
|
+
else if (m === e1) { ax = t[3]; ay = t[4]; az = t[5]; bx = t[6]; by = t[7]; bz = t[8]; ox = t[0]; oy = t[1]; oz = t[2]; }
|
|
60
|
+
else { ax = t[6]; ay = t[7]; az = t[8]; bx = t[0]; by = t[1]; bz = t[2]; ox = t[3]; oy = t[4]; oz = t[5]; }
|
|
61
|
+
const mx = (ax + bx) / 2, my = (ay + by) / 2, mz = (az + bz) / 2;
|
|
62
|
+
// 先出 A 半(a,m,o)再出 B 半(m,b,o):栈后进先出 ⇒ 先压 B 再压 A
|
|
63
|
+
local.push([mx, my, mz, bx, by, bz, ox, oy, oz]);
|
|
64
|
+
local.push([ax, ay, az, mx, my, mz, ox, oy, oz]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { Usage } from 'three/src/constants.js';
|
|
2
|
-
import type { PathPointList } from './PathPointList.js';
|
|
3
|
-
import { BufferGeometry } from 'three/src/core/BufferGeometry.js';
|
|
4
|
-
export interface Options {
|
|
5
|
-
radius?: number;
|
|
6
|
-
width?: number;
|
|
7
|
-
progress?: number;
|
|
8
|
-
radialSegments?: number;
|
|
9
|
-
startRad?: number;
|
|
10
|
-
arrow?: boolean;
|
|
11
|
-
side?: 'both' | 'left' | 'right';
|
|
12
|
-
}
|
|
13
|
-
export interface PathGeometryParam {
|
|
14
|
-
pathPointList: PathPointList;
|
|
15
|
-
options: Options;
|
|
16
|
-
usage: Usage;
|
|
17
|
-
transparent: boolean;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* PathGeometry
|
|
21
|
-
*/
|
|
22
|
-
declare class PathGeometry extends BufferGeometry {
|
|
23
|
-
/**
|
|
24
|
-
* @param {Object|Number} initData - If initData is number, geometry init by empty data and set it as the max vertex. If initData is Object, it contains pathPointList and options.
|
|
25
|
-
* @param {Boolean} [generateUv2=false]
|
|
26
|
-
*/
|
|
27
|
-
constructor(initData: PathGeometryParam, generateUv2?: boolean);
|
|
28
|
-
_initByMaxVertex(maxVertex: number, generateUv2: boolean): void;
|
|
29
|
-
_initByData(pathPointList: PathPointList, options: Options, usage: Usage, generateUv2: boolean): void;
|
|
30
|
-
/**
|
|
31
|
-
* Update geometry by PathPointList instance
|
|
32
|
-
* @param {PathPointList} pathPointList
|
|
33
|
-
* @param {Object} options
|
|
34
|
-
* @param {Number} [options.width=0.1]
|
|
35
|
-
* @param {Number} [options.progress=1]
|
|
36
|
-
* @param {Boolean} [options.arrow=true]
|
|
37
|
-
* @param {String} [options.side='both'] - "left"/"right"/"both"
|
|
38
|
-
*/
|
|
39
|
-
update(pathPointList: PathPointList, options: Options): void;
|
|
40
|
-
_resizeAttribute(name: string, len: number): void;
|
|
41
|
-
_resizeIndex(len: number): void;
|
|
42
|
-
_updateAttributes(position: Array<number>, normal: Array<number>, uv: Array<number>, uv2: Array<number> | null, indices: Array<number>): void;
|
|
43
|
-
}
|
|
44
|
-
export { PathGeometry };
|
|
1
|
+
import { Usage } from 'three/src/constants.js';
|
|
2
|
+
import type { PathPointList } from './PathPointList.js';
|
|
3
|
+
import { BufferGeometry } from 'three/src/core/BufferGeometry.js';
|
|
4
|
+
export interface Options {
|
|
5
|
+
radius?: number;
|
|
6
|
+
width?: number;
|
|
7
|
+
progress?: number;
|
|
8
|
+
radialSegments?: number;
|
|
9
|
+
startRad?: number;
|
|
10
|
+
arrow?: boolean;
|
|
11
|
+
side?: 'both' | 'left' | 'right';
|
|
12
|
+
}
|
|
13
|
+
export interface PathGeometryParam {
|
|
14
|
+
pathPointList: PathPointList;
|
|
15
|
+
options: Options;
|
|
16
|
+
usage: Usage;
|
|
17
|
+
transparent: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* PathGeometry
|
|
21
|
+
*/
|
|
22
|
+
declare class PathGeometry extends BufferGeometry {
|
|
23
|
+
/**
|
|
24
|
+
* @param {Object|Number} initData - If initData is number, geometry init by empty data and set it as the max vertex. If initData is Object, it contains pathPointList and options.
|
|
25
|
+
* @param {Boolean} [generateUv2=false]
|
|
26
|
+
*/
|
|
27
|
+
constructor(initData: PathGeometryParam, generateUv2?: boolean);
|
|
28
|
+
_initByMaxVertex(maxVertex: number, generateUv2: boolean): void;
|
|
29
|
+
_initByData(pathPointList: PathPointList, options: Options, usage: Usage, generateUv2: boolean): void;
|
|
30
|
+
/**
|
|
31
|
+
* Update geometry by PathPointList instance
|
|
32
|
+
* @param {PathPointList} pathPointList
|
|
33
|
+
* @param {Object} options
|
|
34
|
+
* @param {Number} [options.width=0.1]
|
|
35
|
+
* @param {Number} [options.progress=1]
|
|
36
|
+
* @param {Boolean} [options.arrow=true]
|
|
37
|
+
* @param {String} [options.side='both'] - "left"/"right"/"both"
|
|
38
|
+
*/
|
|
39
|
+
update(pathPointList: PathPointList, options: Options): void;
|
|
40
|
+
_resizeAttribute(name: string, len: number): void;
|
|
41
|
+
_resizeIndex(len: number): void;
|
|
42
|
+
_updateAttributes(position: Array<number>, normal: Array<number>, uv: Array<number>, uv2: Array<number> | null, indices: Array<number>): void;
|
|
43
|
+
}
|
|
44
|
+
export { PathGeometry };
|