s3m-three 0.3.11 → 0.3.12
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 +102 -20
- package/dist/browser/s3m-three.iife.js +102 -20
- package/dist/render/EdgeLines.d.ts.map +1 -1
- package/dist/render/EdgeLines.js +5 -2
- package/dist/render/EdgeLines.js.map +1 -1
- package/dist/render/Picker.d.ts.map +1 -1
- package/dist/render/Picker.js +109 -12
- package/dist/render/Picker.js.map +1 -1
- package/dist/render/S3MViewer.d.ts +35 -0
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +168 -12
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/StyleMaterial.d.ts.map +1 -1
- package/dist/render/StyleMaterial.js +18 -4
- package/dist/render/StyleMaterial.js.map +1 -1
- package/docs/ANIMATION.md +17 -7
- package/docs/API.md +360 -6
- package/package.json +1 -1
- package/src/render/EdgeLines.ts +5 -2
- package/src/render/Picker.ts +111 -12
- package/src/render/S3MViewer.ts +174 -13
- package/src/render/StyleMaterial.ts +18 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StyleMaterial.js","sourceRoot":"","sources":["../../src/render/StyleMaterial.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,CAAC,EAAE,sBAAsB;IAChC,OAAO,EAAE,CAAC,EAAE,cAAc;IAC1B,KAAK,EAAE,CAAC,EAAE,KAAK;IACf,MAAM,EAAE,CAAC,EAAE,UAAU;IACrB,MAAM,EAAE,CAAC,EAAE,wBAAwB;IACnC,KAAK,EAAE,CAAC,EAAE,gBAAgB;IAC1B,OAAO,EAAE,CAAC,EAAE,gBAAgB;IAC5B,QAAQ,EAAE,CAAC,EAAE,yBAAyB;IACtC,MAAM,EAAE,CAAC,EAAE,yBAAyB;CAC5B,CAAC;AAIX,MAAM,CAAC,MAAM,YAAY,GAA8B;IACrD,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI;IACnB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI;IACrB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI;IACnB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK;IACrB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK;IACrB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;IACpB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM;IACvB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO;IACzB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK;CACtB,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,wBAAwB;IACxB,OAAO,EAAE,SAAS;IAClB,iCAAiC;IACjC,OAAO,EAAE,SAAS;IAClB,4BAA4B;IAC5B,QAAQ,EAAE,UAAU;IACpB,uBAAuB;IACvB,SAAS,EAAE,UAAU;CACb,CAAC;AAIX,MAAM,CAAC,MAAM,kBAAkB,GAA+B;IAC5D,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,gBAAgB;IACvC,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,gBAAgB;IACvC,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,iBAAiB;IACzC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,cAAc;CACxC,CAAC;AA4EF,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,IAAI,EAAE,KAAK,CAAC,OAAO;IACnB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,WAAW,CAAC,OAAO;IAC/B,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,CAAC;IAClB,WAAW,EAAE,oBAAoB;IACjC,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,GAAG;IACjB,cAAc,EAAE,CAAC;IACjB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,GAAG;IAChB,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,IAAI;IACnB,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,CAAC;CACV,CAAC;AAiBF,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC;IAClC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,qCAAqC;IACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAK,kCAAkC;IACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAK,4BAA4B;IAC3C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAK,4BAA4B;IAC3C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAK,4BAA4B;IAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAI,kDAAkD;CAClE,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AAC1G,eAAe,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC;AAChD,eAAe,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC;AAChD,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC;AAEnC,gDAAgD;AAChD,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE;QAC/B,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAC9C,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAC9C,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACnB,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACxB,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;QAC1B,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;QAC5B,gCAAgC;QAChC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAClB,wBAAwB;QACxB,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC3B,eAAe;QACf,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAChD,sBAAsB;QACtB,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACrB,8EAA8E;QAC9E,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACtB,kCAAkC;QAClC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC5B,2BAA2B;QAC3B,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC7B,yBAAyB;QACzB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAC3B,aAAa;QACb,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE;QAC9B,aAAa;QACb,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC7B,eAAe;QACf,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACjC,+BAA+B;QAC/B,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC/B,sCAAsC;QACtC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACrB,gCAAgC;QAChC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAC1B,qDAAqD;QACrD,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACvB,mBAAmB;QACnB,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,cAAc,EAAE;QAClD,2BAA2B;QAC3B,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACxB,oCAAoC;QACpC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAC5B,mBAAmB;QACnB,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACvB;;;;;;WAMG;QACH,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACtB,4CAA4C;QAC5C,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACvB;;;WAGG;QACH,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;KACpB,CAAC;AACJ,CAAC;AACD,MAAM,SAAS,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoF5B,CAAC;AAEF,MAAM,UAAU,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmE7B,CAAC;AAEF,MAAM,cAAc,GAAG,UAAU,CAAC;;;;;;;;;;;;;;CAcjC,CAAC;AAEF,MAAM,UAAU,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyB7B,CAAC;AAEF,MAAM,SAAS,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoK5B,CAAC;AAEF,MAAM,UAAU,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+G7B,CAAC;AAEF,MAAM,aAAa,GAAG,UAAU,CAAC;;;;;;;;;;CAUhC,CAAC;AAEF,MAAM,SAAS,GAAG,UAAU,CAAC;;;;;;CAM5B,CAAC;AAmBF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA2B;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;QACzC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9C,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;QACjC,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU;QACnC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;QAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC;QAC1B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC3C,yCAAyC;QACzC,4BAA4B;QAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,KAAK,KAAK;QACvC,qCAAqC;QACrC,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC;KAC/B,CAAmB,CAAC;IAErB,gCAAgC;IAChC,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;IAChC,iCAAiC;IACjC,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACtC,MAAM,eAAe,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACrC,4CAA4C;IAC5C,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAE/B,qDAAqD;IACrD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,IAAI,KAAK;QAAE,GAAG,CAAC,OAAO,GAAG,EAAE,GAAI,GAAG,CAAC,OAAkC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACvF,IAAI,MAAM;QAAE,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IAChE,6DAA6D;IAC7D,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;IAC1G,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;IAEvG,GAAG,CAAC,eAAe,GAAG,CAAC,MAAM,EAAE,EAAE;QAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE;YACvC,SAAS;YACT,SAAS;YACT,SAAS;YACT,UAAU;YACV,cAAc;YACd,eAAe;YACf,SAAS;YACT,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YAC1B,SAAS;YACT,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;aACtC,OAAO,CAAC,mBAAmB,EAAE,sBAAsB,SAAS,EAAE,CAAC;aAC/D,OAAO,CAAC,+BAA+B,EAAE,kCAAkC,UAAU,EAAE,CAAC;aACxF,OAAO,CAAC,yBAAyB,EAAE,4BAA4B,cAAc,EAAE,CAAC;aAChF,OAAO,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAAC;QAErD,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc;aAC1C,OAAO,CAAC,mBAAmB,EAAE,sBAAsB,SAAS,EAAE,CAAC;aAC/D,OAAO,CAAC,2BAA2B,EAAE,8BAA8B,UAAU,EAAE,CAAC;aAChF,OAAO,CAAC,iCAAiC,EAAE,oCAAoC,aAAa,EAAE,CAAC,CAAC;QAEnG,IAAI,KAAK,EAAE,CAAC;YACV,oEAAoE;YACpE,0DAA0D;YAC1D,MAAM,gBAAgB,GAAG,UAAU,CAAC;;;;;OAKnC,CAAC;YACF,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CACnD,yBAAyB,EACzB,GAAG,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACvD,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,yBAAyB,EAAE,4BAA4B,SAAS,EAAE,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC,CAAC;IAEF,6CAA6C;IAC7C,iDAAiD;IACjD,GAAG,CAAC,qBAAqB,GAAG,GAAG,EAAE,CAC/B,aAAa,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAE/D,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;IACnC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;IACnC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;IACnC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACrC,GAAG,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;IAC7C,GAAG,CAAC,QAAQ,CAAC,eAAe,GAAG,eAAe,CAAC;IAC/C,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;IACnC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6EAA6E;AAE7E,MAAM,YAAY,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgG/B,CAAC;AAEF,MAAM,YAAY,GAAG,UAAU,CAAC;;;;;;;CAO/B,CAAC;AAqBF,uBAAuB;AACvB,MAAM,UAAU,qBAAqB,CAAC,MAAqB,EAAE,YAAY,GAAG,GAAG;IAC7E,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC;QACnC,QAAQ,EAAE;YACR,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;YACxB,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACvB,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;YAC/B,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACxB,SAAS,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;YACrC,UAAU,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;YACtC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;YAC3C,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;YAC9B,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,cAAc,EAAE;YACrE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;YAC7C,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;YACrD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;YAC3C,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE;SAClD;QACD,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,YAAY;QAC5B,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,+BAA+B;QAC/B,aAAa,EAAE,IAAI;QACnB,mBAAmB,EAAE,CAAC;QACtB,kBAAkB,EAAE,CAAC;KACtB,CAAoB,CAAC;IACrB,GAAG,CAAC,QAAoC,CAAC,SAAS,GAAG,IAAI,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"StyleMaterial.js","sourceRoot":"","sources":["../../src/render/StyleMaterial.ts"],"names":[],"mappings":"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"}
|
package/docs/ANIMATION.md
CHANGED
|
@@ -281,10 +281,10 @@ animator.to(key, 1, { duration, easing, onComplete: () => { if (loop) run(); } }
|
|
|
281
281
|
|
|
282
282
|
两条路线,按规模选:
|
|
283
283
|
|
|
284
|
-
- **CPU 路线(N ≤
|
|
285
|
-
- **GPU 路线(N
|
|
284
|
+
- **CPU 路线(N ≤ 几千,`followPath`)**:每帧对每个 mover 调一次 `sample()`,结果写进 texel。N 个 mover 分摊在 M 个 mesh 上,每帧 M 次纹理上传。1000 个 mover 分布在 50 个 mesh 是舒服的区间。
|
|
285
|
+
- **GPU 路线(N 上万,`bindGPUPath`)**:路径按等弧长烘成 `RGBA32F` 纹理(`x, y, z, yaw`,256 采样点/条),单体参数(`pathId / speed / phase / mode`)写进状态纹理第 5 行,顶点着色器自己算位置与朝向,CPU 每帧只写一个 `uPathTime`。
|
|
286
286
|
|
|
287
|
-
|
|
287
|
+
两条路线并存,按规模选。GPU 路线要注意三点:① 位移只在着色器里,JS 侧要「当前在哪」必须复算——拾取着色器(`PICK_VERT`)已经采样同一份路径纹理,`getFeatureBounds()` 也按同一公式在 CPU 算,改一处就要同步另外两处;② 路径 ID 决定纹理行,别用稀疏大 ID;③ 只要路径库非空 `renderFrame()` 就返回 `true`,暂停时记得 `unbindGPUPath` + `unregisterGPUPath`,否则一直空转重绘。
|
|
288
288
|
|
|
289
289
|
注意 `followPath` 和 `moveFeature` 都写 `translation`,**别同时驱动同一个单体**。
|
|
290
290
|
|
|
@@ -438,9 +438,15 @@ layer.animation.timeline([a, b, c]); // 顺序 / 并行编排
|
|
|
438
438
|
| 1 | `Animator` + 曲线库 + 通道表;uniform 通道;`setOpacity` 改 `uOpacity` | ✅ 已完成 |
|
|
439
439
|
| 2 | 单体通道补全(颜色 / 抬高 / 透明度 / 位移)+ `stagger` | ✅ 已完成 |
|
|
440
440
|
| 3 | 移动配套:视锥剔除 + 棱线跟随(含选中棱线) | ✅ 已完成 |
|
|
441
|
-
| 4 | 结构编排:`setEdges` 淡入淡出、`setMode` fade-through、`shading` 预热 |
|
|
442
|
-
| 5 | 姿态:状态纹理扩到
|
|
443
|
-
| 6 | 路径运动(CPU 弧长
|
|
441
|
+
| 4 | 结构编排:`setEdges` 淡入淡出、`setMode` fade-through、`shading` 预热 | ✅ 已完成(预热在首帧后自动做一次) |
|
|
442
|
+
| 5 | 姿态:状态纹理扩到 6 行(姿态矩阵 + 轴心),四处着色器同步改 | ✅ 已完成 |
|
|
443
|
+
| 6 | 路径运动(CPU 弧长 → GPU 纹理)→ 双纹理交叉淡化 | ✅ 已完成 |
|
|
444
|
+
| 7 | 移动后的「JS 侧位置」:拾取着色器采样路径纹理、`getFeatureBounds` CPU 复算 | ✅ 已完成 |
|
|
445
|
+
| 8 | 全局 `opacity` 允许到 0(到 0 时跳过绘制,不写深度) | ✅ 已完成 |
|
|
446
|
+
|
|
447
|
+
> 状态纹理当前是 **6 行**:`0` 配色/抬高/隐藏、`1` 平移(z 含抬高)、`2~4` 姿态矩阵 + 轴心、`5` GPU 路径参数。
|
|
448
|
+
> 采样常量 `0.0833 / 0.25 / 0.4167 / 0.5833 / 0.75 / 0.9167` 散落在 `StyleMaterial`(主 + 描边)、
|
|
449
|
+
> `EdgeLines`、`Picker` 四处,改行数必须四处一起改。
|
|
444
450
|
|
|
445
451
|
### 已完成部分的实际 API
|
|
446
452
|
|
|
@@ -478,6 +484,9 @@ await layer.setMode(STYLE.HEIGHT, { duration: 300, dim: 0.4 });
|
|
|
478
484
|
// 新瓦片淡入(初次加载 / LOD 换瓦都生效)
|
|
479
485
|
layer.setStyle({ fadeIn: 500 });
|
|
480
486
|
|
|
487
|
+
// shading 切换:首帧后已自动预热另一种变体,这里只是显式再来一次
|
|
488
|
+
await layer.prewarmShading();
|
|
489
|
+
|
|
481
490
|
// 调度器直连
|
|
482
491
|
layer.animation.cancel('style.opacity'); // 停在当前值
|
|
483
492
|
layer.animation.finish('style.opacity'); // 直达终值
|
|
@@ -528,7 +537,8 @@ layer.animation.budgetMs = 3; // 单帧写入预算
|
|
|
528
537
|
8. **移动的配套**:视锥剔除与棱线跟随都已修(§6.1①②)。拾取与包围盒本来就跟着走,不用改。
|
|
529
538
|
9. **路径运动的恒速**:缓动必须作用在弧长上,不是顶点索引(§6.3)。否则顶点疏密直接变成速度疏密。
|
|
530
539
|
10. **spring 不收敛**:没有收敛判据的 spring 会让 `needsNextFrame` 永远为 true。判据要卡到位(位移与速度同时 < 1e-3)。
|
|
531
|
-
11.
|
|
540
|
+
11. **纹理行数改动是全局的**:状态纹理现在 6 行,`0.0833 / 0.25 / 0.4167 / 0.5833 / 0.75 / 0.9167` 这些采样常量散落在 `StyleMaterial`(主 + 描边)、`EdgeLines`、`Picker` 四处,必须一起改(§6.2)。漏掉 `Picker` 的后果是「看得见、点不中」。
|
|
532
541
|
12. **启动动画必须踢帧循环**:MapLibre 按需驱动,`animator.to()` 不请求重绘的话动画永远等不到第一帧,表现为「点了没反应,取消选中才跳到终态」。见 §9 的 `onActive`。
|
|
533
542
|
13. **移动与 LOD 的关系**:位移不参与 LOD 判定,瓦片按原位置切;把单体移到很远的地方不会触发更细的瓦片。这是已知限制,不是 bug,别试图在 animator 里修。
|
|
543
|
+
14. **GLSL 列优先 vs three 行优先**:自动朝向的旋转矩阵在四处着色器里都写成 `mat3( c, s, 0, -s, c, 0, 0, 0, 1 )`(第 0 列 = `(c, s)`,即绕 Z 转 **+yaw**),而 `getFeatureBounds()` 里等价的 three 写法是 `Matrix3().set(c, -s, 0, s, c, 0, 0, 0, 1)`。这两串数字看起来不一样,其实是同一个矩阵;抄错顺序的后果是模型**左右镜像**着走——直线完全正常,一拐弯就露馅,很难一眼看出来。`tests/unit/gpu-path-bounds.test.ts` 会读源码把四处一起钉住。
|
|
534
544
|
|
package/docs/API.md
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
- [拾取与属性](#拾取与属性)
|
|
15
15
|
- [投影](#投影)
|
|
16
16
|
- [按业务字段着色](#按业务字段着色)
|
|
17
|
+
- [动画与过渡](#动画与过渡)
|
|
17
18
|
- [纯 three.js 使用](#纯-threejs-使用)
|
|
18
19
|
- [底层 API](#底层-api)
|
|
19
20
|
- [性能调优](#性能调优)
|
|
@@ -176,6 +177,7 @@ new S3MViewer(options?: S3MViewerOptions)
|
|
|
176
177
|
| `onReady` | `(entry) => void` | — | 某个数据集就绪 |
|
|
177
178
|
| `onPick` | `(f: PickResult \| null) => void` | — | 拾取结果 |
|
|
178
179
|
| `onError` | `(e: unknown) => void` | — | 瓦片加载 / 解析错误 |
|
|
180
|
+
| `prewarmShading` | `boolean` | `true` | 首帧后自动预热另一种 `shading` 变体,避免首次切换时现场编译着色器卡一帧。见[样式过渡](#样式过渡) |
|
|
179
181
|
|
|
180
182
|
`configUrl` 与 `datasets` 二选一;同时给时以 `datasets` 为准。
|
|
181
183
|
|
|
@@ -190,6 +192,7 @@ renderFrame(opts: {
|
|
|
190
192
|
fovRad: number; // 本帧垂直视场角(弧度)
|
|
191
193
|
canvasHeight: number; // 绘图缓冲高度,供 LOD 屏幕误差计算
|
|
192
194
|
}): boolean // 返回 true = 本帧有变化,宿主应继续驱动下一帧
|
|
195
|
+
prewarmShading(): Promise<void> // 手动预热另一种 shading 变体(默认已在首帧后自动做一次)
|
|
193
196
|
```
|
|
194
197
|
|
|
195
198
|
`mvp` 由宿主负责给出:地图宿主(如 s3m-maplibre)从 `render()` 入参提取;纯 three 宿主用自己的投影 × 视图矩阵。viewer 会在其后再乘 ENU → Mercator 矩阵,所以**传进来的 mvp 作用在 Mercator 归一化坐标上**,不是场景米制坐标。
|
|
@@ -238,13 +241,15 @@ interface S3MDatasetOptions {
|
|
|
238
241
|
### 样式与棱线
|
|
239
242
|
|
|
240
243
|
```ts
|
|
241
|
-
setStyle(patch?: Partial<S3MStyle
|
|
244
|
+
setStyle(patch?: Partial<S3MStyle>, transition?: TransitionOptions): void
|
|
242
245
|
getStyle(): S3MStyle & { modeLabel: string }
|
|
243
|
-
setOpacity(opacity: number): void
|
|
244
|
-
setEdges(enabled: boolean): void
|
|
246
|
+
setOpacity(opacity: number, transition?: TransitionOptions): void
|
|
247
|
+
setEdges(enabled: boolean, transition?: TransitionOptions): void
|
|
245
248
|
```
|
|
246
249
|
|
|
247
|
-
`
|
|
250
|
+
`transition` 用来给能插值的字段加过渡,语义见[动画与过渡](#动画与过渡);不传则和旧版一样即时生效。
|
|
251
|
+
|
|
252
|
+
`setStyle` 是**合并**语义,只传要改的字段。除了 `shading`(编译期宏,需重编译着色器)、`edges` / `edgeThreshold`(结构变更,走 `setEdges` / 重建棱线)之外,其余字段都是 uniform / 材质状态更新,热切换成本很低。
|
|
248
253
|
|
|
249
254
|
棱线优先用**数据自带的棱线包**(`primitiveType === 13` 的索引包):解析时就建好 `LineSegments`,开关只是切 `visible`,成本为零。数据里没有时才用 `EdgesGeometry` 在 CPU 端现算(8ms 一帧切片,超过 12 万索引直接跳过)。棱线画成**屏幕空间等宽线**(`packages/s3m-three/src/render/EdgeLines.ts`):WebGL 的 `lineWidth` 恒定 1px,只有把每条棱摊成面向屏幕的四边形才能真的调粗细。
|
|
250
255
|
|
|
@@ -376,8 +381,8 @@ interface Stats {
|
|
|
376
381
|
### 投影
|
|
377
382
|
|
|
378
383
|
```ts
|
|
379
|
-
|
|
380
|
-
|
|
384
|
+
// S3MViewer 不提供投影切换:内核只消费宿主传入的 mvp。
|
|
385
|
+
// 需要正交时由宿主自行替换 mvp;s3m-maplibre 的 S3MLayer 封装了 setProjection(..., transition?)。
|
|
381
386
|
```
|
|
382
387
|
|
|
383
388
|
内核只消费宿主给的 `mvp`;正交 MVP 由宿主在传入前自行替换,数学工具(`buildOrthoMVP` / `extractFovRadians` / `extractNearFar` / `extractProjectionMatrix`)从本包导出,见[投影](#投影)。
|
|
@@ -655,6 +660,355 @@ attributes: {
|
|
|
655
660
|
|
|
656
661
|
---
|
|
657
662
|
|
|
663
|
+
## 动画与过渡
|
|
664
|
+
|
|
665
|
+
> 设计取舍与性能模型见仓库内 `packages/s3m-three/docs/ANIMATION.md`;本节是面向调用方的 API 契约。
|
|
666
|
+
|
|
667
|
+
动画系统只有一个判据:
|
|
668
|
+
|
|
669
|
+
> **能不能在不碰 material / program / geometry 的前提下,用一个 float 把这一帧画出来?**
|
|
670
|
+
|
|
671
|
+
能,就走 `Animator` 逐帧插值,成本 O(1)(单体是 O(受影响网格));不能,就只能编排「淡出 → 换 → 淡入」,不要试图对结构做插值。
|
|
672
|
+
|
|
673
|
+
三条必须知道的约定:
|
|
674
|
+
|
|
675
|
+
1. **单一写者**:每帧只有 `Animator.tick()` 写渲染状态。公开 API 只写目标值,所以 `getStyle()` 会立刻返回终值,屏幕上的值由 `viewer.style` / uniforms 逐步推进。
|
|
676
|
+
2. **同 key 覆盖,不排队**:连续调用不会积压,新动画从**当前显示值**续走。
|
|
677
|
+
3. **空闲零成本**:没有活跃 track 时 `tick()` 第一行就返回 `false`,宿主据此停止重绘。
|
|
678
|
+
|
|
679
|
+
### 快速开始
|
|
680
|
+
|
|
681
|
+
```ts
|
|
682
|
+
import { S3MViewer, STYLE, Path } from 's3m-three';
|
|
683
|
+
|
|
684
|
+
const viewer = new S3MViewer({ /* ... */ });
|
|
685
|
+
|
|
686
|
+
// 样式过渡:能插值的字段走动画,不能插值的仍即时生效
|
|
687
|
+
viewer.setStyle({ colorA: '#ef4444', opacity: 0.6 }, { duration: 600, easing: 'easeOutCubic' });
|
|
688
|
+
viewer.setOpacity(0.5, { duration: 400 });
|
|
689
|
+
|
|
690
|
+
// 单体:抬高与变色各走一条通道,互不覆盖
|
|
691
|
+
viewer.animateFeature(smid, { elevation: 120, color: '#ef4444' }, { duration: 800 });
|
|
692
|
+
viewer.animateFeatures(smids, { opacity: 0 }, { duration: 500, stagger: 8 });
|
|
693
|
+
|
|
694
|
+
// 位移 / 姿态
|
|
695
|
+
viewer.moveFeature(smid, [120, 0, 0], { duration: 1200, easing: 'easeInOutCubic' });
|
|
696
|
+
viewer.rotateFeature(smid, Math.PI / 2, [pivotX, pivotY, 0], { duration: 600 });
|
|
697
|
+
|
|
698
|
+
// 沿折线运动(弧长参数化)
|
|
699
|
+
viewer.followPath(smid, [[0, 0, 0], [80, 0, 0], [80, 60, 0]], {
|
|
700
|
+
duration: 6000,
|
|
701
|
+
loop: true,
|
|
702
|
+
offset: [baseX, baseY, 0],
|
|
703
|
+
});
|
|
704
|
+
viewer.stopPath(smid);
|
|
705
|
+
|
|
706
|
+
// 整批换色 / 换高度:双纹理交叉淡化(目标表是全量替换,先复制现有表)
|
|
707
|
+
const nextStyles = new Map(viewer.getFeatureStyles());
|
|
708
|
+
nextStyles.set(smid, { ...(nextStyles.get(smid) ?? {}), color: '#22c55e' });
|
|
709
|
+
viewer.crossFadeStyles(nextStyles, { duration: 800 });
|
|
710
|
+
|
|
711
|
+
// 结构变更:只能编排
|
|
712
|
+
viewer.setEdges(true, { duration: 400 });
|
|
713
|
+
await viewer.setMode(STYLE.HEIGHT, { duration: 300, dim: 0.35 });
|
|
714
|
+
|
|
715
|
+
// 调度器直连
|
|
716
|
+
viewer.animator.cancel('style.opacity'); // 停在当前值
|
|
717
|
+
viewer.animator.finish('style.opacity'); // 直接到终值
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
### 过渡参数(TransitionOptions)
|
|
721
|
+
|
|
722
|
+
```ts
|
|
723
|
+
interface TransitionOptions {
|
|
724
|
+
/** 时长(毫秒)。0 / 不传 = 立即生效 */
|
|
725
|
+
duration?: number;
|
|
726
|
+
/** 延迟(毫秒) */
|
|
727
|
+
delay?: number;
|
|
728
|
+
/** 缓动曲线:内置名或自定义 (t) => number。默认 'linear' */
|
|
729
|
+
easing?: EasingName | EasingFn;
|
|
730
|
+
/** 打断策略,默认 'proportional' */
|
|
731
|
+
retarget?: 'proportional' | 'fixed';
|
|
732
|
+
/** 弹簧。给了它就忽略 duration / easing */
|
|
733
|
+
spring?: { stiffness: number; damping: number; epsilon?: number };
|
|
734
|
+
/** 批量错峰间隔(毫秒),仅 animateFeatures 消费 */
|
|
735
|
+
stagger?: number;
|
|
736
|
+
/** 自然结束或 finish() 时回调;cancel() 不调用 */
|
|
737
|
+
onComplete?: () => void;
|
|
738
|
+
}
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
- **`duration: 0` 且没有 `delay` / `spring` 时立即写入**,不建 track;带 `delay` 仍会建 track,延迟结束后瞬间到位。`animator.to()` 的立即分支会同步调用 `onComplete`,但 `setStyle` / `setEdges` 的即时分支不会回调;要确保回调触发,就给一个大于 0 的时长、加 `delay`,或自己调用。
|
|
742
|
+
- **`easing` 首次默认 `linear`;retarget 时省略 `easing` 会沿用该通道上一次的曲线**(不是重置成 linear)。要固定观感就每次都显式传。
|
|
743
|
+
- **`onComplete` 是通道级的**:一次调用驱动 N 条通道(例如 `setStyle({ colorA, opacity }, ...)` 或 `animateFeature` 同时改多个属性),回调就会在各通道结束时各触发一次。需要「全部结束只回调一次」就自己在调用方计数,或拆成多次单属性调用。retarget 时旧的 `onComplete` 会被新调用的值覆盖(不传就是清空)。
|
|
744
|
+
- **打断保速**(`retarget: 'proportional'`,默认):新时长为 `base × 剩余距离 / 总距离`,并夹在 `[15%, 100%] × base`;`base` 是本次传入的 `duration`,不传则沿用上一次。只差 1% 的修正不会也走完整 600ms。`'fixed'` 则每次都走完整时长。
|
|
745
|
+
- **spring**:没有时长概念,靠物理收敛,中途改目标位置和速度都连续。收敛判据是位移与速度同时小于 `epsilon`(默认 `1e-3`),判定后 track 结束;`epsilon` 设得过小会长时间不收敛,让 `tick()` 一直返回 `true`。典型 `{ stiffness: 120, damping: 14 }`。
|
|
746
|
+
- **一次调用的参数对所有通道生效**。要「透明度 800ms、颜色 200ms」,分两次 `setStyle` 调用,不要指望一个对象里逐通道配置(目前没有 per-channel transition 表)。
|
|
747
|
+
- `easing` 默认是 **`linear`**,不是 CSS 的 `ease`。想要网页常见手感就显式写 `easeInOutCubic` / `cubicBezier(...)`。
|
|
748
|
+
|
|
749
|
+
#### 曲线库
|
|
750
|
+
|
|
751
|
+
```ts
|
|
752
|
+
import { easing, cubicBezier, steps, EASING_NAMES } from 's3m-three';
|
|
753
|
+
|
|
754
|
+
easing('easeOutCubic');
|
|
755
|
+
cubicBezier(0.4, 0, 0.2, 1); // 与 CSS cubic-bezier() 数值对齐
|
|
756
|
+
steps(6, 'end'); // 6 档离散跳变
|
|
757
|
+
easing((t) => t * t); // 自定义曲线:(t: number) => number
|
|
758
|
+
EASING_NAMES; // 全部内置名,适合生成下拉框
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
内置 31 条:`linear`,以及 `{In, Out, InOut} × {Quad, Cubic, Quart, Quint, Sine, Expo, Circ, Back, Elastic, Bounce}`。名字拼错会直接抛错,不会静默退化成「没动画」。自定义曲线约定 `0 → 0`、`1 → 1`;库不做钳制。
|
|
762
|
+
|
|
763
|
+
打断时缓动会从 `t=0` 重新起算。`easeOutCubic` 恰恰是起点速度最大,方向突变会有点「顿」;连续拖拽 / 跟随类交互优先用 `spring`,或者把 `retarget` 保速交给默认策略。
|
|
764
|
+
|
|
765
|
+
### 样式过渡
|
|
766
|
+
|
|
767
|
+
```ts
|
|
768
|
+
setStyle(patch?: Partial<S3MStyle>, transition?: TransitionOptions): void
|
|
769
|
+
setOpacity(opacity: number, transition?: TransitionOptions): void
|
|
770
|
+
setEdges(enabled: boolean, transition?: TransitionOptions): void
|
|
771
|
+
setMode(mode: StyleMode, opts?: { duration?: number; dim?: number }): Promise<void>
|
|
772
|
+
```
|
|
773
|
+
|
|
774
|
+
已注册的样式通道(其余键即使带了 `transition` 也即时生效):
|
|
775
|
+
|
|
776
|
+
| 通道 | 维度 | 写回 |
|
|
777
|
+
|---|---|---|
|
|
778
|
+
| `style.opacity` | 1 | 共享 `uOpacity`;混合开关只在跨 `0.999` 时切一次 |
|
|
779
|
+
| `style.colorA` / `colorB` / `colorC` / `selectColor` / `edgeColor` | 3 | 线性空间 RGB |
|
|
780
|
+
| `style.texMix` / `floorHeight` / `selectOpacity` / `selectEmissive` / `selectElevation` / `dimFactor` / `roofThreshold` / `ambientGain` / `edgeWidth` / `edgeOpacity` / `outlineWidth` | 1 | 直接写 uniform / 字段 |
|
|
781
|
+
| `style.edgeFade` | 1 | 棱线淡入乘子,`setEdges` 内部使用 |
|
|
782
|
+
| `style.fade` | 1 | 整体压暗乘子,`setMode` 内部使用 |
|
|
783
|
+
|
|
784
|
+
**不能插值的字段**:`mode`(用 `setMode`)、`shading`(编译期变体,切换会取预热好的 program)、`edges`(用 `setEdges`,走 `uEdgeFade` 淡入淡出)、`edgeThreshold`(要重建棱线几何)、`selectMode` / `outline` / `outlineStyle` / `outlineColor` / `outlineWidthPx`、`speed` / `depthWrite` / `fadeIn`。它们会即时生效,过渡参数对它们无效。
|
|
785
|
+
|
|
786
|
+
几个容易误解的点:
|
|
787
|
+
|
|
788
|
+
- **颜色在线性空间插值**。端点严格吻合,但中间色比 CSS 的 sRGB 过渡更亮、更灰。目前没有 `colorSpace: 'srgb'` 开关;要 CSS 观感就自己算中间色再分段 set,或接受这个差异。
|
|
789
|
+
- **`getStyle()` 返回目标值**,动画进行中也一样。判断「现在显示到哪」读 `viewer.style` 或对应 uniform,不要拿 `getStyle()` 做帧间逻辑。
|
|
790
|
+
- **全局透明度允许到 0**。`setOpacity(0)` 就是彻底看不见:`uOpacity` 写 0,同时 `renderFrame()` 跳过本层绘制——**不画颜色也不写深度**,所以不会出现「看不见却把底图挡出一个洞」的经典问题。`getStyle().opacity` 与屏幕值一致。
|
|
791
|
+
- **`transparent` 只在跨阈值时切一次**,不会逐帧抖 program。但「从 1 到 0.5」的第一帧仍会有一次 program 切换/编译,几十毫秒级的首帧卡顿落在这里。
|
|
792
|
+
- **`setEdges(true, { duration })` 只对屏幕空间等宽棱线做 `uEdgeFade` 淡入**:几何仍旧 8ms 一片地建,建好一块亮一块。数据自带的线段包是直接切 `visible`,不会淡入。关闭时淡完才 `dispose`,避免「啪」一下消失。
|
|
793
|
+
- **`setMode` 是压暗 → 换 → 亮回来**:`duration` 默认 300ms,`dim` 默认 0.35(夹在 0.05~1),Promise 在亮回来后 resolve。重复调用靠代次号作废旧编排;切到当前模式是空操作。`uFade` 与 `dimFactor` 是两条独立通道,不会打架。
|
|
794
|
+
- **`fadeIn` 只作用于之后新加载的瓦片**(首次加载 / LOD 换瓦),不是「当前瓦片淡入」。默认 0;开启后淡入期间瓦片进透明队列,几百块同时淡入有一小段额外开销。
|
|
795
|
+
|
|
796
|
+
### 单体动画
|
|
797
|
+
|
|
798
|
+
```ts
|
|
799
|
+
animateFeature(smid: number, style: Partial<FeatureStyle>, transition?: TransitionOptions): void
|
|
800
|
+
animateFeatures(smids: number[], style: Partial<FeatureStyle>, transition?: TransitionOptions): void
|
|
801
|
+
moveFeature(smid: number, translation: [number, number, number], transition?: TransitionOptions): void
|
|
802
|
+
moveFeatureBy(smid: number, delta: [number, number, number], transition?: TransitionOptions): void
|
|
803
|
+
rotateFeature(smid: number, rotation: FeatureStyle['rotation'], pivot?: [number, number, number], transition?: TransitionOptions): void
|
|
804
|
+
rotateFeatureBy(smid: number, deltaRotation: number | [number, number, number], pivot?: [number, number, number], transition?: TransitionOptions): void
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
`animateFeature` 能动画的属性:
|
|
808
|
+
|
|
809
|
+
| 字段 | 通道 | 维度 | 说明 |
|
|
810
|
+
|---|---|---|---|
|
|
811
|
+
| `translation` | `feature.<smid>.translation` | 3 | 相对原始位置的**绝对**偏移(米,数据集局部 ENU:x 东 / y 北 / z 天;多数据集相对各自锚点) |
|
|
812
|
+
| `elevation` | `feature.<smid>.elevation` | 1 | 单体垂直拔高(米) |
|
|
813
|
+
| `opacity` | `feature.<smid>.opacity` | 1 | 单体透明度(batch 粒度;`<= 0` 等价 `hidden`) |
|
|
814
|
+
| `color` | `feature.<smid>.color` | 3 | 单体自定义色,线性空间插值 |
|
|
815
|
+
| `rotation` | `feature.<smid>.rotation` | 3 | 姿态旋转(欧拉角分量插值) |
|
|
816
|
+
|
|
817
|
+
- **每个属性一条独立通道**,同一单体「一边抬高一边变色一边平移」互不覆盖。重复设置同一属性会 retarget,不会排队。
|
|
818
|
+
- **`translation` 是绝对偏移**,不是增量。增量用 `moveFeatureBy`;它的起点读当前 `translation`,连续调用会累加。
|
|
819
|
+
- **`rotation` 的写法**:`number` = 绕 Z 轴(天向)的弧度;`[rx, ry, rz]` = 欧拉角;`[x, y, z, w]` = 四元数;也接受 `THREE.Euler` / `Quaternion` / `Matrix3` / `Matrix4`。`pivot` 是**局部坐标**的旋转轴心,默认 `[0,0,0]`——绕模型原点转通常会把楼甩出去,记得传包围盒中心。
|
|
820
|
+
- **旋转按欧拉角三分量线性插值**。目标与当前相差接近 ±π 时可能走「长边」。连续自转别用一次性大角度,改用 `rotateFeatureBy` 每次加小角度,或拆成多段。
|
|
821
|
+
- **`hidden` 不可插值**,会立即生效。要「淡出再隐藏」:
|
|
822
|
+
```ts
|
|
823
|
+
viewer.animateFeature(smid, { opacity: 0 }, {
|
|
824
|
+
duration: 300,
|
|
825
|
+
onComplete: () => viewer.setFeatureStyle(smid, { hidden: true }),
|
|
826
|
+
});
|
|
827
|
+
```
|
|
828
|
+
- **`stagger` 只被 `animateFeatures` 消费**:第 i 个单体的延迟 = `delay + i × stagger`。一万个单体错峰 8ms,总时长不变,但每帧只推进一小批,峰值自然摊平。
|
|
829
|
+
- **位移 / 旋转会自动关掉受影响网格的 `frustumCulled`**,否则移出原始包围球后整块瓦片会凭空消失;值回到 0 时恢复。
|
|
830
|
+
- **未加载的 smid 也会保留目标样式**,等对应瓦片加载后自动套用。通道写入对空网格是无害的。
|
|
831
|
+
- **`removeFeatureStyle` / `clearFeatureStyles` 会回收该单体的全部通道**,动画随之中断(不会回调 `onComplete`)。
|
|
832
|
+
|
|
833
|
+
`FeatureStyle` 里剩下的 `hidden` 是即时字段;`gpuPath` 不通过 `animateFeature` 驱动,见下一节。
|
|
834
|
+
|
|
835
|
+
### 路径运动(CPU)
|
|
836
|
+
|
|
837
|
+
```ts
|
|
838
|
+
class Path {
|
|
839
|
+
constructor(points: ArrayLike<number> | Array<[number, number, number]>, opts?: { closed?: boolean });
|
|
840
|
+
readonly length: number; // 总弧长(米)
|
|
841
|
+
sample(s: number, out: Float32Array | number[]): void; // 按已走距离取点
|
|
842
|
+
sampleAt(t: number, out: Float32Array | number[]): void; // 按归一化进度取点
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
followPath(smid, points: Path | ArrayLike<number> | Array<[number, number, number]>, opts?: PathFollowOptions): void
|
|
846
|
+
stopPath(smid: number): void
|
|
847
|
+
```
|
|
848
|
+
|
|
849
|
+
```ts
|
|
850
|
+
interface PathFollowOptions {
|
|
851
|
+
duration?: number; // 走完全程的时长(毫秒)
|
|
852
|
+
speed?: number; // 线速度(米/秒);给了 duration 就以 duration 为准
|
|
853
|
+
loop?: boolean; // 循环
|
|
854
|
+
closed?: boolean; // 折线首尾相连(传 Path 实例时无效,构造时决定)
|
|
855
|
+
easing?: EasingName | EasingFn; // 作用在**已走距离**上,默认 linear(恒速)
|
|
856
|
+
offset?: [number, number, number]; // 路径整体偏移(米)
|
|
857
|
+
onComplete?: () => void; // 非循环走完时回调
|
|
858
|
+
}
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
- 缓动作用在**弧长**上,不是顶点索引。顶点疏密不均也不会忽快忽慢;`easeInQuad` 半程只走 1/4 距离。
|
|
862
|
+
- `duration` 与 `speed` 都不给时默认 2000ms。`speed` 按米/秒换算时长。
|
|
863
|
+
- 路径点是**数据集局部 ENU 米坐标**(相对该单体所属数据集的锚点;单数据集时就是场景 ENU),不是经纬度;`offset` 相当于路径原点。落点写进 `translation`,所以拾取、选中描边、棱线会整体跟随。
|
|
864
|
+
- `loop: true` 时每次走完从起点重来(进度通道的 `read` 恒为 0);`onComplete` 只在非循环时回调。闭合路径 + 循环才是无缝的。
|
|
865
|
+
- 对同一 smid 再次 `followPath` 也会从新路径的**起点**重新开始,不是从当前位置接续;要接续就先 `stopPath`,自行裁掉已走路段并换算 `offset`。
|
|
866
|
+
- `stopPath` 停在当前位置并回收通道,不回弹。零长路径直接忽略,不建 track。
|
|
867
|
+
- **不要和 `moveFeature` 同时驱动同一个单体**:两者都写 `translation`,后写的会覆盖前者。
|
|
868
|
+
- CPU 路线适合几十到几千个 mover;上万个请用下面的 GPU 路径。
|
|
869
|
+
|
|
870
|
+
### GPU 路径动画(万级)
|
|
871
|
+
|
|
872
|
+
```ts
|
|
873
|
+
registerGPUPath(points, opts?: { id?: number; name?: string; closed?: boolean }): number
|
|
874
|
+
unregisterGPUPath(id: number): boolean
|
|
875
|
+
getGPUPathManager(): GPUPathManager
|
|
876
|
+
|
|
877
|
+
bindGPUPath(smid: number, path: number | Path | ArrayLike<number> | Array<[number, number, number]>, options?: Omit<GPUPathOptions, 'pathId'>): number
|
|
878
|
+
unbindGPUPath(smid: number): void
|
|
879
|
+
setGPUPathProgress(smid: number, progress: number): void
|
|
880
|
+
setGPUPathTime(time: number, autoAdvance?: boolean): void
|
|
881
|
+
getGPUPathTime(): number
|
|
882
|
+
```
|
|
883
|
+
|
|
884
|
+
```ts
|
|
885
|
+
interface GPUPathOptions {
|
|
886
|
+
pathId: number; // registerGPUPath 返回的 ID
|
|
887
|
+
speed?: number; // 归一化进度/秒,0.05 ≈ 20 秒一圈
|
|
888
|
+
phase?: number; // 初始相位(0~1)
|
|
889
|
+
loop?: 'loop' | 'pingpong' | 'clamp' | boolean; // boolean false = clamp
|
|
890
|
+
autoHeading?: boolean; // 按路径切线自动转向(默认 true)
|
|
891
|
+
}
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
- 路径按**等弧长**烘成一张 `RGBA32F` 纹理:每行一条路径,256 个采样点,`RGBA = x, y, z, yaw`。yaw 做了连续角度展开,避免 ±π 处插值回旋。GPU 双线性采样得到平滑位置与朝向。路径点同样是**数据集局部 ENU**。
|
|
895
|
+
- `autoHeading` 把模型 **+X 轴**转到路径切线方向(`yaw = atan2(dy, dx)`,逆时针为正)。如果你的模型正前方不是 +X,需要自己在建模侧转好,或用 `autoHeading: false` 自己算朝向。
|
|
896
|
+
- 单体参数写进状态纹理第 5 行 `[pathId, speed, phase, modeFlag]`,顶点着色器自己算位置,CPU 每帧只写一个 `uPathTime`。几万个单体也只有一次 uniform 写入。
|
|
897
|
+
- **路径 ID 决定纹理行**。`height = maxId + 1`,不要用很大的稀疏 ID;不传 `id` 时自增分配。
|
|
898
|
+
- `bindGPUPath` 传折线时会自动注册并返回 pathId;传数字则复用已注册路径。绑定后该网格的视锥剔除会被关闭(解绑不会自动恢复)。
|
|
899
|
+
- `setGPUPathProgress` 会把该单体的 `speed` 置 0、`phase` 设为进度,用于手动定位。`setGPUPathTime(t, false)`(默认)会冻结自动推进并写入指定秒数;`setGPUPathTime(t, true)` 写入后恢复自动推进。
|
|
900
|
+
- **自动推进按帧累加 `0.016` 秒**,不是真实时钟。低帧率下会变慢;需要严格速度时每帧用 `setGPUPathTime(elapsedSeconds, false)` 自己驱动。
|
|
901
|
+
- **只要 GPU 路径库非空,`renderFrame()` 就会一直返回 `true`**(即使没有单体绑定、或你把 `uPathTime` 冻结),宿主会持续重绘。暂停 / 结束时应 `unbindGPUPath` 并 `unregisterGPUPath`,否则等于空转烧电。
|
|
902
|
+
- `unbindGPUPath` 删除 `FeatureStyle.gpuPath`,单体回到静态状态。
|
|
903
|
+
- **拾取与包围盒都跟着走**:`PICK_VERT` 与主着色器采样同一份路径纹理(row5 → 路径纹理 → 位置 + yaw),所以运动中的单体点得中;`getFeatureBounds()` 用同一套公式(`phase + uPathTime × speed`,再按 loop 模式夹取)在 CPU 复算位置与朝向。三者共用一份语义,改其中一处必须同步另外两处。
|
|
904
|
+
- **仍然按原位置的**:属性过滤、以及你自己按 `pickId` 建的空间索引——它们不碰渲染状态,没有「当前显示位置」的概念。
|
|
905
|
+
- GPU 路径与 `followPath` / `moveFeature` 不要同时作用于同一个单体。
|
|
906
|
+
|
|
907
|
+
`getGPUPathManager()` 返回的 `GPUPathManager` 还提供 `registerPath` / `unregisterPath` / `getPath` / `hasPath` / `getPathIds` / `clear` / `count` / `getTexture` / `dispose`,一般用上面的 viewer 包装即可。
|
|
908
|
+
|
|
909
|
+
### 双纹理交叉淡化(crossFadeStyles)
|
|
910
|
+
|
|
911
|
+
```ts
|
|
912
|
+
crossFadeStyles(
|
|
913
|
+
targetStyles: Map<number, FeatureStyle> | Record<string | number, FeatureStyle>,
|
|
914
|
+
transition?: TransitionOptions
|
|
915
|
+
): void
|
|
916
|
+
```
|
|
917
|
+
|
|
918
|
+
把目标单体状态烘到第二张状态纹理,只动一个 `uBatchMix` 从 0 到 1,顶点 / 片元采样状态纹理时按它 `mix(A, B)`。整套状态(颜色 / 抬高 / 平移 / 透明度 / 隐藏 / 姿态 / GPU 路径参数)都能过渡,CPU 每帧只写一个 float;`hidden` 这种布尔量在 50% 处切换。
|
|
919
|
+
|
|
920
|
+
- **目标表是「全量替换」,不是合并**。提交时会 `clear()` 现有 `featureStyles` 再写入 `targetStyles`;没出现在目标表里的单体将失去自定义样式。要保留的条目必须自己带上。
|
|
921
|
+
- 没有过渡(`duration` 为 0 且无 `spring`)时直接提交,不建 track。
|
|
922
|
+
- 过渡期间状态纹理多一次采样;大规模换色 / 换高时这仍比逐单体建动画通道便宜几个数量级。
|
|
923
|
+
- 这是「全城换色」的正确入口。`setThematicColors` / `colorByField` 本身是即时批量操作,不会自动走交叉淡化;需要过渡就自己构造目标样式表再调 `crossFadeStyles`。
|
|
924
|
+
- **不要手动 `animator.cancel('batch.mix')`**:它只会停在中间混合值,且不提交目标。要终止就再调一次 `crossFadeStyles`(会重置 mix 并重新准备),或用 `animator.finish('batch.mix')` 让它走完提交。
|
|
925
|
+
- 过渡按调用时的网格快照准备,中途新加载的瓦片不参与这次混合,会按提交前状态显示。瓦片频繁进出的场景建议等稳定后再切。
|
|
926
|
+
|
|
927
|
+
### 调度器直连(Animator)
|
|
928
|
+
|
|
929
|
+
`viewer.animator` 是公开的 `Animator` 实例;也可以脱离 three 单独使用(纯数学,Node 可跑)。
|
|
930
|
+
|
|
931
|
+
```ts
|
|
932
|
+
import { Animator, type Channel } from 's3m-three';
|
|
933
|
+
|
|
934
|
+
const animator = new Animator(() => performance.now()); // 可注入时钟,便于测试
|
|
935
|
+
|
|
936
|
+
let value = 0;
|
|
937
|
+
const channel: Channel = {
|
|
938
|
+
dim: 1,
|
|
939
|
+
read: (out) => { out[0] = value; },
|
|
940
|
+
write: (v) => { value = v[0]; }, // 必须 O(1) 且不分配
|
|
941
|
+
};
|
|
942
|
+
|
|
943
|
+
animator.register('demo.value', channel);
|
|
944
|
+
animator.onActive = () => requestAnimationFrame(loop);
|
|
945
|
+
animator.to('demo.value', 1, { duration: 600, easing: 'easeOutCubic' });
|
|
946
|
+
|
|
947
|
+
function loop(now: number) {
|
|
948
|
+
if (animator.tick(now)) requestAnimationFrame(loop);
|
|
949
|
+
}
|
|
950
|
+
```
|
|
951
|
+
|
|
952
|
+
| 成员 | 说明 |
|
|
953
|
+
|---|---|
|
|
954
|
+
| `register(key, channel)` / `unregister(key)` / `unregisterPrefix(prefix)` | 通道注册与回收;注册同名会覆盖 |
|
|
955
|
+
| `has(key)` / `isActive(key)` | 通道是否存在 / 是否有活跃 track |
|
|
956
|
+
| `to(key, target, opts?)` | 推向目标;未注册的 key 抛错;`dim=3` 必须传三元数组 |
|
|
957
|
+
| `cancel(key)` | 停在当前值,不写终值、不回调 |
|
|
958
|
+
| `finish(key)` | 直接写终值并结束,回调 `onComplete` |
|
|
959
|
+
| `clear()` | 丢弃全部 track(不回调) |
|
|
960
|
+
| `tick(now?)` | 推进一帧,返回是否还有活跃动画;无 track 时零成本早退 |
|
|
961
|
+
| `onActive` | 新建 track / 立即写值 / `finish` 时触发,宿主用它踢一帧重绘;retarget 不触发 |
|
|
962
|
+
| `budgetMs` | 单帧写入预算,默认 2.5ms;超了把剩余通道推到下一帧 |
|
|
963
|
+
| `skippedLastTick` | 上一帧因超预算没推进的通道数 |
|
|
964
|
+
| `activeCount` / `active` | 活跃 track 数量 / 是否有动画 |
|
|
965
|
+
|
|
966
|
+
内置通道 key:
|
|
967
|
+
|
|
968
|
+
| 前缀 | 用途 |
|
|
969
|
+
|---|---|
|
|
970
|
+
| `style.*` | 样式字段(见上表)、`style.edgeFade`、`style.fade` |
|
|
971
|
+
| `feature.<smid>.translation` / `.elevation` / `.opacity` / `.color` / `.rotation` | 单体属性,按需惰性注册 |
|
|
972
|
+
| `feature.<smid>.path` | 路径进度 0→1 |
|
|
973
|
+
| `tile.<seq>.fade` | 新瓦片淡入,用完即回收 |
|
|
974
|
+
| `batch.mix` | 交叉淡化混合系数 |
|
|
975
|
+
| `projection.t` | 仅 `S3MLayer` 注册,正交投影插值 |
|
|
976
|
+
|
|
977
|
+
超预算时被跳过的通道**这一帧完全不推进**,下一帧按绝对时间追上——跳一帧不丢状态,只是晚一帧显示。`budgetMs` 是整帧写入预算,不是每通道预算;相机也在动时不要把它吃满。
|
|
978
|
+
|
|
979
|
+
### 帧驱动与生命周期
|
|
980
|
+
|
|
981
|
+
`S3MViewer.renderFrame()` 内部已经在渲染前调用 `animator.tick()`,并把「是否还有动画」并入返回值。宿主只需要:
|
|
982
|
+
|
|
983
|
+
```ts
|
|
984
|
+
function frame(now: number) {
|
|
985
|
+
const needsNextFrame = viewer.renderFrame({ /* mvp / cameraEnu / fovRad / canvasHeight */ });
|
|
986
|
+
if (needsNextFrame) requestAnimationFrame(frame);
|
|
987
|
+
}
|
|
988
|
+
```
|
|
989
|
+
|
|
990
|
+
- **不要自己再调一次 `animator.tick()`**,会双倍推进。
|
|
991
|
+
- `renderFrame()` 返回 `true` 的条件:动画进行中、`STYLE.DYNAMIC`、GPU 路径活跃、瓦片加载中、瓦片层级变化。动画结束那一帧必须回到 `false`,否则宿主会永远重绘。
|
|
992
|
+
- 时钟是 `performance.now()` 的绝对时间。标签页切回来不会补帧,而是直接到当前时间对应的进度;弹簧则会因长时间未推进直接判定收敛。
|
|
993
|
+
- `onActive` 负责在空闲时踢第一帧。宿主是按需渲染的(MapLibre 尤其如此),漏了这一步的现象就是「点了按钮没反应,直到别的操作触发重绘才跳到终态」。
|
|
994
|
+
- **动画期间不要绕过 animator 直写 uniform**(例如 `viewer.uniforms.uColorA.value.set(...)`),否则会和动画互相覆盖。公开 API 一律走 `setStyle` / `animateFeature`。
|
|
995
|
+
|
|
996
|
+
### 已知边界
|
|
997
|
+
|
|
998
|
+
下面这些是**设计上就不会做**的,不是待办:
|
|
999
|
+
|
|
1000
|
+
- `mode` / `shading` / `edgeThreshold` 不是可插值属性:`mode` 是着色分支,`shading` 是编译期变体,`edgeThreshold` 要重建 `EdgesGeometry`。前者用 `setMode` 的 fade-through,后两者即时切换。`edges` 的开关本身有 `uEdgeFade` 淡入淡出(`setEdges(true, { duration })`),只是几何构建仍然分片。
|
|
1001
|
+
- `fadeIn` 会让淡入中的瓦片进入透明队列;首次加载几百块瓦片时有一小段额外开销,默认关闭。想彻底躲开透明队列只能改成抖动透明,观感会变成「点状渐显」,没有做。
|
|
1002
|
+
- 地图宿主(MapLibre / Mapbox)下相机矩阵每帧由宿主喂入,**不要自己 tween `camera.position`**,相机动效走 `map.easeTo` / `flyTo` / `fitBounds`(`flyToFeature` 已经是这个路子)。纯 three 宿主没人覆盖相机,才可以在 animator 里做轨道插值。
|
|
1003
|
+
|
|
1004
|
+
下面这些是**已经解决、但需要知道实现口径**的:
|
|
1005
|
+
|
|
1006
|
+
- `shading` 首次切换不再现场编译:首帧后会自动预热另一种变体(选项 `prewarmShading`,默认开),切换时直接取 program 缓存。预热期间跳一两帧渲染,肉眼不可见;要自己挑时机就关掉选项、手动调 `prewarmShading()`。
|
|
1007
|
+
- 全局 `opacity` 可以到 0:到 0 时本层**跳过绘制**,不写颜色也不写深度,不会在底图上留洞。
|
|
1008
|
+
- GPU 路径运动中的单体:**拾取已经准确**(`PICK_VERT` 与主着色器采样同一份路径纹理,含 loop / pingpong / clamp 与自动朝向),**`getFeatureBounds()` 也按同一公式在 CPU 复算**。仍按原位置计算的只剩「属性过滤」这类不涉及空间的逻辑,以及你自己按 `pickId` 做的空间索引。
|
|
1009
|
+
|
|
1010
|
+
---
|
|
1011
|
+
|
|
658
1012
|
## 纯 three.js 使用
|
|
659
1013
|
|
|
660
1014
|
`S3MViewer` 之下还有一层完全裸的用法:`core/` 解析与 `tileset/` 瓦片树都是宿主无关的,可以直接塞进任意 three 场景(`demo/three.js` 是一个完整例子,走的就是 `S3MViewer`;下面是不用 viewer 的最底层接法):
|
package/package.json
CHANGED
package/src/render/EdgeLines.ts
CHANGED
|
@@ -154,9 +154,12 @@ const VERT = /* glsl */ `
|
|
|
154
154
|
if ( autoHeading ) {
|
|
155
155
|
float c = cos( pathYaw );
|
|
156
156
|
float s = sin( pathYaw );
|
|
157
|
+
|
|
158
|
+
// GLSL 的 mat3 是列优先:下面两行是「第 0 列 = (c, s)」,等价于绕 Z 转 +yaw,
|
|
159
|
+
// 把模型 +X 朝向对到切线方向(yaw = atan2(dy, dx))。写成 (c,-s; s,c) 会左右镜像。
|
|
157
160
|
mat3 rotHeading = mat3(
|
|
158
|
-
c,
|
|
159
|
-
s,
|
|
161
|
+
c, s, 0.0,
|
|
162
|
+
-s, c, 0.0,
|
|
160
163
|
0.0, 0.0, 1.0
|
|
161
164
|
);
|
|
162
165
|
s3mRot = rotHeading * s3mRot;
|