s3m-three 0.3.9 → 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.
- package/dist/browser/s3m-three.iife.ext-three.js +174 -40
- package/dist/browser/s3m-three.iife.js +174 -40
- package/dist/core/types.d.ts +16 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/render/EdgeLines.d.ts +12 -0
- package/dist/render/EdgeLines.d.ts.map +1 -1
- package/dist/render/EdgeLines.js +60 -6
- package/dist/render/EdgeLines.js.map +1 -1
- package/dist/render/FeatureStyleManager.d.ts +33 -0
- package/dist/render/FeatureStyleManager.d.ts.map +1 -1
- package/dist/render/FeatureStyleManager.js +98 -11
- package/dist/render/FeatureStyleManager.js.map +1 -1
- package/dist/render/GPUPathManager.d.ts +95 -0
- package/dist/render/GPUPathManager.d.ts.map +1 -0
- package/dist/render/GPUPathManager.js +265 -0
- package/dist/render/GPUPathManager.js.map +1 -0
- package/dist/render/S3MViewer.d.ts +47 -0
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +96 -0
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/StyleMaterial.d.ts +12 -0
- package/dist/render/StyleMaterial.d.ts.map +1 -1
- package/dist/render/StyleMaterial.js +117 -14
- package/dist/render/StyleMaterial.js.map +1 -1
- package/package.json +1 -1
- package/src/core/types.ts +8 -0
- package/src/index.ts +3 -1
- package/src/render/EdgeLines.ts +64 -6
- package/src/render/FeatureStyleManager.ts +130 -11
- package/src/render/GPUPathManager.ts +306 -0
- package/src/render/S3MViewer.ts +110 -0
- package/src/render/StyleMaterial.ts +121 -14
|
@@ -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, // 白膜:忽略贴图与顶点色,纯色 + 光照
|
|
@@ -88,8 +89,9 @@ const DUMMY_DATA = new Float32Array([
|
|
|
88
89
|
1, 0, 0, 0, // Row 2: rot row 0, pivot.x
|
|
89
90
|
0, 1, 0, 0, // Row 3: rot row 1, pivot.y
|
|
90
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
|
|
91
93
|
]);
|
|
92
|
-
export const DUMMY_BATCH_TEX = new THREE.DataTexture(DUMMY_DATA, 1,
|
|
94
|
+
export const DUMMY_BATCH_TEX = new THREE.DataTexture(DUMMY_DATA, 1, 6, THREE.RGBAFormat, THREE.FloatType);
|
|
93
95
|
DUMMY_BATCH_TEX.minFilter = THREE.NearestFilter;
|
|
94
96
|
DUMMY_BATCH_TEX.magFilter = THREE.NearestFilter;
|
|
95
97
|
DUMMY_BATCH_TEX.needsUpdate = true;
|
|
@@ -134,6 +136,14 @@ export function createSharedUniforms() {
|
|
|
134
136
|
uAmbientGain: { value: 0 },
|
|
135
137
|
/** 双纹理交叉淡化插值系数(0 = 纯 uBatchTex, 1 = 纯 uBatchTex2) */
|
|
136
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 },
|
|
137
147
|
/**
|
|
138
148
|
* 图层整体透明度:在片元里乘进 diffuseColor.a。
|
|
139
149
|
*
|
|
@@ -176,6 +186,10 @@ const VERT_PARS = /* glsl */ `
|
|
|
176
186
|
uniform float uBatchMix;
|
|
177
187
|
uniform float uBatchTexWidth;
|
|
178
188
|
uniform int uBatchTexActive;
|
|
189
|
+
uniform sampler2D uPathTex;
|
|
190
|
+
uniform float uPathCount;
|
|
191
|
+
uniform float uPathTime;
|
|
192
|
+
uniform int uPathTexActive;
|
|
179
193
|
varying float vBatchId;
|
|
180
194
|
varying vec3 vVertColor;
|
|
181
195
|
varying float vWorldZ;
|
|
@@ -239,22 +253,63 @@ const VERT_SETUP = /* glsl */ `
|
|
|
239
253
|
float s3mBatchSetup = s3mBatchRaw();
|
|
240
254
|
if ( uBatchTexActive > 0 && s3mBatchSetup >= 0.0 ) {
|
|
241
255
|
float s3mU = ( s3mBatchSetup + 0.5 ) / uBatchTexWidth;
|
|
242
|
-
vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
256
|
+
vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
|
|
243
257
|
if ( bState.a >= -0.5 ) {
|
|
244
|
-
vec4 bOffset = s3mSampleBatchRow1( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
258
|
+
vec4 bOffset = s3mSampleBatchRow1( uBatchTex, uBatchTex2, vec2( s3mU, 0.25 ), uBatchMix );
|
|
245
259
|
s3mCustomOffset = bOffset.xyz;
|
|
246
260
|
if ( s3mCustomOffset.z == 0.0 && bState.a > 0.0 ) {
|
|
247
261
|
s3mCustomOffset.z = bState.a;
|
|
248
262
|
}
|
|
249
|
-
vec4 r2 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
250
|
-
vec4 r3 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
251
|
-
vec4 r4 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
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 );
|
|
252
266
|
s3mRot = mat3(
|
|
253
267
|
vec3( r2.x, r3.x, r4.x ),
|
|
254
268
|
vec3( r2.y, r3.y, r4.y ),
|
|
255
269
|
vec3( r2.z, r3.z, r4.z )
|
|
256
270
|
);
|
|
257
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
|
+
}
|
|
258
313
|
}
|
|
259
314
|
}
|
|
260
315
|
objectNormal = normalize( s3mRot * objectNormal );
|
|
@@ -263,7 +318,7 @@ const VERT_ELEVATION = /* glsl */ `
|
|
|
263
318
|
float s3mBatchElev = s3mBatchRaw();
|
|
264
319
|
if ( uBatchTexActive > 0 && s3mBatchElev >= 0.0 ) {
|
|
265
320
|
float s3mU = ( s3mBatchElev + 0.5 ) / uBatchTexWidth;
|
|
266
|
-
vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
321
|
+
vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
|
|
267
322
|
if ( bState.a < -0.5 ) {
|
|
268
323
|
transformed = vec3( 0.0 );
|
|
269
324
|
}
|
|
@@ -531,7 +586,7 @@ const FRAG_COLOR = /* glsl */ `
|
|
|
531
586
|
if ( uBatchTexActive > 0 && s3mBid >= 0.0 ) {
|
|
532
587
|
// 用取整后的 id 采样:否则逐像素的插值误差会让纹素在边界上来回跳,同样出彩色噪点
|
|
533
588
|
float s3mU = ( s3mBid + 0.5 ) / uBatchTexWidth;
|
|
534
|
-
vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
589
|
+
vec4 bState = s3mSampleBatchRow0( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
|
|
535
590
|
if ( bState.a < -0.5 ) {
|
|
536
591
|
discard; // 属于被过滤隐藏的单体
|
|
537
592
|
}
|
|
@@ -542,7 +597,7 @@ const FRAG_COLOR = /* glsl */ `
|
|
|
542
597
|
}
|
|
543
598
|
// 单体独立透明度(状态纹理第 2 行 alpha,0 = 无覆盖)。
|
|
544
599
|
// 与全局 uOpacity(diffuseColor.a 初值)和图集贴图自带 alpha 逐级叠乘
|
|
545
|
-
vec4 bOffset = s3mSampleBatchRow1( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
600
|
+
vec4 bOffset = s3mSampleBatchRow1( uBatchTex, uBatchTex2, vec2( s3mU, 0.25 ), uBatchMix );
|
|
546
601
|
if ( bOffset.a > 0.0 ) {
|
|
547
602
|
diffuseColor.a *= bOffset.a;
|
|
548
603
|
}
|
|
@@ -699,6 +754,10 @@ const OUTLINE_VERT = /* glsl */ `
|
|
|
699
754
|
uniform float uBatchMix;
|
|
700
755
|
uniform float uBatchTexWidth;
|
|
701
756
|
uniform int uBatchTexActive;
|
|
757
|
+
uniform sampler2D uPathTex;
|
|
758
|
+
uniform float uPathCount;
|
|
759
|
+
uniform float uPathTime;
|
|
760
|
+
uniform int uPathTexActive;
|
|
702
761
|
varying float vSel;
|
|
703
762
|
|
|
704
763
|
vec4 s3mSampleBatch( sampler2D texA, sampler2D texB, vec2 uv, float mixVal ) {
|
|
@@ -715,24 +774,64 @@ const OUTLINE_VERT = /* glsl */ `
|
|
|
715
774
|
vec3 s3mPivot = vec3( 0.0 );
|
|
716
775
|
if ( uBatchTexActive > 0 && aBatchId >= 0.0 ) {
|
|
717
776
|
float s3mU = ( aBatchId + 0.5 ) / uBatchTexWidth;
|
|
718
|
-
vec4 bState = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
777
|
+
vec4 bState = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
|
|
719
778
|
if ( bState.a < -0.5 ) {
|
|
720
779
|
vSel = 0.0; // 过滤隐藏的单体不显示描边
|
|
721
780
|
} else {
|
|
722
|
-
vec4 bOffset = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
781
|
+
vec4 bOffset = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.25 ), uBatchMix );
|
|
723
782
|
s3mCustomOffset = bOffset.xyz;
|
|
724
783
|
if ( s3mCustomOffset.z == 0.0 && bState.a > 0.0 ) {
|
|
725
784
|
s3mCustomOffset.z = bState.a;
|
|
726
785
|
}
|
|
727
|
-
vec4 r2 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
728
|
-
vec4 r3 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
729
|
-
vec4 r4 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
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 );
|
|
730
789
|
s3mRot = mat3(
|
|
731
790
|
vec3( r2.x, r3.x, r4.x ),
|
|
732
791
|
vec3( r2.y, r3.y, r4.y ),
|
|
733
792
|
vec3( r2.z, r3.z, r4.z )
|
|
734
793
|
);
|
|
735
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
|
+
}
|
|
736
835
|
}
|
|
737
836
|
}
|
|
738
837
|
vec3 p = position + ( s3mRot * normal ) * uWidth * vSel;
|
|
@@ -762,6 +861,10 @@ export function createOutlineMaterial(shared, initialWidth = 0.9) {
|
|
|
762
861
|
uBatchMix: shared.uBatchMix ?? { value: 0 },
|
|
763
862
|
uBatchTexWidth: { value: 1.0 },
|
|
764
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 },
|
|
765
868
|
uColor: { value: shared.uSelColor.value.clone() },
|
|
766
869
|
},
|
|
767
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
package/src/core/types.ts
CHANGED
|
@@ -291,5 +291,13 @@ export interface StyleUniforms {
|
|
|
291
291
|
uEdgeFade?: { value: number };
|
|
292
292
|
/** 整体压暗乘子(mode 切换的 fade-through) */
|
|
293
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 };
|
|
294
302
|
[key: string]: { value: unknown } | undefined;
|
|
295
303
|
}
|
package/src/index.ts
CHANGED
|
@@ -82,7 +82,9 @@ export {
|
|
|
82
82
|
resolveRotationMatrix,
|
|
83
83
|
extractEulerAngles,
|
|
84
84
|
} from './render/FeatureStyleManager.js';
|
|
85
|
-
export type { RotationMatrix9 } 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';
|
|
86
88
|
export type {
|
|
87
89
|
DatasetAlignment,
|
|
88
90
|
S3MDatasetOptions,
|
package/src/render/EdgeLines.ts
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import * as THREE from 'three';
|
|
16
16
|
import { DUMMY_BATCH_TEX } from './StyleMaterial.js';
|
|
17
|
+
import { GPUPathManager } from './GPUPathManager.js';
|
|
17
18
|
|
|
18
19
|
/** 所有等宽线材质共享的分辨率 uniform(每帧更新一次即可) */
|
|
19
20
|
export interface LineSharedUniforms {
|
|
@@ -42,6 +43,10 @@ export interface ThickLineBatchUniforms {
|
|
|
42
43
|
uBatchMix?: { value: number };
|
|
43
44
|
uBatchTexWidth: { value: number };
|
|
44
45
|
uBatchTexActive: { value: number };
|
|
46
|
+
uPathTex?: { value: unknown };
|
|
47
|
+
uPathCount?: { value: number };
|
|
48
|
+
uPathTime?: { value: number };
|
|
49
|
+
uPathTexActive?: { value: number };
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
export interface ThickLineMaterial extends THREE.ShaderMaterial {
|
|
@@ -75,6 +80,10 @@ const VERT = /* glsl */ `
|
|
|
75
80
|
uniform float uBatchMix;
|
|
76
81
|
uniform float uBatchTexWidth;
|
|
77
82
|
uniform int uBatchTexActive;
|
|
83
|
+
uniform sampler2D uPathTex;
|
|
84
|
+
uniform float uPathCount;
|
|
85
|
+
uniform float uPathTime;
|
|
86
|
+
uniform int uPathTexActive;
|
|
78
87
|
|
|
79
88
|
vec4 s3mSampleBatch( sampler2D texA, sampler2D texB, vec2 uv, float mixVal ) {
|
|
80
89
|
vec4 vA = texture2D( texA, uv );
|
|
@@ -84,7 +93,7 @@ const VERT = /* glsl */ `
|
|
|
84
93
|
}
|
|
85
94
|
|
|
86
95
|
void main() {
|
|
87
|
-
// 单体平移 / 旋转 / 拔高 / 隐藏:与主着色器同一份
|
|
96
|
+
// 单体平移 / 旋转 / 拔高 / 隐藏:与主着色器同一份 6 行状态纹理、同一套变换口径。
|
|
88
97
|
// 不采样的话,单体一动或一转棱线就留在原地——这正是「棱线跟随」要解决的。
|
|
89
98
|
vec3 s3mA = position;
|
|
90
99
|
vec3 s3mB = aOther;
|
|
@@ -94,26 +103,67 @@ const VERT = /* glsl */ `
|
|
|
94
103
|
|
|
95
104
|
if ( uBatchTexActive > 0 && aBatchId >= 0.0 ) {
|
|
96
105
|
float s3mU = ( aBatchId + 0.5 ) / uBatchTexWidth;
|
|
97
|
-
vec4 bState = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
106
|
+
vec4 bState = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.08333333 ), uBatchMix );
|
|
98
107
|
if ( bState.a < -0.5 ) {
|
|
99
108
|
// 该单体被隐藏:顶点着色器不能 discard,扔到裁剪空间外
|
|
100
109
|
gl_Position = vec4( 2.0, 2.0, 2.0, 1.0 );
|
|
101
110
|
return;
|
|
102
111
|
}
|
|
103
|
-
vec4 bOffset = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
112
|
+
vec4 bOffset = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.25 ), uBatchMix );
|
|
104
113
|
s3mCustomOffset = bOffset.xyz;
|
|
105
114
|
if ( s3mCustomOffset.z == 0.0 && bState.a > 0.0 ) {
|
|
106
115
|
s3mCustomOffset.z = bState.a;
|
|
107
116
|
}
|
|
108
|
-
vec4 r2 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
109
|
-
vec4 r3 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
110
|
-
vec4 r4 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.
|
|
117
|
+
vec4 r2 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.41666667 ), uBatchMix );
|
|
118
|
+
vec4 r3 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.58333333 ), uBatchMix );
|
|
119
|
+
vec4 r4 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.75 ), uBatchMix );
|
|
111
120
|
s3mRot = mat3(
|
|
112
121
|
vec3( r2.x, r3.x, r4.x ),
|
|
113
122
|
vec3( r2.y, r3.y, r4.y ),
|
|
114
123
|
vec3( r2.z, r3.z, r4.z )
|
|
115
124
|
);
|
|
116
125
|
s3mPivot = vec3( r2.w, r3.w, r4.w );
|
|
126
|
+
|
|
127
|
+
// Row 5: GPU 路径动画计算
|
|
128
|
+
if ( uPathTexActive > 0 ) {
|
|
129
|
+
vec4 r5 = s3mSampleBatch( uBatchTex, uBatchTex2, vec2( s3mU, 0.91666667 ), uBatchMix );
|
|
130
|
+
float pathId = r5.x;
|
|
131
|
+
float speed = r5.y;
|
|
132
|
+
float phase = r5.z;
|
|
133
|
+
float mode = r5.w;
|
|
134
|
+
if ( pathId >= 0.0 && mode > 0.5 && uPathCount > 0.0 ) {
|
|
135
|
+
float t = phase + uPathTime * speed;
|
|
136
|
+
bool autoHeading = true;
|
|
137
|
+
if ( mode >= 4.0 ) {
|
|
138
|
+
autoHeading = false;
|
|
139
|
+
mode -= 3.0;
|
|
140
|
+
}
|
|
141
|
+
if ( mode < 1.5 ) {
|
|
142
|
+
t = fract( t );
|
|
143
|
+
} else if ( mode < 2.5 ) {
|
|
144
|
+
t = clamp( t, 0.0, 1.0 );
|
|
145
|
+
} else {
|
|
146
|
+
t = mod( t, 2.0 );
|
|
147
|
+
t = ( t > 1.0 ) ? ( 2.0 - t ) : t;
|
|
148
|
+
}
|
|
149
|
+
float pathU = ( t * 255.0 + 0.5 ) / 256.0;
|
|
150
|
+
float pathV = ( pathId + 0.5 ) / uPathCount;
|
|
151
|
+
vec4 pathSample = texture2D( uPathTex, vec2( pathU, pathV ) );
|
|
152
|
+
vec3 pathPos = pathSample.xyz;
|
|
153
|
+
float pathYaw = pathSample.w;
|
|
154
|
+
if ( autoHeading ) {
|
|
155
|
+
float c = cos( pathYaw );
|
|
156
|
+
float s = sin( pathYaw );
|
|
157
|
+
mat3 rotHeading = mat3(
|
|
158
|
+
c, -s, 0.0,
|
|
159
|
+
s, c, 0.0,
|
|
160
|
+
0.0, 0.0, 1.0
|
|
161
|
+
);
|
|
162
|
+
s3mRot = rotHeading * s3mRot;
|
|
163
|
+
}
|
|
164
|
+
s3mCustomOffset += pathPos;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
117
167
|
}
|
|
118
168
|
|
|
119
169
|
s3mA = s3mRot * ( s3mA - s3mPivot ) + s3mPivot + s3mCustomOffset;
|
|
@@ -190,6 +240,10 @@ export function createThickLineMaterial(
|
|
|
190
240
|
uBatchMix: batchUniforms?.uBatchMix ?? { value: 0 },
|
|
191
241
|
uBatchTexWidth: batchUniforms?.uBatchTexWidth ?? { value: 1 },
|
|
192
242
|
uBatchTexActive: batchUniforms?.uBatchTexActive ?? { value: 0 },
|
|
243
|
+
uPathTex: batchUniforms?.uPathTex ?? { value: GPUPathManager.DUMMY_PATH_TEX },
|
|
244
|
+
uPathCount: batchUniforms?.uPathCount ?? { value: 1 },
|
|
245
|
+
uPathTexActive: batchUniforms?.uPathTexActive ?? { value: 0 },
|
|
246
|
+
uPathTime: batchUniforms?.uPathTime ?? { value: 0 },
|
|
193
247
|
};
|
|
194
248
|
|
|
195
249
|
const mat = new THREE.ShaderMaterial({
|
|
@@ -206,6 +260,10 @@ export function createThickLineMaterial(
|
|
|
206
260
|
uBatchMix: batch.uBatchMix,
|
|
207
261
|
uBatchTexWidth: batch.uBatchTexWidth,
|
|
208
262
|
uBatchTexActive: batch.uBatchTexActive,
|
|
263
|
+
uPathTex: batch.uPathTex,
|
|
264
|
+
uPathCount: batch.uPathCount,
|
|
265
|
+
uPathTexActive: batch.uPathTexActive,
|
|
266
|
+
uPathTime: batch.uPathTime,
|
|
209
267
|
},
|
|
210
268
|
vertexShader: VERT,
|
|
211
269
|
fragmentShader: FRAG,
|
|
@@ -21,6 +21,19 @@ import {
|
|
|
21
21
|
import type { AttributeQuery, AttributeQueryOptions, AttributeRow } from '../core/AttributeQuery.js';
|
|
22
22
|
import type { StyledMaterial } from './StyleMaterial.js';
|
|
23
23
|
|
|
24
|
+
export interface GPUPathOptions {
|
|
25
|
+
/** 绑定的路径索引 ID(0, 1, 2...) */
|
|
26
|
+
pathId: number;
|
|
27
|
+
/** 进度的运动速率(归一化进度/秒,例如 0.05 即 20 秒一圈;为 0 则靠 progress/phase 驱动) */
|
|
28
|
+
speed?: number;
|
|
29
|
+
/** 初始相位 / 进度偏移(0.0 ~ 1.0) */
|
|
30
|
+
phase?: number;
|
|
31
|
+
/** 循环模式:'loop'(循环,默认) | 'pingpong'(往返) | 'clamp'(单次到达终点停止) */
|
|
32
|
+
loop?: 'loop' | 'pingpong' | 'clamp' | boolean;
|
|
33
|
+
/** 是否根据路径切线自动旋转朝向(偏航角 yaw,默认 true) */
|
|
34
|
+
autoHeading?: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
24
37
|
export interface FeatureStyle {
|
|
25
38
|
/** 自定义单体颜色 */
|
|
26
39
|
color?: string;
|
|
@@ -50,6 +63,8 @@ export interface FeatureStyle {
|
|
|
50
63
|
| THREE.Matrix4;
|
|
51
64
|
/** 旋转中心轴心点 [px, py, pz](局部坐标,默认 [0, 0, 0]) */
|
|
52
65
|
pivot?: [number, number, number];
|
|
66
|
+
/** GPU 路径动画配置 */
|
|
67
|
+
gpuPath?: GPUPathOptions;
|
|
53
68
|
}
|
|
54
69
|
|
|
55
70
|
export type RotationMatrix9 = [
|
|
@@ -762,6 +777,13 @@ export class FeatureStyleManager {
|
|
|
762
777
|
data[r4 + 1] = 0;
|
|
763
778
|
data[r4 + 2] = 1;
|
|
764
779
|
data[r4 + 3] = 0;
|
|
780
|
+
|
|
781
|
+
// Row 5: [pathId, speed, phase, modeFlag] (默认 -1 表示未绑定 GPU 路径)
|
|
782
|
+
const r5 = (w * 5 + i) * 4;
|
|
783
|
+
data[r5 + 0] = -1;
|
|
784
|
+
data[r5 + 1] = 0;
|
|
785
|
+
data[r5 + 2] = 0;
|
|
786
|
+
data[r5 + 3] = 0;
|
|
765
787
|
}
|
|
766
788
|
|
|
767
789
|
let hasActive = false;
|
|
@@ -771,6 +793,7 @@ export class FeatureStyleManager {
|
|
|
771
793
|
const translationOfBatch = new Map<number, [number, number, number]>();
|
|
772
794
|
const rotationOfBatch = new Map<number, RotationMatrix9>();
|
|
773
795
|
const pivotOfBatch = new Map<number, [number, number, number]>();
|
|
796
|
+
const gpuPathOfBatch = new Map<number, GPUPathOptions>();
|
|
774
797
|
const opacityOfBatch = new Map<number, number>();
|
|
775
798
|
const ownersOfBatch = new Map<number, number>();
|
|
776
799
|
const filter = this.filter;
|
|
@@ -844,13 +867,16 @@ export class FeatureStyleManager {
|
|
|
844
867
|
translationOfBatch.set(bId, st.translation);
|
|
845
868
|
}
|
|
846
869
|
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
rotationOfBatch.set(bId, rotMat);
|
|
870
|
+
if (st?.rotation != null && !rotationOfBatch.has(bId)) {
|
|
871
|
+
const rotMat = resolveRotationMatrix(st.rotation);
|
|
872
|
+
if (rotMat) rotationOfBatch.set(bId, rotMat);
|
|
850
873
|
}
|
|
851
874
|
if (st?.pivot && !pivotOfBatch.has(bId)) {
|
|
852
875
|
pivotOfBatch.set(bId, st.pivot);
|
|
853
876
|
}
|
|
877
|
+
if (st?.gpuPath && !gpuPathOfBatch.has(bId)) {
|
|
878
|
+
gpuPathOfBatch.set(bId, st.gpuPath);
|
|
879
|
+
}
|
|
854
880
|
}
|
|
855
881
|
|
|
856
882
|
for (const bId of hiddenBatches) {
|
|
@@ -925,10 +951,39 @@ export class FeatureStyleManager {
|
|
|
925
951
|
hasActive = true;
|
|
926
952
|
}
|
|
927
953
|
|
|
954
|
+
// Row 5: 烘焙 GPU 路径动画参数 [pathId, speed, phase, modeFlag]
|
|
955
|
+
for (const [bId, gp] of gpuPathOfBatch) {
|
|
956
|
+
if (hiddenBatches.has(bId)) continue;
|
|
957
|
+
const r5 = (w * 5 + bId) * 4;
|
|
958
|
+
data[r5 + 0] = gp.pathId;
|
|
959
|
+
data[r5 + 1] = gp.speed ?? 0;
|
|
960
|
+
data[r5 + 2] = gp.phase ?? 0;
|
|
961
|
+
|
|
962
|
+
let mode = 1; // 1 = loop (默认)
|
|
963
|
+
if (gp.loop === 'clamp' || gp.loop === false) {
|
|
964
|
+
mode = 2;
|
|
965
|
+
} else if (gp.loop === 'pingpong') {
|
|
966
|
+
mode = 3;
|
|
967
|
+
}
|
|
968
|
+
if (gp.autoHeading === false) {
|
|
969
|
+
mode += 3; // 4=loop+noHeading, 5=clamp+noHeading, 6=pingpong+noHeading
|
|
970
|
+
}
|
|
971
|
+
data[r5 + 3] = mode;
|
|
972
|
+
hasActive = true;
|
|
973
|
+
}
|
|
974
|
+
|
|
928
975
|
let conflicts = 0;
|
|
929
976
|
for (const [bId, owners] of ownersOfBatch) {
|
|
930
977
|
if (owners < 2) continue;
|
|
931
|
-
if (
|
|
978
|
+
if (
|
|
979
|
+
!hiddenBatches.has(bId) &&
|
|
980
|
+
!colorOfBatch.has(bId) &&
|
|
981
|
+
!elevOfBatch.has(bId) &&
|
|
982
|
+
!rotationOfBatch.has(bId) &&
|
|
983
|
+
!gpuPathOfBatch.has(bId)
|
|
984
|
+
) {
|
|
985
|
+
continue;
|
|
986
|
+
}
|
|
932
987
|
conflicts++;
|
|
933
988
|
}
|
|
934
989
|
|
|
@@ -978,8 +1033,8 @@ export class FeatureStyleManager {
|
|
|
978
1033
|
|
|
979
1034
|
let record = this._meshBatchTextures.get(mesh);
|
|
980
1035
|
if (!record || record.width < width) {
|
|
981
|
-
const data = new Float32Array(width *
|
|
982
|
-
const texture = new THREE.DataTexture(data, width,
|
|
1036
|
+
const data = new Float32Array(width * 6 * 4);
|
|
1037
|
+
const texture = new THREE.DataTexture(data, width, 6, THREE.RGBAFormat, THREE.FloatType);
|
|
983
1038
|
texture.minFilter = THREE.NearestFilter;
|
|
984
1039
|
texture.magFilter = THREE.NearestFilter;
|
|
985
1040
|
record = { texture, data, width };
|
|
@@ -1037,8 +1092,8 @@ export class FeatureStyleManager {
|
|
|
1037
1092
|
|
|
1038
1093
|
let record = this._meshBatchTextures.get(mesh);
|
|
1039
1094
|
if (!record || record.width < width) {
|
|
1040
|
-
const data = new Float32Array(width *
|
|
1041
|
-
const texture = new THREE.DataTexture(data, width,
|
|
1095
|
+
const data = new Float32Array(width * 6 * 4);
|
|
1096
|
+
const texture = new THREE.DataTexture(data, width, 6, THREE.RGBAFormat, THREE.FloatType);
|
|
1042
1097
|
texture.minFilter = THREE.NearestFilter;
|
|
1043
1098
|
texture.magFilter = THREE.NearestFilter;
|
|
1044
1099
|
record = { texture, data, width };
|
|
@@ -1047,9 +1102,9 @@ export class FeatureStyleManager {
|
|
|
1047
1102
|
mat.userData.uBatchTexWidth.value = width;
|
|
1048
1103
|
}
|
|
1049
1104
|
|
|
1050
|
-
if (!record.texture2 || !record.data2 || record.data2.length < record.width *
|
|
1051
|
-
const data2 = new Float32Array(record.width *
|
|
1052
|
-
const texture2 = new THREE.DataTexture(data2, record.width,
|
|
1105
|
+
if (!record.texture2 || !record.data2 || record.data2.length < record.width * 6 * 4) {
|
|
1106
|
+
const data2 = new Float32Array(record.width * 6 * 4);
|
|
1107
|
+
const texture2 = new THREE.DataTexture(data2, record.width, 6, THREE.RGBAFormat, THREE.FloatType);
|
|
1053
1108
|
texture2.minFilter = THREE.NearestFilter;
|
|
1054
1109
|
texture2.magFilter = THREE.NearestFilter;
|
|
1055
1110
|
record.data2 = data2;
|
|
@@ -1148,4 +1203,68 @@ export class FeatureStyleManager {
|
|
|
1148
1203
|
this._markedMeshes.clear();
|
|
1149
1204
|
this._triggerRepaint();
|
|
1150
1205
|
}
|
|
1206
|
+
|
|
1207
|
+
/**
|
|
1208
|
+
* 将单体绑定到 GPU 路径动画
|
|
1209
|
+
* @param smid 单体 ID
|
|
1210
|
+
* @param pathId GPUPathManager 中的路径索引
|
|
1211
|
+
* @param options 速度、初始相位、循环模式与自动转向配置
|
|
1212
|
+
* @param meshes 可选指定的网格集合,不传则全量生效
|
|
1213
|
+
*/
|
|
1214
|
+
bindGPUPath(
|
|
1215
|
+
smid: number,
|
|
1216
|
+
pathId: number,
|
|
1217
|
+
options: Omit<GPUPathOptions, 'pathId'> = {},
|
|
1218
|
+
meshes?: Iterable<THREE.Mesh>
|
|
1219
|
+
): void {
|
|
1220
|
+
const cur = this.getFeatureStyle(smid) ?? {};
|
|
1221
|
+
this.setFeatureStyle(
|
|
1222
|
+
smid,
|
|
1223
|
+
{
|
|
1224
|
+
...cur,
|
|
1225
|
+
gpuPath: {
|
|
1226
|
+
pathId,
|
|
1227
|
+
speed: options.speed ?? 0,
|
|
1228
|
+
phase: options.phase ?? 0,
|
|
1229
|
+
loop: options.loop ?? 'loop',
|
|
1230
|
+
autoHeading: options.autoHeading ?? true,
|
|
1231
|
+
},
|
|
1232
|
+
},
|
|
1233
|
+
meshes
|
|
1234
|
+
);
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
/**
|
|
1238
|
+
* 解绑单体的 GPU 路径动画
|
|
1239
|
+
*/
|
|
1240
|
+
unbindGPUPath(smid: number, meshes?: Iterable<THREE.Mesh>): void {
|
|
1241
|
+
const cur = this.getFeatureStyle(smid);
|
|
1242
|
+
if (!cur || !cur.gpuPath) return;
|
|
1243
|
+
const next = { ...cur };
|
|
1244
|
+
delete next.gpuPath;
|
|
1245
|
+
this.setFeatureStyle(smid, next, meshes);
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
/**
|
|
1249
|
+
* 直接设置单体在 GPU 路径上的归一化进度(0.0 ~ 1.0)
|
|
1250
|
+
* @param smid 单体 ID
|
|
1251
|
+
* @param progress 归一化进度 (0~1)
|
|
1252
|
+
* @param meshes 可选指定的网格集合
|
|
1253
|
+
*/
|
|
1254
|
+
setGPUPathProgress(smid: number, progress: number, meshes?: Iterable<THREE.Mesh>): void {
|
|
1255
|
+
const cur = this.getFeatureStyle(smid);
|
|
1256
|
+
if (!cur?.gpuPath) return;
|
|
1257
|
+
this.setFeatureStyle(
|
|
1258
|
+
smid,
|
|
1259
|
+
{
|
|
1260
|
+
...cur,
|
|
1261
|
+
gpuPath: {
|
|
1262
|
+
...cur.gpuPath,
|
|
1263
|
+
speed: 0,
|
|
1264
|
+
phase: Math.min(1.0, Math.max(0.0, progress)),
|
|
1265
|
+
},
|
|
1266
|
+
},
|
|
1267
|
+
meshes
|
|
1268
|
+
);
|
|
1269
|
+
}
|
|
1151
1270
|
}
|