s3m-three 0.3.8 → 0.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/browser/s3m-three.iife.ext-three.js +322 -47
  2. package/dist/browser/s3m-three.iife.js +322 -47
  3. package/dist/core/types.d.ts +20 -0
  4. package/dist/core/types.d.ts.map +1 -1
  5. package/dist/index.d.ts +5 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/render/EdgeLines.d.ts +18 -0
  10. package/dist/render/EdgeLines.d.ts.map +1 -1
  11. package/dist/render/EdgeLines.js +95 -13
  12. package/dist/render/EdgeLines.js.map +1 -1
  13. package/dist/render/FeatureStyleManager.d.ts +78 -0
  14. package/dist/render/FeatureStyleManager.d.ts.map +1 -1
  15. package/dist/render/FeatureStyleManager.js +407 -59
  16. package/dist/render/FeatureStyleManager.js.map +1 -1
  17. package/dist/render/GPUPathManager.d.ts +95 -0
  18. package/dist/render/GPUPathManager.d.ts.map +1 -0
  19. package/dist/render/GPUPathManager.js +265 -0
  20. package/dist/render/GPUPathManager.js.map +1 -0
  21. package/dist/render/OrthoProjection.d.ts +6 -0
  22. package/dist/render/OrthoProjection.d.ts.map +1 -1
  23. package/dist/render/OrthoProjection.js +48 -0
  24. package/dist/render/OrthoProjection.js.map +1 -1
  25. package/dist/render/S3MViewer.d.ts +66 -0
  26. package/dist/render/S3MViewer.d.ts.map +1 -1
  27. package/dist/render/S3MViewer.js +218 -6
  28. package/dist/render/S3MViewer.js.map +1 -1
  29. package/dist/render/StyleMaterial.d.ts +21 -0
  30. package/dist/render/StyleMaterial.d.ts.map +1 -1
  31. package/dist/render/StyleMaterial.js +256 -21
  32. package/dist/render/StyleMaterial.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/core/types.ts +10 -0
  35. package/src/index.ts +8 -0
  36. package/src/render/EdgeLines.ts +101 -13
  37. package/src/render/FeatureStyleManager.ts +524 -64
  38. package/src/render/GPUPathManager.ts +306 -0
  39. package/src/render/OrthoProjection.ts +52 -0
  40. package/src/render/S3MViewer.ts +272 -5
  41. package/src/render/StyleMaterial.ts +264 -21
@@ -10,6 +10,7 @@
10
10
  */
11
11
  import * as THREE from 'three';
12
12
  import { DEFAULT_FLOOR_HEIGHT } from '../core/FeatureInfo.js';
13
+ import { GPUPathManager } from './GPUPathManager.js';
13
14
  /** 着色模式,数值与着色器里的 uMode 一一对应 */
