@aura3d/rendering 4.0.2 → 4.0.4
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/EnvironmentPlatform.d.ts.map +1 -1
- package/dist/EnvironmentPlatform.js +6 -2
- package/dist/EnvironmentPlatform.js.map +1 -1
- package/dist/ForwardPass.d.ts +2 -0
- package/dist/ForwardPass.d.ts.map +1 -1
- package/dist/ForwardPass.js +70 -5
- package/dist/ForwardPass.js.map +1 -1
- package/dist/Geometry.d.ts +40 -0
- package/dist/Geometry.d.ts.map +1 -1
- package/dist/Geometry.js +39 -2
- package/dist/Geometry.js.map +1 -1
- package/dist/IndexBuffer.d.ts +16 -1
- package/dist/IndexBuffer.d.ts.map +1 -1
- package/dist/IndexBuffer.js +46 -1
- package/dist/IndexBuffer.js.map +1 -1
- package/dist/InstancedPBRMaterial.d.ts +2 -0
- package/dist/InstancedPBRMaterial.d.ts.map +1 -1
- package/dist/InstancedPBRMaterial.js +1 -0
- package/dist/InstancedPBRMaterial.js.map +1 -1
- package/dist/Material.d.ts +9 -0
- package/dist/Material.d.ts.map +1 -1
- package/dist/Material.js +3 -0
- package/dist/Material.js.map +1 -1
- package/dist/PBRMaterial.d.ts +2 -0
- package/dist/PBRMaterial.d.ts.map +1 -1
- package/dist/PBRMaterial.js +1 -0
- package/dist/PBRMaterial.js.map +1 -1
- package/dist/PortableShaderMaterial.d.ts +13 -3
- package/dist/PortableShaderMaterial.d.ts.map +1 -1
- package/dist/PortableShaderMaterial.js +24 -12
- package/dist/PortableShaderMaterial.js.map +1 -1
- package/dist/RenderDevice.d.ts +98 -0
- package/dist/RenderDevice.d.ts.map +1 -1
- package/dist/RenderDevice.js +129 -0
- package/dist/RenderDevice.js.map +1 -1
- package/dist/Renderer.d.ts +94 -0
- package/dist/Renderer.d.ts.map +1 -1
- package/dist/Renderer.js +321 -26
- package/dist/Renderer.js.map +1 -1
- package/dist/Sampler.d.ts +35 -0
- package/dist/Sampler.d.ts.map +1 -1
- package/dist/Sampler.js +96 -0
- package/dist/Sampler.js.map +1 -1
- package/dist/ShaderLibraryCore.d.ts +14 -0
- package/dist/ShaderLibraryCore.d.ts.map +1 -1
- package/dist/ShaderLibraryCore.js +94 -4
- package/dist/ShaderLibraryCore.js.map +1 -1
- package/dist/Texture.d.ts +53 -1
- package/dist/Texture.d.ts.map +1 -1
- package/dist/Texture.js +53 -2
- package/dist/Texture.js.map +1 -1
- package/dist/UnlitMaterial.d.ts +46 -0
- package/dist/UnlitMaterial.d.ts.map +1 -1
- package/dist/UnlitMaterial.js +32 -3
- package/dist/UnlitMaterial.js.map +1 -1
- package/dist/VertexFormat.d.ts +19 -1
- package/dist/VertexFormat.d.ts.map +1 -1
- package/dist/VertexFormat.js +40 -1
- package/dist/VertexFormat.js.map +1 -1
- package/dist/WebGL2Device.d.ts +16 -0
- package/dist/WebGL2Device.d.ts.map +1 -1
- package/dist/WebGL2Device.js +31 -6
- package/dist/WebGL2Device.js.map +1 -1
- package/dist/WebGPUDevice.d.ts +92 -1
- package/dist/WebGPUDevice.d.ts.map +1 -1
- package/dist/WebGPUDevice.js +417 -44
- package/dist/WebGPUDevice.js.map +1 -1
- package/dist/batching/BatchedGeometryPool.d.ts +22 -1
- package/dist/batching/BatchedGeometryPool.d.ts.map +1 -1
- package/dist/batching/BatchedGeometryPool.js +50 -2
- package/dist/batching/BatchedGeometryPool.js.map +1 -1
- package/dist/batching/DrawDataTexture.d.ts +21 -1
- package/dist/batching/DrawDataTexture.d.ts.map +1 -1
- package/dist/batching/DrawDataTexture.js +30 -4
- package/dist/batching/DrawDataTexture.js.map +1 -1
- package/dist/batching/MultiDrawBatch.d.ts +26 -0
- package/dist/batching/MultiDrawBatch.d.ts.map +1 -1
- package/dist/batching/MultiDrawBatch.js +64 -2
- package/dist/batching/MultiDrawBatch.js.map +1 -1
- package/dist/batching/index.d.ts +2 -2
- package/dist/batching/index.d.ts.map +1 -1
- package/dist/batching/index.js +2 -2
- package/dist/batching/index.js.map +1 -1
- package/dist/compute/ComputeContext.d.ts +84 -0
- package/dist/compute/ComputeContext.d.ts.map +1 -0
- package/dist/compute/ComputeContext.js +371 -0
- package/dist/compute/ComputeContext.js.map +1 -0
- package/dist/compute/index.d.ts +4 -0
- package/dist/compute/index.d.ts.map +1 -0
- package/dist/compute/index.js +3 -0
- package/dist/compute/index.js.map +1 -0
- package/dist/compute/types.d.ts +108 -0
- package/dist/compute/types.d.ts.map +1 -0
- package/dist/compute/types.js +25 -0
- package/dist/compute/types.js.map +1 -0
- package/dist/contracts/core.d.ts +1 -1
- package/dist/contracts/core.d.ts.map +1 -1
- package/dist/contracts/core.js.map +1 -1
- package/dist/contracts/flags.state.d.ts.map +1 -1
- package/dist/contracts/flags.state.js +20 -1
- package/dist/contracts/flags.state.js.map +1 -1
- package/dist/contracts/output.d.ts +1 -1
- package/dist/contracts/output.d.ts.map +1 -1
- package/dist/contracts/output.js.map +1 -1
- package/dist/contracts/post.d.ts +7 -0
- package/dist/contracts/post.d.ts.map +1 -1
- package/dist/contracts/post.js.map +1 -1
- package/dist/contracts/renderItem.d.ts +15 -0
- package/dist/contracts/renderItem.d.ts.map +1 -1
- package/dist/contracts/renderSource.d.ts +3 -1
- package/dist/contracts/renderSource.d.ts.map +1 -1
- package/dist/contracts/sampling.d.ts +23 -0
- package/dist/contracts/sampling.d.ts.map +1 -1
- package/dist/contracts/sampling.js.map +1 -1
- package/dist/environment/EnvironmentCache.d.ts.map +1 -1
- package/dist/environment/EnvironmentCache.js +7 -3
- package/dist/environment/EnvironmentCache.js.map +1 -1
- package/dist/environment/RoomEnvironmentScene.d.ts +2 -2
- package/dist/environment/RoomEnvironmentScene.d.ts.map +1 -1
- package/dist/environment/RoomEnvironmentScene.js.map +1 -1
- package/dist/geometry/Circle.d.ts +14 -0
- package/dist/geometry/Circle.d.ts.map +1 -0
- package/dist/geometry/Circle.js +31 -0
- package/dist/geometry/Circle.js.map +1 -0
- package/dist/geometry/Cone.d.ts +37 -0
- package/dist/geometry/Cone.d.ts.map +1 -0
- package/dist/geometry/Cone.js +129 -0
- package/dist/geometry/Cone.js.map +1 -0
- package/dist/geometry/Convex.d.ts +19 -0
- package/dist/geometry/Convex.d.ts.map +1 -0
- package/dist/geometry/Convex.js +27 -0
- package/dist/geometry/Convex.js.map +1 -0
- package/dist/geometry/Edges.d.ts +15 -0
- package/dist/geometry/Edges.d.ts.map +1 -0
- package/dist/geometry/Edges.js +98 -0
- package/dist/geometry/Edges.js.map +1 -0
- package/dist/geometry/Extrude.d.ts +29 -0
- package/dist/geometry/Extrude.d.ts.map +1 -0
- package/dist/geometry/Extrude.js +403 -0
- package/dist/geometry/Extrude.js.map +1 -0
- package/dist/geometry/Lathe.d.ts +20 -0
- package/dist/geometry/Lathe.d.ts.map +1 -0
- package/dist/geometry/Lathe.js +94 -0
- package/dist/geometry/Lathe.js.map +1 -0
- package/dist/geometry/Polyhedron.d.ts +21 -0
- package/dist/geometry/Polyhedron.d.ts.map +1 -0
- package/dist/geometry/Polyhedron.js +201 -0
- package/dist/geometry/Polyhedron.js.map +1 -0
- package/dist/geometry/Primitives.d.ts +38 -2
- package/dist/geometry/Primitives.d.ts.map +1 -1
- package/dist/geometry/Primitives.js +114 -0
- package/dist/geometry/Primitives.js.map +1 -1
- package/dist/geometry/Ring.d.ts +16 -0
- package/dist/geometry/Ring.d.ts.map +1 -0
- package/dist/geometry/Ring.js +44 -0
- package/dist/geometry/Ring.js.map +1 -0
- package/dist/geometry/RoundedBox.d.ts +22 -0
- package/dist/geometry/RoundedBox.d.ts.map +1 -0
- package/dist/geometry/RoundedBox.js +191 -0
- package/dist/geometry/RoundedBox.js.map +1 -0
- package/dist/geometry/Shape.d.ts +15 -0
- package/dist/geometry/Shape.d.ts.map +1 -0
- package/dist/geometry/Shape.js +44 -0
- package/dist/geometry/Shape.js.map +1 -0
- package/dist/geometry/Support.d.ts +137 -0
- package/dist/geometry/Support.d.ts.map +1 -0
- package/dist/geometry/Support.js +1066 -0
- package/dist/geometry/Support.js.map +1 -0
- package/dist/geometry/TorusKnot.d.ts +18 -0
- package/dist/geometry/TorusKnot.d.ts.map +1 -0
- package/dist/geometry/TorusKnot.js +83 -0
- package/dist/geometry/TorusKnot.js.map +1 -0
- package/dist/geometry/Tube.d.ts +19 -0
- package/dist/geometry/Tube.d.ts.map +1 -0
- package/dist/geometry/Tube.js +70 -0
- package/dist/geometry/Tube.js.map +1 -0
- package/dist/geometry/Wireframe.d.ts +19 -0
- package/dist/geometry/Wireframe.d.ts.map +1 -0
- package/dist/geometry/Wireframe.js +63 -0
- package/dist/geometry/Wireframe.js.map +1 -0
- package/dist/index.d.ts +38 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -3
- package/dist/index.js.map +1 -1
- package/dist/lanes/prd11.js +1 -1
- package/dist/lanes/prd11.js.map +1 -1
- package/dist/output/ToneMappingOperators.glsl.d.ts +1 -1
- package/dist/output/ToneMappingOperators.glsl.d.ts.map +1 -1
- package/dist/output/ToneMappingOperators.glsl.js +9 -1
- package/dist/output/ToneMappingOperators.glsl.js.map +1 -1
- package/dist/post/v2Entry.d.ts +1 -0
- package/dist/post/v2Entry.d.ts.map +1 -1
- package/dist/post/v2Entry.js.map +1 -1
- package/dist/post/v2Stages.d.ts +30 -1
- package/dist/post/v2Stages.d.ts.map +1 -1
- package/dist/post/v2Stages.js +87 -21
- package/dist/post/v2Stages.js.map +1 -1
- package/dist/program/ProgramCache.d.ts.map +1 -1
- package/dist/program/ProgramCache.js +12 -0
- package/dist/program/ProgramCache.js.map +1 -1
- package/dist/program/ProgramGenerator.d.ts.map +1 -1
- package/dist/program/ProgramGenerator.js +3 -0
- package/dist/program/ProgramGenerator.js.map +1 -1
- package/dist/reference/PostProcessPass.d.ts +1 -1
- package/dist/reference/PostProcessPass.d.ts.map +1 -1
- package/dist/reference/PostProcessPass.js +8 -1
- package/dist/reference/PostProcessPass.js.map +1 -1
- package/dist/renderer/CullingBatching.d.ts +44 -2
- package/dist/renderer/CullingBatching.d.ts.map +1 -1
- package/dist/renderer/CullingBatching.js +66 -11
- package/dist/renderer/CullingBatching.js.map +1 -1
- package/dist/shaders/chunks/lighting_mirrors.d.ts +2 -2
- package/dist/shaders/chunks/lighting_mirrors.d.ts.map +1 -1
- package/dist/shaders/chunks/lighting_mirrors.js.map +1 -1
- package/dist/shadows/DirectionalCascadeFitter.d.ts +8 -8
- package/dist/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
- package/dist/shadows/DirectionalCascadeFitter.js.map +1 -1
- package/dist/shadows/ShadowAtlas.d.ts +5 -5
- package/dist/shadows/ShadowAtlas.d.ts.map +1 -1
- package/dist/shadows/ShadowAtlas.js.map +1 -1
- package/dist/vfx/ProceduralVolumeEmitter.d.ts +11 -0
- package/dist/vfx/ProceduralVolumeEmitter.d.ts.map +1 -1
- package/dist/vfx/ProceduralVolumeEmitter.js +20 -6
- package/dist/vfx/ProceduralVolumeEmitter.js.map +1 -1
- package/dist/webgl2/ContextLifecycle.d.ts +36 -0
- package/dist/webgl2/ContextLifecycle.d.ts.map +1 -1
- package/dist/webgl2/ContextLifecycle.js +110 -2
- package/dist/webgl2/ContextLifecycle.js.map +1 -1
- package/dist/webgl2/LegacyPost.d.ts +16 -1
- package/dist/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/webgl2/LegacyPost.js +49 -16
- package/dist/webgl2/LegacyPost.js.map +1 -1
- package/dist/webgl2/MultiDraw.d.ts.map +1 -1
- package/dist/webgl2/MultiDraw.js +42 -2
- package/dist/webgl2/MultiDraw.js.map +1 -1
- package/dist/webgl2/TextureUpload.d.ts +7 -0
- package/dist/webgl2/TextureUpload.d.ts.map +1 -1
- package/dist/webgl2/TextureUpload.js +54 -10
- package/dist/webgl2/TextureUpload.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cone.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/geometry/Cone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,SAA+B,EAAE;IAClE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,MAAM,GAA+D,EAAE,CAAC;IAE9E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;IAC9B,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,aAAa,GAAG,GAAS,EAAE;QAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC;QAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;YAC7B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;YAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;gBAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,GAAG,UAAU,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;gBAC9E,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;gBACnE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;gBACrC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;gBACjC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtB,UAAU,IAAI,CAAC,CAAC;gBAClB,CAAC;gBACD,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,cAAc,GAAG,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtB,UAAU,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,UAAU,IAAI,UAAU,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,GAAY,EAAQ,EAAE;QACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC;QAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;QACvD,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,GAAG,UAAU,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,UAAU,GAAG,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;YAC5D,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,gBAAgB,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC;YAC7B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,UAAU,IAAI,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC;IAEF,aAAa,EAAE,CAAC;IAChB,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,YAAY,GAAG,CAAC;YAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAChE,CAAC;AAYD,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,SAA2B,EAAE;IAC1D,OAAO,kBAAkB,CAAC;QACxB,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* threejs-parity (§5.2, lane L2-07) — `ConvexGeometry` verbatim port.
|
|
3
|
+
*
|
|
4
|
+
* QuickHull over the input points (`@aura3d/math` `ConvexHull`, itself a port
|
|
5
|
+
* of three's), then each face's half-edge loop is walked and every head vertex
|
|
6
|
+
* emitted with the face normal — a non-indexed triangle list with flat
|
|
7
|
+
* normals, in three's exact vertex order.
|
|
8
|
+
*/
|
|
9
|
+
import type { ParityMesh } from "./Support.js";
|
|
10
|
+
export type ConvexPointInput = readonly [number, number, number] | {
|
|
11
|
+
readonly x: number;
|
|
12
|
+
readonly y: number;
|
|
13
|
+
readonly z: number;
|
|
14
|
+
};
|
|
15
|
+
export interface ConvexParityParams {
|
|
16
|
+
readonly points: readonly ConvexPointInput[];
|
|
17
|
+
}
|
|
18
|
+
export declare function convexParityMesh(params: ConvexParityParams): ParityMesh;
|
|
19
|
+
//# sourceMappingURL=Convex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Convex.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/geometry/Convex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElI,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC9C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAgBvE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* threejs-parity (§5.2, lane L2-07) — `ConvexGeometry` verbatim port.
|
|
3
|
+
*
|
|
4
|
+
* QuickHull over the input points (`@aura3d/math` `ConvexHull`, itself a port
|
|
5
|
+
* of three's), then each face's half-edge loop is walked and every head vertex
|
|
6
|
+
* emitted with the face normal — a non-indexed triangle list with flat
|
|
7
|
+
* normals, in three's exact vertex order.
|
|
8
|
+
*/
|
|
9
|
+
import { ConvexHull, Vector3 } from "@aura3d/math";
|
|
10
|
+
export function convexParityMesh(params) {
|
|
11
|
+
const points = params.points.map((p) => (Array.isArray(p) ? new Vector3(p[0], p[1], p[2]) : new Vector3(p.x, p.y, p.z)));
|
|
12
|
+
const hull = new ConvexHull().setFromPoints(points);
|
|
13
|
+
const positions = [];
|
|
14
|
+
const normals = [];
|
|
15
|
+
for (const face of hull.faces) {
|
|
16
|
+
const start = face.edge;
|
|
17
|
+
let edge = start;
|
|
18
|
+
do {
|
|
19
|
+
const point = edge.head().point;
|
|
20
|
+
positions.push(point.x, point.y, point.z);
|
|
21
|
+
normals.push(face.normal.x, face.normal.y, face.normal.z);
|
|
22
|
+
edge = edge.next;
|
|
23
|
+
} while (edge !== start);
|
|
24
|
+
}
|
|
25
|
+
return { positions, normals };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=Convex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Convex.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/geometry/Convex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AASnD,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAE,CAAmB,CAAC,CAAC,EAAG,CAAmB,CAAC,CAAC,EAAG,CAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClL,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAK,CAAC;QACzB,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,GAAG,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,GAAG,IAAI,CAAC,IAAK,CAAC;QACpB,CAAC,QAAQ,IAAI,KAAK,KAAK,EAAE;IAC3B,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* threejs-parity (§5.2, lane L2-06) — `EdgesGeometry` verbatim port.
|
|
3
|
+
*
|
|
4
|
+
* Every triangle's three edges are hashed on 4-decimal quantized vertex
|
|
5
|
+
* positions; when the reverse edge is later seen, the shared edge is emitted
|
|
6
|
+
* iff the two face normals' dot ≤ cos(thresholdAngle). Unmatched (boundary)
|
|
7
|
+
* edges are appended in insertion order. Output = line-segment vertex pairs.
|
|
8
|
+
*/
|
|
9
|
+
import type { ParityMesh } from "./Support.js";
|
|
10
|
+
export interface EdgesInput {
|
|
11
|
+
readonly positions: ArrayLike<number>;
|
|
12
|
+
readonly indices?: ArrayLike<number>;
|
|
13
|
+
}
|
|
14
|
+
export declare function edgesParityMesh(input: EdgesInput, thresholdAngle?: number): ParityMesh;
|
|
15
|
+
//# sourceMappingURL=Edges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Edges.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/geometry/Edges.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CACtC;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,SAAI,GAAG,UAAU,CAmGjF"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* threejs-parity (§5.2, lane L2-06) — `EdgesGeometry` verbatim port.
|
|
3
|
+
*
|
|
4
|
+
* Every triangle's three edges are hashed on 4-decimal quantized vertex
|
|
5
|
+
* positions; when the reverse edge is later seen, the shared edge is emitted
|
|
6
|
+
* iff the two face normals' dot ≤ cos(thresholdAngle). Unmatched (boundary)
|
|
7
|
+
* edges are appended in insertion order. Output = line-segment vertex pairs.
|
|
8
|
+
*/
|
|
9
|
+
const DEG2RAD = Math.PI / 180;
|
|
10
|
+
export function edgesParityMesh(input, thresholdAngle = 1) {
|
|
11
|
+
const precision = Math.pow(10, 4);
|
|
12
|
+
const thresholdDot = Math.cos(DEG2RAD * thresholdAngle);
|
|
13
|
+
const position = input.positions;
|
|
14
|
+
const indexAttr = input.indices;
|
|
15
|
+
const indexCount = indexAttr ? indexAttr.length : position.length / 3;
|
|
16
|
+
const hashes = ["", "", ""];
|
|
17
|
+
const edgeData = new Map();
|
|
18
|
+
const vertices = [];
|
|
19
|
+
const readVertex = (i) => [
|
|
20
|
+
position[i * 3],
|
|
21
|
+
position[i * 3 + 1],
|
|
22
|
+
position[i * 3 + 2]
|
|
23
|
+
];
|
|
24
|
+
const triangleNormal = (a, b, c) => {
|
|
25
|
+
// three's Triangle.getNormal: (c−b) × (a−b), normalized (or zero).
|
|
26
|
+
const cbx = c[0] - b[0];
|
|
27
|
+
const cby = c[1] - b[1];
|
|
28
|
+
const cbz = c[2] - b[2];
|
|
29
|
+
const abx = a[0] - b[0];
|
|
30
|
+
const aby = a[1] - b[1];
|
|
31
|
+
const abz = a[2] - b[2];
|
|
32
|
+
let nx = cby * abz - cbz * aby;
|
|
33
|
+
let ny = cbz * abx - cbx * abz;
|
|
34
|
+
let nz = cbx * aby - cby * abx;
|
|
35
|
+
const lenSq = nx * nx + ny * ny + nz * nz;
|
|
36
|
+
if (lenSq > 0) {
|
|
37
|
+
const s = 1 / Math.sqrt(lenSq);
|
|
38
|
+
nx *= s;
|
|
39
|
+
ny *= s;
|
|
40
|
+
nz *= s;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
nx = 0;
|
|
44
|
+
ny = 0;
|
|
45
|
+
nz = 0;
|
|
46
|
+
}
|
|
47
|
+
return [nx, ny, nz];
|
|
48
|
+
};
|
|
49
|
+
const hashOf = (v) => `${Math.round(v[0] * precision)},${Math.round(v[1] * precision)},${Math.round(v[2] * precision)}`;
|
|
50
|
+
for (let i = 0; i < indexCount; i += 3) {
|
|
51
|
+
const i0 = indexAttr ? indexAttr[i] : i;
|
|
52
|
+
const i1 = indexAttr ? indexAttr[i + 1] : i + 1;
|
|
53
|
+
const i2 = indexAttr ? indexAttr[i + 2] : i + 2;
|
|
54
|
+
const a = readVertex(i0);
|
|
55
|
+
const b = readVertex(i1);
|
|
56
|
+
const c = readVertex(i2);
|
|
57
|
+
const normal = triangleNormal(a, b, c);
|
|
58
|
+
const verts = [a, b, c];
|
|
59
|
+
hashes[0] = hashOf(a);
|
|
60
|
+
hashes[1] = hashOf(b);
|
|
61
|
+
hashes[2] = hashOf(c);
|
|
62
|
+
if (hashes[0] === hashes[1] || hashes[1] === hashes[2] || hashes[2] === hashes[0]) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
for (let j = 0; j < 3; j += 1) {
|
|
66
|
+
const jNext = (j + 1) % 3;
|
|
67
|
+
const vecHash0 = hashes[j];
|
|
68
|
+
const vecHash1 = hashes[jNext];
|
|
69
|
+
const v0 = verts[j];
|
|
70
|
+
const v1 = verts[jNext];
|
|
71
|
+
const indexJ = [i0, i1, i2][j];
|
|
72
|
+
const indexJNext = [i0, i1, i2][jNext];
|
|
73
|
+
const hash = `${vecHash0}_${vecHash1}`;
|
|
74
|
+
const reverseHash = `${vecHash1}_${vecHash0}`;
|
|
75
|
+
const sibling = edgeData.get(reverseHash);
|
|
76
|
+
if (edgeData.has(reverseHash) && sibling) {
|
|
77
|
+
if (normal[0] * sibling.normal[0] + normal[1] * sibling.normal[1] + normal[2] * sibling.normal[2] <= thresholdDot) {
|
|
78
|
+
vertices.push(v0[0], v0[1], v0[2]);
|
|
79
|
+
vertices.push(v1[0], v1[1], v1[2]);
|
|
80
|
+
}
|
|
81
|
+
edgeData.set(reverseHash, null);
|
|
82
|
+
}
|
|
83
|
+
else if (!edgeData.has(hash)) {
|
|
84
|
+
edgeData.set(hash, { index0: indexJ, index1: indexJNext, normal });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const entry of edgeData.values()) {
|
|
89
|
+
if (entry) {
|
|
90
|
+
const v0 = readVertex(entry.index0);
|
|
91
|
+
const v1 = readVertex(entry.index1);
|
|
92
|
+
vertices.push(v0[0], v0[1], v0[2]);
|
|
93
|
+
vertices.push(v1[0], v1[1], v1[2]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { positions: vertices };
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=Edges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Edges.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/geometry/Edges.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* threejs-parity (§5.2, lane L2-02) — `ExtrudeGeometry` verbatim port.
|
|
3
|
+
*
|
|
4
|
+
* Vertex layout (three's `placeholder` layers, emitted in order):
|
|
5
|
+
* [front bevel rings b=0..bevelSegments-1 at z = −bevelThickness·cos(t·π/2)]
|
|
6
|
+
* [base ring + `steps` layers at z = depth·s/steps (or extrudePath TNB)]
|
|
7
|
+
* [back bevel rings b=bevelSegments-1..0 at z = depth + bevelThickness·cos]
|
|
8
|
+
*
|
|
9
|
+
* Faces expand to a non-indexed mesh: bottom/top lids from
|
|
10
|
+
* `triangulateShape` (on the bevelOffset-contracted rings when bevelled),
|
|
11
|
+
* sidewall quads over all `steps + 2·bevelSegments` layer seams per
|
|
12
|
+
* contour/hole edge — plus three's `WorldUVGenerator` UVs and flat
|
|
13
|
+
* per-face normals (`computeVertexNormals` on the expanded buffer).
|
|
14
|
+
*/
|
|
15
|
+
import type { ParityMesh } from "./Support.js";
|
|
16
|
+
export interface ExtrudeParityParams {
|
|
17
|
+
readonly shape: unknown;
|
|
18
|
+
readonly curveSegments?: number;
|
|
19
|
+
readonly steps?: number;
|
|
20
|
+
readonly depth?: number;
|
|
21
|
+
readonly bevelEnabled?: boolean;
|
|
22
|
+
readonly bevelThickness?: number;
|
|
23
|
+
readonly bevelSize?: number;
|
|
24
|
+
readonly bevelOffset?: number;
|
|
25
|
+
readonly bevelSegments?: number;
|
|
26
|
+
readonly extrudePath?: unknown;
|
|
27
|
+
}
|
|
28
|
+
export declare function extrudeParityMesh(params: ExtrudeParityParams): ParityMesh;
|
|
29
|
+
//# sourceMappingURL=Extrude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Extrude.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/geometry/Extrude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AA0ID,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,UAAU,CAiRzE"}
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* threejs-parity (§5.2, lane L2-02) — `ExtrudeGeometry` verbatim port.
|
|
3
|
+
*
|
|
4
|
+
* Vertex layout (three's `placeholder` layers, emitted in order):
|
|
5
|
+
* [front bevel rings b=0..bevelSegments-1 at z = −bevelThickness·cos(t·π/2)]
|
|
6
|
+
* [base ring + `steps` layers at z = depth·s/steps (or extrudePath TNB)]
|
|
7
|
+
* [back bevel rings b=bevelSegments-1..0 at z = depth + bevelThickness·cos]
|
|
8
|
+
*
|
|
9
|
+
* Faces expand to a non-indexed mesh: bottom/top lids from
|
|
10
|
+
* `triangulateShape` (on the bevelOffset-contracted rings when bevelled),
|
|
11
|
+
* sidewall quads over all `steps + 2·bevelSegments` layer seams per
|
|
12
|
+
* contour/hole edge — plus three's `WorldUVGenerator` UVs and flat
|
|
13
|
+
* per-face normals (`computeVertexNormals` on the expanded buffer).
|
|
14
|
+
*/
|
|
15
|
+
import { computeVertexNormals, isClockWise, resolveCurve3, resolveShape2D, triangulateShape } from "./Support.js";
|
|
16
|
+
function mergeOverlappingPoints(points) {
|
|
17
|
+
const THRESHOLD = 1e-10;
|
|
18
|
+
const THRESHOLD_SQ = THRESHOLD * THRESHOLD;
|
|
19
|
+
let prevPos = points[0];
|
|
20
|
+
for (let i = 1; i <= points.length; i += 1) {
|
|
21
|
+
const currentIndex = i % points.length;
|
|
22
|
+
const currentPos = points[currentIndex];
|
|
23
|
+
const dx = currentPos.x - prevPos.x;
|
|
24
|
+
const dy = currentPos.y - prevPos.y;
|
|
25
|
+
const distSq = dx * dx + dy * dy;
|
|
26
|
+
const scalingFactorSqrt = Math.max(Math.abs(currentPos.x), Math.abs(currentPos.y), Math.abs(prevPos.x), Math.abs(prevPos.y));
|
|
27
|
+
const thresholdSqScaled = THRESHOLD_SQ * scalingFactorSqrt * scalingFactorSqrt;
|
|
28
|
+
if (distSq <= thresholdSqScaled) {
|
|
29
|
+
points.splice(currentIndex, 1);
|
|
30
|
+
i -= 1;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
prevPos = currentPos;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function getBevelVec(inPt, inPrev, inNext) {
|
|
37
|
+
// Computes for inPt the corresponding point inPt' on a new contour shifted
|
|
38
|
+
// by 1 unit to the left (the intersection of the two lines parallel to the
|
|
39
|
+
// adjacent edges), verbatim from three.
|
|
40
|
+
let shrinkBy;
|
|
41
|
+
const vPrevX = inPt.x - inPrev.x;
|
|
42
|
+
const vPrevY = inPt.y - inPrev.y;
|
|
43
|
+
const vNextX = inNext.x - inPt.x;
|
|
44
|
+
const vNextY = inNext.y - inPt.y;
|
|
45
|
+
const vPrevLensq = vPrevX * vPrevX + vPrevY * vPrevY;
|
|
46
|
+
const collinear0 = vPrevX * vNextY - vPrevY * vNextX;
|
|
47
|
+
let vTransX;
|
|
48
|
+
let vTransY;
|
|
49
|
+
if (Math.abs(collinear0) > Number.EPSILON) {
|
|
50
|
+
const vPrevLen = Math.sqrt(vPrevLensq);
|
|
51
|
+
const vNextLen = Math.sqrt(vNextX * vNextX + vNextY * vNextY);
|
|
52
|
+
const ptPrevShiftX = inPrev.x - vPrevY / vPrevLen;
|
|
53
|
+
const ptPrevShiftY = inPrev.y + vPrevX / vPrevLen;
|
|
54
|
+
const ptNextShiftX = inNext.x - vNextY / vNextLen;
|
|
55
|
+
const ptNextShiftY = inNext.y + vNextX / vNextLen;
|
|
56
|
+
const sf = ((ptNextShiftX - ptPrevShiftX) * vNextY
|
|
57
|
+
- (ptNextShiftY - ptPrevShiftY) * vNextX)
|
|
58
|
+
/ (vPrevX * vNextY - vPrevY * vNextX);
|
|
59
|
+
vTransX = ptPrevShiftX + vPrevX * sf - inPt.x;
|
|
60
|
+
vTransY = ptPrevShiftY + vPrevY * sf - inPt.y;
|
|
61
|
+
const vTransLensq = vTransX * vTransX + vTransY * vTransY;
|
|
62
|
+
if (vTransLensq <= 2) {
|
|
63
|
+
return { x: vTransX, y: vTransY };
|
|
64
|
+
}
|
|
65
|
+
shrinkBy = Math.sqrt(vTransLensq / 2);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
let directionEq = false;
|
|
69
|
+
if (vPrevX > Number.EPSILON) {
|
|
70
|
+
if (vNextX > Number.EPSILON) {
|
|
71
|
+
directionEq = true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (vPrevX < -Number.EPSILON) {
|
|
76
|
+
if (vNextX < -Number.EPSILON) {
|
|
77
|
+
directionEq = true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
if (Math.sign(vPrevY) === Math.sign(vNextY)) {
|
|
82
|
+
directionEq = true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (directionEq) {
|
|
87
|
+
vTransX = -vPrevY;
|
|
88
|
+
vTransY = vPrevX;
|
|
89
|
+
shrinkBy = Math.sqrt(vPrevLensq);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
vTransX = vPrevX;
|
|
93
|
+
vTransY = vPrevY;
|
|
94
|
+
shrinkBy = Math.sqrt(vPrevLensq / 2);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { x: vTransX / shrinkBy, y: vTransY / shrinkBy };
|
|
98
|
+
}
|
|
99
|
+
function scalePt2(pt, vec, size) {
|
|
100
|
+
return { x: pt.x + vec.x * size, y: pt.y + vec.y * size };
|
|
101
|
+
}
|
|
102
|
+
const WorldUVGenerator = {
|
|
103
|
+
generateTopUV(vertices, indexA, indexB, indexC) {
|
|
104
|
+
const ax = vertices[indexA * 3];
|
|
105
|
+
const ay = vertices[indexA * 3 + 1];
|
|
106
|
+
const bx = vertices[indexB * 3];
|
|
107
|
+
const by = vertices[indexB * 3 + 1];
|
|
108
|
+
const cx = vertices[indexC * 3];
|
|
109
|
+
const cy = vertices[indexC * 3 + 1];
|
|
110
|
+
return [{ x: ax, y: ay }, { x: bx, y: by }, { x: cx, y: cy }];
|
|
111
|
+
},
|
|
112
|
+
generateSideWallUV(vertices, indexA, indexB, indexC, indexD) {
|
|
113
|
+
const ax = vertices[indexA * 3];
|
|
114
|
+
const ay = vertices[indexA * 3 + 1];
|
|
115
|
+
const az = vertices[indexA * 3 + 2];
|
|
116
|
+
const bx = vertices[indexB * 3];
|
|
117
|
+
const by = vertices[indexB * 3 + 1];
|
|
118
|
+
const bz = vertices[indexB * 3 + 2];
|
|
119
|
+
const cx = vertices[indexC * 3];
|
|
120
|
+
const cy = vertices[indexC * 3 + 1];
|
|
121
|
+
const cz = vertices[indexC * 3 + 2];
|
|
122
|
+
const dx = vertices[indexD * 3];
|
|
123
|
+
const dy = vertices[indexD * 3 + 1];
|
|
124
|
+
const dz = vertices[indexD * 3 + 2];
|
|
125
|
+
if (Math.abs(ay - by) < Math.abs(ax - bx)) {
|
|
126
|
+
return [
|
|
127
|
+
{ x: ax, y: 1 - az },
|
|
128
|
+
{ x: bx, y: 1 - bz },
|
|
129
|
+
{ x: cx, y: 1 - cz },
|
|
130
|
+
{ x: dx, y: 1 - dz }
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
return [
|
|
134
|
+
{ x: ay, y: 1 - az },
|
|
135
|
+
{ x: by, y: 1 - bz },
|
|
136
|
+
{ x: cy, y: 1 - cz },
|
|
137
|
+
{ x: dy, y: 1 - dz }
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
export function extrudeParityMesh(params) {
|
|
142
|
+
const curveSegments = params.curveSegments ?? 12;
|
|
143
|
+
const steps = params.steps ?? 1;
|
|
144
|
+
const depth = params.depth ?? 1;
|
|
145
|
+
let bevelEnabled = params.bevelEnabled ?? true;
|
|
146
|
+
let bevelThickness = params.bevelThickness ?? 0.2;
|
|
147
|
+
let bevelSize = params.bevelSize ?? bevelThickness - 0.1;
|
|
148
|
+
let bevelOffset = params.bevelOffset ?? 0;
|
|
149
|
+
let bevelSegments = params.bevelSegments ?? 3;
|
|
150
|
+
const extrudePath = params.extrudePath;
|
|
151
|
+
const verticesArray = [];
|
|
152
|
+
const uvArray = [];
|
|
153
|
+
const groups = [];
|
|
154
|
+
let extrudePts;
|
|
155
|
+
let extrudeByPath = false;
|
|
156
|
+
let splineTube;
|
|
157
|
+
let pathCurve;
|
|
158
|
+
if (extrudePath !== undefined && extrudePath !== null) {
|
|
159
|
+
pathCurve = resolveCurve3(extrudePath);
|
|
160
|
+
extrudePts = pathCurve.getSpacedPoints(steps);
|
|
161
|
+
extrudeByPath = true;
|
|
162
|
+
bevelEnabled = false; // bevels not supported for path extrusion
|
|
163
|
+
const isClosed = pathCurve.isCatmullRomCurve3 === true
|
|
164
|
+
? pathCurve.closed === true
|
|
165
|
+
: false;
|
|
166
|
+
splineTube = pathCurve.computeFrenetFrames(steps, isClosed);
|
|
167
|
+
}
|
|
168
|
+
if (!bevelEnabled) {
|
|
169
|
+
bevelSegments = 0;
|
|
170
|
+
bevelThickness = 0;
|
|
171
|
+
bevelSize = 0;
|
|
172
|
+
bevelOffset = 0;
|
|
173
|
+
}
|
|
174
|
+
const resolved = resolveShape2D(params.shape, curveSegments);
|
|
175
|
+
let contour = resolved.shape.map((p) => ({ x: p.x, y: p.y }));
|
|
176
|
+
const holes = resolved.holes.map((hole) => hole.map((p) => ({ x: p.x, y: p.y })));
|
|
177
|
+
const reverse = !isClockWise(contour);
|
|
178
|
+
if (reverse) {
|
|
179
|
+
contour.reverse();
|
|
180
|
+
for (let h = 0, hl = holes.length; h < hl; h += 1) {
|
|
181
|
+
if (isClockWise(holes[h])) {
|
|
182
|
+
holes[h] = holes[h].reverse();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
mergeOverlappingPoints(contour);
|
|
187
|
+
holes.forEach(mergeOverlappingPoints);
|
|
188
|
+
const numHoles = holes.length;
|
|
189
|
+
let vertices = contour;
|
|
190
|
+
for (let h = 0; h < numHoles; h += 1) {
|
|
191
|
+
vertices = vertices.concat(holes[h]);
|
|
192
|
+
}
|
|
193
|
+
const vlen = vertices.length;
|
|
194
|
+
const contourMovements = [];
|
|
195
|
+
for (let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i += 1, j += 1, k += 1) {
|
|
196
|
+
if (j === il)
|
|
197
|
+
j = 0;
|
|
198
|
+
if (k === il)
|
|
199
|
+
k = 0;
|
|
200
|
+
contourMovements[i] = getBevelVec(contour[i], contour[j], contour[k]);
|
|
201
|
+
}
|
|
202
|
+
const holesMovements = [];
|
|
203
|
+
let verticesMovements = [...contourMovements];
|
|
204
|
+
for (let h = 0, hl = numHoles; h < hl; h += 1) {
|
|
205
|
+
const ahole = holes[h];
|
|
206
|
+
const oneHoleMovements = [];
|
|
207
|
+
for (let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i += 1, j += 1, k += 1) {
|
|
208
|
+
if (j === il)
|
|
209
|
+
j = 0;
|
|
210
|
+
if (k === il)
|
|
211
|
+
k = 0;
|
|
212
|
+
oneHoleMovements[i] = getBevelVec(ahole[i], ahole[j], ahole[k]);
|
|
213
|
+
}
|
|
214
|
+
holesMovements.push(oneHoleMovements);
|
|
215
|
+
verticesMovements = verticesMovements.concat(oneHoleMovements);
|
|
216
|
+
}
|
|
217
|
+
const placeholder = [];
|
|
218
|
+
const v = (x, y, z) => {
|
|
219
|
+
placeholder.push(x, y, z);
|
|
220
|
+
};
|
|
221
|
+
let faces;
|
|
222
|
+
if (bevelSegments === 0) {
|
|
223
|
+
faces = triangulateShape(contour, holes);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
const contractedContourVertices = [];
|
|
227
|
+
const expandedHoleVertices = [];
|
|
228
|
+
for (let b = 0; b < bevelSegments; b += 1) {
|
|
229
|
+
const t = b / bevelSegments;
|
|
230
|
+
const z = bevelThickness * Math.cos((t * Math.PI) / 2);
|
|
231
|
+
const bs = bevelSize * Math.sin((t * Math.PI) / 2) + bevelOffset;
|
|
232
|
+
for (let i = 0, il = contour.length; i < il; i += 1) {
|
|
233
|
+
const vert = scalePt2(contour[i], contourMovements[i], bs);
|
|
234
|
+
v(vert.x, vert.y, -z);
|
|
235
|
+
if (t === 0)
|
|
236
|
+
contractedContourVertices.push(vert);
|
|
237
|
+
}
|
|
238
|
+
for (let h = 0, hl = numHoles; h < hl; h += 1) {
|
|
239
|
+
const ahole = holes[h];
|
|
240
|
+
const oneHoleMovements = holesMovements[h];
|
|
241
|
+
const oneHoleVertices = [];
|
|
242
|
+
for (let i = 0, il = ahole.length; i < il; i += 1) {
|
|
243
|
+
const vert = scalePt2(ahole[i], oneHoleMovements[i], bs);
|
|
244
|
+
v(vert.x, vert.y, -z);
|
|
245
|
+
if (t === 0)
|
|
246
|
+
oneHoleVertices.push(vert);
|
|
247
|
+
}
|
|
248
|
+
if (t === 0)
|
|
249
|
+
expandedHoleVertices.push(oneHoleVertices);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
faces = triangulateShape(contractedContourVertices, expandedHoleVertices);
|
|
253
|
+
}
|
|
254
|
+
const flen = faces.length;
|
|
255
|
+
const bs = bevelSize + bevelOffset;
|
|
256
|
+
// Back facing vertices (layer 0 of the body).
|
|
257
|
+
for (let i = 0; i < vlen; i += 1) {
|
|
258
|
+
const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i];
|
|
259
|
+
if (!extrudeByPath) {
|
|
260
|
+
v(vert.x, vert.y, 0);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
const n = splineTube.normals[0];
|
|
264
|
+
const b = splineTube.binormals[0];
|
|
265
|
+
const p = extrudePts[0];
|
|
266
|
+
v(p.x + n.x * vert.x + b.x * vert.y, p.y + n.y * vert.x + b.y * vert.y, p.z + n.z * vert.x + b.z * vert.y);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Stepped vertices (including the front-facing ring at s = steps).
|
|
270
|
+
for (let s = 1; s <= steps; s += 1) {
|
|
271
|
+
for (let i = 0; i < vlen; i += 1) {
|
|
272
|
+
const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i];
|
|
273
|
+
if (!extrudeByPath) {
|
|
274
|
+
v(vert.x, vert.y, (depth / steps) * s);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
const n = splineTube.normals[s];
|
|
278
|
+
const b = splineTube.binormals[s];
|
|
279
|
+
const p = extrudePts[s];
|
|
280
|
+
v(p.x + n.x * vert.x + b.x * vert.y, p.y + n.y * vert.x + b.y * vert.y, p.z + n.z * vert.x + b.z * vert.y);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Back bevel rings.
|
|
285
|
+
for (let b = bevelSegments - 1; b >= 0; b -= 1) {
|
|
286
|
+
const t = b / bevelSegments;
|
|
287
|
+
const z = bevelThickness * Math.cos((t * Math.PI) / 2);
|
|
288
|
+
const bs2 = bevelSize * Math.sin((t * Math.PI) / 2) + bevelOffset;
|
|
289
|
+
for (let i = 0, il = contour.length; i < il; i += 1) {
|
|
290
|
+
const vert = scalePt2(contour[i], contourMovements[i], bs2);
|
|
291
|
+
v(vert.x, vert.y, depth + z);
|
|
292
|
+
}
|
|
293
|
+
for (let h = 0, hl = holes.length; h < hl; h += 1) {
|
|
294
|
+
const ahole = holes[h];
|
|
295
|
+
const oneHoleMovements = holesMovements[h];
|
|
296
|
+
for (let i = 0, il = ahole.length; i < il; i += 1) {
|
|
297
|
+
const vert = scalePt2(ahole[i], oneHoleMovements[i], bs2);
|
|
298
|
+
if (!extrudeByPath) {
|
|
299
|
+
v(vert.x, vert.y, depth + z);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
v(vert.x, vert.y + extrudePts[steps - 1].y, extrudePts[steps - 1].x + z);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
const addVertex = (index) => {
|
|
308
|
+
verticesArray.push(placeholder[index * 3]);
|
|
309
|
+
verticesArray.push(placeholder[index * 3 + 1]);
|
|
310
|
+
verticesArray.push(placeholder[index * 3 + 2]);
|
|
311
|
+
};
|
|
312
|
+
const addUV = (vector2) => {
|
|
313
|
+
uvArray.push(vector2.x, vector2.y);
|
|
314
|
+
};
|
|
315
|
+
const f3 = (a, b, c) => {
|
|
316
|
+
addVertex(a);
|
|
317
|
+
addVertex(b);
|
|
318
|
+
addVertex(c);
|
|
319
|
+
const nextIndex = verticesArray.length / 3;
|
|
320
|
+
const uvs = WorldUVGenerator.generateTopUV(verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1);
|
|
321
|
+
addUV(uvs[0]);
|
|
322
|
+
addUV(uvs[1]);
|
|
323
|
+
addUV(uvs[2]);
|
|
324
|
+
};
|
|
325
|
+
const f4 = (a, b, c, d) => {
|
|
326
|
+
addVertex(a);
|
|
327
|
+
addVertex(b);
|
|
328
|
+
addVertex(d);
|
|
329
|
+
addVertex(b);
|
|
330
|
+
addVertex(c);
|
|
331
|
+
addVertex(d);
|
|
332
|
+
const nextIndex = verticesArray.length / 3;
|
|
333
|
+
const uvs = WorldUVGenerator.generateSideWallUV(verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1);
|
|
334
|
+
addUV(uvs[0]);
|
|
335
|
+
addUV(uvs[1]);
|
|
336
|
+
addUV(uvs[3]);
|
|
337
|
+
addUV(uvs[1]);
|
|
338
|
+
addUV(uvs[2]);
|
|
339
|
+
addUV(uvs[3]);
|
|
340
|
+
};
|
|
341
|
+
const buildLidFaces = () => {
|
|
342
|
+
const start = verticesArray.length / 3;
|
|
343
|
+
if (bevelEnabled) {
|
|
344
|
+
let layer = 0;
|
|
345
|
+
let offset = vlen * layer;
|
|
346
|
+
for (let i = 0; i < flen; i += 1) {
|
|
347
|
+
const face = faces[i];
|
|
348
|
+
f3(face[2] + offset, face[1] + offset, face[0] + offset);
|
|
349
|
+
}
|
|
350
|
+
layer = steps + bevelSegments * 2;
|
|
351
|
+
offset = vlen * layer;
|
|
352
|
+
for (let i = 0; i < flen; i += 1) {
|
|
353
|
+
const face = faces[i];
|
|
354
|
+
f3(face[0] + offset, face[1] + offset, face[2] + offset);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
for (let i = 0; i < flen; i += 1) {
|
|
359
|
+
const face = faces[i];
|
|
360
|
+
f3(face[2], face[1], face[0]);
|
|
361
|
+
}
|
|
362
|
+
for (let i = 0; i < flen; i += 1) {
|
|
363
|
+
const face = faces[i];
|
|
364
|
+
f3(face[0] + vlen * steps, face[1] + vlen * steps, face[2] + vlen * steps);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
groups.push({ start, count: verticesArray.length / 3 - start, materialIndex: 0 });
|
|
368
|
+
};
|
|
369
|
+
const sidewalls = (contourPts, layeroffset) => {
|
|
370
|
+
let i = contourPts.length;
|
|
371
|
+
while ((i -= 1) >= 0) {
|
|
372
|
+
const j = i;
|
|
373
|
+
let k = i - 1;
|
|
374
|
+
if (k < 0)
|
|
375
|
+
k = contourPts.length - 1;
|
|
376
|
+
for (let s = 0, sl = steps + bevelSegments * 2; s < sl; s += 1) {
|
|
377
|
+
const slen1 = vlen * s;
|
|
378
|
+
const slen2 = vlen * (s + 1);
|
|
379
|
+
const a = layeroffset + j + slen1;
|
|
380
|
+
const b = layeroffset + k + slen1;
|
|
381
|
+
const c = layeroffset + k + slen2;
|
|
382
|
+
const d = layeroffset + j + slen2;
|
|
383
|
+
f4(a, b, c, d);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
const buildSideFaces = () => {
|
|
388
|
+
const start = verticesArray.length / 3;
|
|
389
|
+
let layeroffset = 0;
|
|
390
|
+
sidewalls(contour, layeroffset);
|
|
391
|
+
layeroffset += contour.length;
|
|
392
|
+
for (let h = 0, hl = holes.length; h < hl; h += 1) {
|
|
393
|
+
sidewalls(holes[h], layeroffset);
|
|
394
|
+
layeroffset += holes[h].length;
|
|
395
|
+
}
|
|
396
|
+
groups.push({ start, count: verticesArray.length / 3 - start, materialIndex: 1 });
|
|
397
|
+
};
|
|
398
|
+
buildLidFaces();
|
|
399
|
+
buildSideFaces();
|
|
400
|
+
const normals = computeVertexNormals(verticesArray);
|
|
401
|
+
return { positions: verticesArray, normals, uvs: uvArray, groups };
|
|
402
|
+
}
|
|
403
|
+
//# sourceMappingURL=Extrude.js.map
|