14
15
  export const STYLE = {
15
16
  WHITE: 0, // 白膜:忽略贴图与顶点色,纯色 + 光照
@@ -82,8 +83,15 @@ export const DEFAULT_STYLE = {
82
83
  depthWrite: true,
83
84
  fadeIn: 0,
84
85
  };
85
- const DUMMY_DATA = new Float32Array([-1, -1, -1, 0, 0, 0, 0, 0]);
86
- export const DUMMY_BATCH_TEX = new THREE.DataTexture(DUMMY_DATA, 1, 2, THREE.RGBAFormat, THREE.FloatType);
86
+ const DUMMY_DATA = new Float32Array([
87
+ -1, -1, -1, 0, // Row 0: color rgb, elevation/hidden
88
+ 0, 0, 0, 0, // Row 1: translation xyz, opacity
89
+ 1, 0, 0, 0, // Row 2: rot row 0, pivot.x
90
+ 0, 1, 0, 0, // Row 3: rot row 1, pivot.y
91
+ 0, 0, 1, 0, // Row 4: rot row 2, pivot.z
92
+ -1, 0, 0, 0, // Row 5: pathId (-1=none), speed, phase, modeFlag
93
+ ]);
94
+ export const DUMMY_BATCH_TEX = new THREE.DataTexture(DUMMY_DATA, 1, 6, THREE.RGBAFormat, THREE.FloatType);
87
95
  DUMMY_BATCH_TEX.minFilter = THREE.NearestFilter;
88
96
  DUMMY_BATCH_TEX.magFilter = THREE.NearestFilter;
89
97
  DUMMY_BATCH_TEX.needsUpdate = true;
@@ -126,6 +134,16 @@ export function createSharedUniforms() {
126
134
  uTexMix: { value: 0 },
127
135
  /** 基础底色增益 / 暗部补偿(0~1,默认 0.0) */
128
136
  uAmbientGain: { value: 0 },
137
+ /** 双纹理交叉淡化插值系数(0 = 纯 uBatchTex, 1 = 纯 uBatchTex2) */
138
+ uBatchMix: { value: 0 },
139
+ /** GPU 路径数据采样纹理 */
140
+ uPathTex: { value: GPUPathManager.DUMMY_PATH_TEX },
141
+ /** GPU 路径纹理中包含的路径条数(高度) */
142
+ uPathCount: { value: 1 },
143
+ /** 是否激活 GPU 路径动画(0 = 未激活,1 = 激活) */
144
+ uPathTexActive: { value: 0 },
145
+ /** GPU 路径时间戳(秒) */
146
+ uPathTime: { value: 0 },
129
147
  /**
130
148
  * 图层整体透明度:在片元里乘进 diffuseColor.a。
131
149
  *
@@ -164,14 +182,25 @@ const VERT_PARS = /* glsl */ `
164
182
  uniform float uSelWhole;
165
183
  uniform float uSelElevation;
166
184
  uniform sampler2D uBatchTex;
185
+ uniform sampler2D uBatchTex2;
186
+ uniform float uBatchMix;
167
187
  uniform float uBatchTexWidth;
168
188
  uniform int uBatchTexActive;
189
+ uniform sampler2D uPathTex;
190
+ uniform float uPathCount;
191
+ uniform float uPathTime;
192
+ uniform int uPathTexActive;
169
193
  varying float vBatchId;
170
194
  varying vec3 vVertColor;
171
195
  varying float vWorldZ;
172
196
  varying vec3 vWorldNormal;
173
197
  varying vec3 vWorldPos;
174
198
 
199
+ // 跨 chunk 共享的顶点姿态变量(在 beginnormal_vertex 建立,begin_vertex / worldpos 使用)
200
+ vec3 s3mCustomOffset;
201
+ mat3 s3mRot;
202
+ vec3 s3mPivot;
203
+
175
204
  /** 当前图元所属单体的控制位:实例化取实例属性,其余取逐顶点属性 */
176
205
  float s3mBatchRaw() {
177
206
  #ifdef USE_INSTANCING
@@ -180,26 +209,124 @@ const VERT_PARS = /* glsl */ `
180
209
  return aBatchId;
181
210
  #endif
182
211
  }
212
+
213
+ vec4 s3mSampleBatch( sampler2D texA, sampler2D texB, vec2 uv, float mixVal ) {
214
+ vec4 vA = texture2D( texA, uv );
215
+ if ( mixVal <= 0.0001 ) return vA;
216
+ vec4 vB = texture2D( texB, uv );
217
+ return mix( vA, vB, mixVal );
218
+ }
219
+
220
+ vec4 s3mSampleBatchRow0( sampler2D texA, sampler2D texB, vec2 uv, float mixVal ) {
221
+ vec4 vA = texture2D( texA, uv );
222
+ if ( mixVal <= 0.0001 ) return vA;
223
+ vec4 vB = texture2D( texB, uv );
224
+ vec4 res = mix( vA, vB, mixVal );
225
+ if ( vA.r < 0.0 && vB.r >= 0.0 ) {
226
+ res.rgb = vB.rgb;
227
+ } else if ( vA.r >= 0.0 && vB.r < 0.0 ) {
228
+ res.rgb = vA.rgb;
229
+ }
230
+ if ( vA.a < -0.5 || vB.a < -0.5 ) {
231
+ res.a = ( mixVal >= 0.5 ) ? vB.a : vA.a;
232
+ }
233
+ return res;
234
+ }
235
+
236
+ vec4 s3mSampleBatchRow1( sampler2D texA, sampler2D texB, vec2 uv, float mixVal ) {
237
+ vec4 vA = texture2D( texA, uv );
238
+ if ( mixVal <= 0.0001 ) return vA;
239
+ vec4 vB = texture2D( texB, uv );
240
+ vec4 res = mix( vA, vB, mixVal );
241
+ if ( vA.a == 0.0 && vB.a > 0.0 ) {
242
+ res.a = mix( 1.0, vB.a, mixVal );
243
+ } else if ( vA.a > 0.0 && vB.a == 0.0 ) {
244
+ res.a = mix( vA.a, 1.0, mixVal );
245
+ }
246
+ return res;
247
+ }
183
248
  `;
184
- const VERT_ELEVATION = /* glsl */ `
185
- float s3mBatch = s3mBatchRaw();
186
- vec3 s3mCustomOffset = vec3( 0.0 );
187
- if ( uBatchTexActive > 0 && s3mBatch >= 0.0 ) {
188
- vec4 bState = texture2D( uBatchTex, vec2( ( s3mBatch + 0.5 ) / uBatchTexWidth, 0.25 ) );
189
- if ( bState.a < -0.5 ) {
190
- transformed = vec3( 0.0 );
191
- } else {
192
- vec4 bOffset = texture2D( uBatchTex, vec2( ( s3mBatch + 0.5 ) / uBatchTexWidth, 0.75 ) );
249
+ const VERT_SETUP = /* glsl */ `
250
+ s3mCustomOffset = vec3( 0.0 );
251
+ s3mRot = mat3( 1.0 );
252
+ s3mPivot = vec3( 0.0 );
253
+ float s3mBatchSetup = s3mBatchRaw();
254
+ if ( uBatchTexActive > 0 && s3mBatchSetup >= 0.0 ) {
255
+ float s3mU = ( s3mBatchSetup + 0.5 ) / uBatchTexWidth;
256
+ vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
257
+ if ( bState.a >= -0.5 ) {
258
+ vec4 bOffset = s3mSampleBatchRow1( uBatchTex, uBatchTex2, vec2( s3mU, 0.25 ), uBatchMix );
193
259
  s3mCustomOffset = bOffset.xyz;
194
260
  if ( s3mCustomOffset.z == 0.0 && bState.a > 0.0 ) {
195
261
  s3mCustomOffset.z = bState.a;
196
262
  }
263
+ vec4 r2 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.41666667 ), uBatchMix );
264
+ vec4 r3 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.58333333 ), uBatchMix );
265
+ vec4 r4 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.75 ), uBatchMix );
266
+ s3mRot = mat3(
267
+ vec3( r2.x, r3.x, r4.x ),
268
+ vec3( r2.y, r3.y, r4.y ),
269
+ vec3( r2.z, r3.z, r4.z )
270
+ );
271
+ s3mPivot = vec3( r2.w, r3.w, r4.w );
272
+
273
+ // Row 5: GPU 路径动画计算
274
+ if ( uPathTexActive > 0 ) {
275
+ vec4 r5 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.91666667 ), uBatchMix );
276
+ float pathId = r5.x;
277
+ float speed = r5.y;
278
+ float phase = r5.z;
279
+ float mode = r5.w;
280
+ if ( pathId >= 0.0 && mode > 0.5 && uPathCount > 0.0 ) {
281
+ float t = phase + uPathTime * speed;
282
+ bool autoHeading = true;
283
+ if ( mode >= 4.0 ) {
284
+ autoHeading = false;
285
+ mode -= 3.0;
286
+ }
287
+ if ( mode < 1.5 ) {
288
+ t = fract( t );
289
+ } else if ( mode < 2.5 ) {
290
+ t = clamp( t, 0.0, 1.0 );
291
+ } else {
292
+ t = mod( t, 2.0 );
293
+ t = ( t > 1.0 ) ? ( 2.0 - t ) : t;
294
+ }
295
+ float pathU = ( t * 255.0 + 0.5 ) / 256.0;
296
+ float pathV = ( pathId + 0.5 ) / uPathCount;
297
+ vec4 pathSample = texture2D( uPathTex, vec2( pathU, pathV ) );
298
+ vec3 pathPos = pathSample.xyz;
299
+ float pathYaw = pathSample.w;
300
+ if ( autoHeading ) {
301
+ float c = cos( pathYaw );
302
+ float s = sin( pathYaw );
303
+ mat3 rotHeading = mat3(
304
+ c, -s, 0.0,
305
+ s, c, 0.0,
306
+ 0.0, 0.0, 1.0
307
+ );
308
+ s3mRot = rotHeading * s3mRot;
309
+ }
310
+ s3mCustomOffset += pathPos;
311
+ }
312
+ }
313
+ }
314
+ }
315
+ objectNormal = normalize( s3mRot * objectNormal );
316
+ `;
317
+ const VERT_ELEVATION = /* glsl */ `
318
+ float s3mBatchElev = s3mBatchRaw();
319
+ if ( uBatchTexActive > 0 && s3mBatchElev >= 0.0 ) {
320
+ float s3mU = ( s3mBatchElev + 0.5 ) / uBatchTexWidth;
321
+ vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
322
+ if ( bState.a < -0.5 ) {
323
+ transformed = vec3( 0.0 );
197
324
  }
198
325
  }
199
326
 
200
- float s3mSelElev = max( step( 0.0, uSelBatch ) * step( abs( s3mBatch - uSelBatch ), 0.5 ), uSelWhole );
201
- // 实例化时这是局部坐标,实例矩阵只含平移 + 绕 z 旋转(白模摆位),所以偏移仍沿局部轴生效
202
- transformed += s3mCustomOffset;
327
+ float s3mSelElev = max( step( 0.0, uSelBatch ) * step( abs( s3mBatchElev - uSelBatch ), 0.5 ), uSelWhole );
328
+ // 刚体旋转以 s3mPivot 为中心,再叠加自定义平移与选中拔高
329
+ transformed = s3mRot * ( transformed - s3mPivot ) + s3mPivot + s3mCustomOffset;
203
330
  transformed.z += s3mSelElev * uSelElevation;
204
331
  `;
205
332
  const VERT_WORLD = /* glsl */ `
@@ -226,7 +353,7 @@ const VERT_WORLD = /* glsl */ `
226
353
  #else
227
354
  mat3 s3mNormMat = mat3( modelMatrix );
228
355
  #endif
229
- vWorldNormal = normalize( s3mNormMat * normal );
356
+ vWorldNormal = normalize( s3mNormMat * ( s3mRot * normal ) );
230
357
  `;
231
358
  const FRAG_PARS = /* glsl */ `
232
359
  #ifdef S3M_ATLAS
@@ -308,6 +435,8 @@ const FRAG_PARS = /* glsl */ `
308
435
  uniform float uSelEmissive;
309
436
  uniform float uDimFactor;
310
437
  uniform sampler2D uBatchTex;
438
+ uniform sampler2D uBatchTex2;
439
+ uniform float uBatchMix;
311
440
  uniform float uBatchTexWidth;
312
441
  uniform int uBatchTexActive;
313
442
  uniform float uFilterMinZ;
@@ -333,6 +462,35 @@ const FRAG_PARS = /* glsl */ `
333
462
  varying vec3 vWorldNormal;
334
463
  varying vec3 vWorldPos;
335
464
 
465
+ vec4 s3mSampleBatchRow0( sampler2D texA, sampler2D texB, vec2 uv, float mixVal ) {
466
+ vec4 vA = texture2D( texA, uv );
467
+ if ( mixVal <= 0.0001 ) return vA;
468
+ vec4 vB = texture2D( texB, uv );
469
+ vec4 res = mix( vA, vB, mixVal );
470
+ if ( vA.r < 0.0 && vB.r >= 0.0 ) {
471
+ res.rgb = vB.rgb;
472
+ } else if ( vA.r >= 0.0 && vB.r < 0.0 ) {
473
+ res.rgb = vA.rgb;
474
+ }
475
+ if ( vA.a < -0.5 || vB.a < -0.5 ) {
476
+ res.a = ( mixVal >= 0.5 ) ? vB.a : vA.a;
477
+ }
478
+ return res;
479
+ }
480
+
481
+ vec4 s3mSampleBatchRow1( sampler2D texA, sampler2D texB, vec2 uv, float mixVal ) {
482
+ vec4 vA = texture2D( texA, uv );
483
+ if ( mixVal <= 0.0001 ) return vA;
484
+ vec4 vB = texture2D( texB, uv );
485
+ vec4 res = mix( vA, vB, mixVal );
486
+ if ( vA.a == 0.0 && vB.a > 0.0 ) {
487
+ res.a = mix( 1.0, vB.a, mixVal );
488
+ } else if ( vA.a > 0.0 && vB.a == 0.0 ) {
489
+ res.a = mix( vA.a, 1.0, mixVal );
490
+ }
491
+ return res;
492
+ }
493
+
336
494
  float s3mHash( float p ) {
337
495
  p = fract( p * 0.1031 );
338
496
  p *= p + 33.33;
@@ -427,7 +585,8 @@ const FRAG_COLOR = /* glsl */ `
427
585
  bool hasCustomColor = false;
428
586
  if ( uBatchTexActive > 0 && s3mBid >= 0.0 ) {
429
587
  // 用取整后的 id 采样:否则逐像素的插值误差会让纹素在边界上来回跳,同样出彩色噪点
430
- vec4 bState = texture2D( uBatchTex, vec2( ( s3mBid + 0.5 ) / uBatchTexWidth, 0.25 ) );
588
+ float s3mU = ( s3mBid + 0.5 ) / uBatchTexWidth;
589
+ vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
431
590
  if ( bState.a < -0.5 ) {
432
591
  discard; // 属于被过滤隐藏的单体
433
592
  }
@@ -438,7 +597,7 @@ const FRAG_COLOR = /* glsl */ `
438
597
  }
439
598
  // 单体独立透明度(状态纹理第 2 行 alpha,0 = 无覆盖)。
440
599
  // 与全局 uOpacity(diffuseColor.a 初值)和图集贴图自带 alpha 逐级叠乘
441
- vec4 bOffset = texture2D( uBatchTex, vec2( ( s3mBid + 0.5 ) / uBatchTexWidth, 0.75 ) );
600
+ vec4 bOffset = s3mSampleBatchRow1( uBatchTex, uBatchTex2, vec2( s3mU, 0.25 ), uBatchMix );
442
601
  if ( bOffset.a > 0.0 ) {
443
602
  diffuseColor.a *= bOffset.a;
444
603
  }
@@ -518,6 +677,7 @@ export function createStyledMaterial(opts) {
518
677
  // 没有单体化信息的几何(batchId = -1)只能整块选中
519
678
  const uSelWhole = { value: 0 };
520
679
  const uBatchTex = { value: DUMMY_BATCH_TEX };
680
+ const uBatchTex2 = { value: DUMMY_BATCH_TEX };
521
681
  const uBatchTexWidth = { value: 1.0 };
522
682
  const uBatchTexActive = { value: 0 };
523
683
  /** 单块瓦片的淡入系数:逐材质独享(每块网格一份材质),默认 1 = 完全显示 */
@@ -537,6 +697,7 @@ export function createStyledMaterial(opts) {
537
697
  uSelBatch,
538
698
  uSelWhole,
539
699
  uBatchTex,
700
+ uBatchTex2,
540
701
  uBatchTexWidth,
541
702
  uBatchTexActive,
542
703
  uTileFade,
@@ -546,6 +707,7 @@ export function createStyledMaterial(opts) {
546
707
  });
547
708
  shader.vertexShader = shader.vertexShader
548
709
  .replace('#include <common>', `#include <common>\n${VERT_PARS}`)
710
+ .replace('#include <beginnormal_vertex>', `#include <beginnormal_vertex>\n${VERT_SETUP}`)
549
711
  .replace('#include <begin_vertex>', `#include <begin_vertex>\n${VERT_ELEVATION}`)
550
712
  .replace('#include <worldpos_vertex>', VERT_WORLD);
551
713
  shader.fragmentShader = shader.fragmentShader
@@ -573,6 +735,7 @@ export function createStyledMaterial(opts) {
573
735
  mat.userData.uSelBatch = uSelBatch;
574
736
  mat.userData.uSelWhole = uSelWhole;
575
737
  mat.userData.uBatchTex = uBatchTex;
738
+ mat.userData.uBatchTex2 = uBatchTex2;
576
739
  mat.userData.uBatchTexWidth = uBatchTexWidth;
577
740
  mat.userData.uBatchTexActive = uBatchTexActive;
578
741
  mat.userData.uTileFade = uTileFade;
@@ -587,26 +750,92 @@ const OUTLINE_VERT = /* glsl */ `
587
750
  uniform float uWidth;
588
751
  uniform float uElevation;
589
752
  uniform sampler2D uBatchTex;
753
+ uniform sampler2D uBatchTex2;
754
+ uniform float uBatchMix;
590
755
  uniform float uBatchTexWidth;
591
756
  uniform int uBatchTexActive;
757
+ uniform sampler2D uPathTex;
758
+ uniform float uPathCount;
759
+ uniform float uPathTime;
760
+ uniform int uPathTexActive;
592
761
  varying float vSel;
762
+
763
+ vec4 s3mSampleBatch( sampler2D texA, sampler2D texB, vec2 uv, float mixVal ) {
764
+ vec4 vA = texture2D( texA, uv );
765
+ if ( mixVal <= 0.0001 ) return vA;
766
+ vec4 vB = texture2D( texB, uv );
767
+ return mix( vA, vB, mixVal );
768
+ }
769
+
593
770
  void main() {
594
771
  vSel = max( step( 0.0, uSelBatch ) * step( abs( aBatchId - uSelBatch ), 0.5 ), uSelWhole );
595
772
  vec3 s3mCustomOffset = vec3( 0.0 );
773
+ mat3 s3mRot = mat3( 1.0 );
774
+ vec3 s3mPivot = vec3( 0.0 );
596
775
  if ( uBatchTexActive > 0 && aBatchId >= 0.0 ) {
597
- vec4 bState = texture2D( uBatchTex, vec2( ( aBatchId + 0.5 ) / uBatchTexWidth, 0.25 ) );
776
+ float s3mU = ( aBatchId + 0.5 ) / uBatchTexWidth;
777
+ vec4 bState = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
598
778
  if ( bState.a < -0.5 ) {
599
779
  vSel = 0.0; // 过滤隐藏的单体不显示描边
600
780
  } else {
601
- vec4 bOffset = texture2D( uBatchTex, vec2( ( aBatchId + 0.5 ) / uBatchTexWidth, 0.75 ) );
781
+ vec4 bOffset = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.25 ), uBatchMix );
602
782
  s3mCustomOffset = bOffset.xyz;
603
783
  if ( s3mCustomOffset.z == 0.0 && bState.a > 0.0 ) {
604
784
  s3mCustomOffset.z = bState.a;
605
785
  }
786
+ vec4 r2 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.41666667 ), uBatchMix );
787
+ vec4 r3 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.58333333 ), uBatchMix );
788
+ vec4 r4 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.75 ), uBatchMix );
789
+ s3mRot = mat3(
790
+ vec3( r2.x, r3.x, r4.x ),
791
+ vec3( r2.y, r3.y, r4.y ),
792
+ vec3( r2.z, r3.z, r4.z )
793
+ );
794
+ s3mPivot = vec3( r2.w, r3.w, r4.w );
795
+
796
+ if ( uPathTexActive > 0 ) {
797
+ vec4 r5 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.91666667 ), uBatchMix );
798
+ float pathId = r5.x;
799
+ float speed = r5.y;
800
+ float phase = r5.z;
801
+ float mode = r5.w;
802
+ if ( pathId >= 0.0 && mode > 0.5 && uPathCount > 0.0 ) {
803
+ float t = phase + uPathTime * speed;
804
+ bool autoHeading = true;
805
+ if ( mode >= 4.0 ) {
806
+ autoHeading = false;
807
+ mode -= 3.0;
808
+ }
809
+ if ( mode < 1.5 ) {
810
+ t = fract( t );
811
+ } else if ( mode < 2.5 ) {
812
+ t = clamp( t, 0.0, 1.0 );
813
+ } else {
814
+ t = mod( t, 2.0 );
815
+ t = ( t > 1.0 ) ? ( 2.0 - t ) : t;
816
+ }
817
+ float pathU = ( t * 255.0 + 0.5 ) / 256.0;
818
+ float pathV = ( pathId + 0.5 ) / uPathCount;
819
+ vec4 pathSample = texture2D( uPathTex, vec2( pathU, pathV ) );
820
+ vec3 pathPos = pathSample.xyz;
821
+ float pathYaw = pathSample.w;
822
+ if ( autoHeading ) {
823
+ float c = cos( pathYaw );
824
+ float s = sin( pathYaw );
825
+ mat3 rotHeading = mat3(
826
+ c, -s, 0.0,
827
+ s, c, 0.0,
828
+ 0.0, 0.0, 1.0
829
+ );
830
+ s3mRot = rotHeading * s3mRot;
831
+ }
832
+ s3mCustomOffset += pathPos;
833
+ }
834
+ }
606
835
  }
607
836
  }
608
- vec3 p = position + normal * uWidth * vSel;
609
- p += s3mCustomOffset;
837
+ vec3 p = position + ( s3mRot * normal ) * uWidth * vSel;
838
+ p = s3mRot * ( p - s3mPivot ) + s3mPivot + s3mCustomOffset;
610
839
  p.z += vSel * uElevation;
611
840
  gl_Position = projectionMatrix * modelViewMatrix * vec4( p, 1.0 );
612
841
  }
@@ -628,8 +857,14 @@ export function createOutlineMaterial(shared, initialWidth = 0.9) {
628
857
  uWidth: { value: initialWidth },
629
858
  uElevation: { value: 0 },
630
859
  uBatchTex: { value: DUMMY_BATCH_TEX },
860
+ uBatchTex2: { value: DUMMY_BATCH_TEX },
861
+ uBatchMix: shared.uBatchMix ?? { value: 0 },
631
862
  uBatchTexWidth: { value: 1.0 },
632
863
  uBatchTexActive: { value: 0 },
864
+ uPathTex: shared.uPathTex ?? { value: GPUPathManager.DUMMY_PATH_TEX },
865
+ uPathCount: shared.uPathCount ?? { value: 1 },
866
+ uPathTexActive: shared.uPathTexActive ?? { value: 0 },
867
+ uPathTime: shared.uPathTime ?? { value: 0 },
633
868
  uColor: { value: shared.uSelColor.value.clone() },
634
869
  },
635
870
  vertexShader: OUTLINE_VERT,
@@ -1 +1 @@
1
- {"version":3,"file":"StyleMaterial.js","sourceRoot":"","sources":["../../src/render/StyleMaterial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StyleMaterial.js","sourceRoot":"","sources":["../../src/render/StyleMaterial.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "s3m-three",
3
- "version": "0.3.8",
3
+ "version": "0.3.10",
4
4
  "description": "SuperMap S3M 三维模型格式的 three.js 渲染内核:浏览器内直接解析 .s3mb 瓦片,无需转 3D Tiles,支持 LOD 调度、白膜/按高度/按单体/动态扫描着色、单体级 GPU 拾取。宿主无关,可单独用于任意 three 场景。",
5
5
  "type": "module",
6
6
  "repository": {
package/src/core/types.ts CHANGED
@@ -283,11 +283,21 @@ export interface StyleUniforms {
283
283
  uTexMix?: { value: number };
284
284
  /** 基础漫反射底色增益 / 直通自发光微调(0~1,默认 0.0) */
285
285
  uAmbientGain?: { value: number };
286
+ /** 双纹理交叉淡化插值因子(0~1,0 = 状态 A,1 = 状态 B) */
287
+ uBatchMix?: { value: number };
286
288
  /** 图层整体透明度(共享 uniform,透明度动画靠它做到 O(1)) */
287
289
  uOpacity?: { value: number };
288
290
  /** 棱线淡入淡出乘子(setEdges 过渡期间 0→1) */
289
291
  uEdgeFade?: { value: number };
290
292
  /** 整体压暗乘子(mode 切换的 fade-through) */
291
293
  uFade?: { value: number };
294
+ /** GPU 路径数据采样纹理 */
295
+ uPathTex?: { value: unknown };
296
+ /** GPU 路径纹理中包含的路径条数(高度) */
297
+ uPathCount?: { value: number };
298
+ /** 是否激活 GPU 路径动画(0 = 未激活,1 = 激活) */
299
+ uPathTexActive?: { value: number };
300
+ /** GPU 路径全局时间戳(秒) */
301
+ uPathTime?: { value: number };
292
302
  [key: string]: { value: unknown } | undefined;
293
303
  }
package/src/index.ts CHANGED
@@ -78,6 +78,13 @@ export {
78
78
  DatasetManager,
79
79
  FeatureStyleManager,
80
80
  } from './render/S3MViewer.js';
81
+ export {
82
+ resolveRotationMatrix,
83
+ extractEulerAngles,
84
+ } from './render/FeatureStyleManager.js';
85
+ export type { RotationMatrix9, GPUPathOptions } from './render/FeatureStyleManager.js';
86
+ export { GPUPathManager, SAMPLES_PER_PATH } from './render/GPUPathManager.js';
87
+ export type { GPUPathInfo } from './render/GPUPathManager.js';
81
88
  export type {
82
89
  DatasetAlignment,
83
90
  S3MDatasetOptions,
@@ -129,6 +136,7 @@ export type {
129
136
 
130
137
  export {
131
138
  buildOrthoMVP,
139
+ buildBlendedMVP,
132
140
  extractProjectionMatrix,
133
141
  extractNearFar,
134
142
  extractFovRadians,