super-three 0.184.0 → 0.185.0
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/build/three.cjs +1260 -927
- package/build/three.core.js +1104 -829
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +156 -98
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +11 -4
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +7538 -3367
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +7538 -3366
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +3 -0
- package/examples/jsm/controls/ArcballControls.js +6 -2
- package/examples/jsm/controls/FirstPersonControls.js +79 -42
- package/examples/jsm/controls/TransformControls.js +68 -15
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +4 -1
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/GLTFExporter.js +114 -12
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +347 -112
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/ViewHelper.js +16 -6
- package/examples/jsm/inspector/Inspector.js +53 -15
- package/examples/jsm/inspector/RendererInspector.js +152 -36
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +1 -1
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -1
- package/examples/jsm/inspector/tabs/Console.js +200 -18
- package/examples/jsm/inspector/tabs/Memory.js +8 -0
- package/examples/jsm/inspector/tabs/Parameters.js +64 -4
- package/examples/jsm/inspector/tabs/Performance.js +21 -6
- package/examples/jsm/inspector/tabs/Settings.js +51 -9
- package/examples/jsm/inspector/tabs/Timeline.js +178 -93
- package/examples/jsm/inspector/tabs/Viewer.js +628 -16
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +90 -45
- package/examples/jsm/inspector/ui/Style.js +1788 -1401
- package/examples/jsm/inspector/ui/Tab.js +5 -3
- package/examples/jsm/inspector/ui/Values.js +71 -6
- package/examples/jsm/inspector/ui/utils.js +130 -10
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/LightProbeGrid.js +106 -76
- package/examples/jsm/lines/LineMaterial.js +38 -15
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +46 -13
- package/examples/jsm/loaders/EXRLoader.js +27 -55
- package/examples/jsm/loaders/HDRLoader.js +6 -28
- package/examples/jsm/loaders/KTX2Loader.js +31 -12
- package/examples/jsm/loaders/LDrawLoader.js +8 -8
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +4 -0
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +3 -3
- package/examples/jsm/loaders/PCDLoader.js +7 -7
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +547 -495
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +33 -9
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +93 -20
- package/examples/jsm/loaders/usd/USDCParser.js +1 -1
- package/examples/jsm/loaders/usd/USDComposer.js +52 -19
- package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/Reflector.js +2 -3
- package/examples/jsm/objects/Water2Mesh.js +1 -1
- package/examples/jsm/physics/AmmoPhysics.js +15 -8
- package/examples/jsm/physics/RapierPhysics.js +27 -2
- package/examples/jsm/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/GLSLDecoder.js +6 -6
- package/examples/jsm/transpiler/Linker.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +59 -19
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +2 -2
- package/examples/jsm/tsl/display/FXAANode.js +11 -12
- package/examples/jsm/tsl/display/GTAONode.js +34 -13
- package/examples/jsm/tsl/display/GodraysNode.js +1 -1
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +13 -25
- package/examples/jsm/tsl/display/SSGINode.js +89 -39
- package/examples/jsm/tsl/display/SSRNode.js +829 -132
- package/examples/jsm/tsl/display/SSSNode.js +2 -2
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +1 -1
- package/examples/jsm/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +126 -59
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.js +1 -1
- package/examples/jsm/webxr/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/package.json +7 -7
- package/src/Three.TSL.js +10 -3
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationAction.js +15 -11
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/KeyframeTrack.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/Camera.js +2 -2
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +1 -1
- package/src/core/BufferGeometry.js +29 -7
- package/src/core/Object3D.js +17 -7
- package/src/core/Raycaster.js +1 -1
- package/src/core/RenderTarget.js +15 -2
- package/src/extras/PMREMGenerator.js +6 -4
- package/src/extras/TextureUtils.js +1 -1
- package/src/extras/core/ShapePath.js +149 -160
- package/src/geometries/SphereGeometry.js +8 -3
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +1 -1
- package/src/loaders/DataTextureLoader.js +69 -38
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +36 -266
- package/src/loaders/ObjectLoader.js +3 -1
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +196 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +40 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +40 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +34 -1
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +86 -0
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +378 -322
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +0 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +0 -11
- package/src/materials/nodes/NodeMaterial.js +115 -71
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +49 -20
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/MathUtils.js +2 -2
- package/src/math/Matrix3.js +11 -0
- package/src/math/Matrix4.js +28 -3
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +2 -2
- package/src/math/interpolants/BezierInterpolant.js +4 -6
- package/src/nodes/Nodes.js +2 -5
- package/src/nodes/TSL.js +8 -6
- package/src/nodes/accessors/Arrays.js +4 -4
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +2 -2
- package/src/nodes/accessors/BufferAttributeNode.js +13 -2
- package/src/nodes/accessors/Camera.js +7 -7
- package/src/nodes/accessors/ClippingNode.js +1 -1
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +18 -2
- package/src/nodes/accessors/MaterialProperties.js +4 -3
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +13 -13
- package/src/nodes/accessors/Position.js +5 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -0
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneProperties.js +1 -1
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +2 -2
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +39 -7
- package/src/nodes/accessors/Tangent.js +4 -4
- package/src/nodes/accessors/TextureNode.js +60 -5
- package/src/nodes/code/FunctionNode.js +2 -16
- package/src/nodes/core/MRTNode.js +7 -2
- package/src/nodes/core/Node.js +39 -2
- package/src/nodes/core/NodeBuilder.js +201 -41
- package/src/nodes/core/NodeUtils.js +13 -13
- package/src/nodes/core/OutputStructNode.js +1 -1
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/PropertyNode.js +51 -5
- package/src/nodes/core/StackNode.js +56 -34
- package/src/nodes/core/StructNode.js +4 -6
- package/src/nodes/core/StructTypeNode.js +6 -6
- package/src/nodes/core/VarNode.js +8 -0
- package/src/nodes/core/VaryingNode.js +12 -2
- package/src/nodes/display/BlendModes.js +1 -41
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +10 -9
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +2 -2
- package/src/nodes/display/PassNode.js +35 -43
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +12 -3
- package/src/nodes/functions/VolumetricLightingModel.js +40 -7
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +1 -1
- package/src/nodes/lighting/EnvironmentNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +90 -37
- package/src/nodes/lighting/PointShadowNode.js +6 -1
- package/src/nodes/lighting/ShadowFilterNode.js +21 -52
- package/src/nodes/lighting/ShadowNode.js +34 -14
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +39 -11
- package/src/nodes/math/OperatorNode.js +23 -23
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +33 -2
- package/src/nodes/tsl/TSLCore.js +63 -18
- package/src/nodes/utils/EquirectUV.js +30 -5
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/Packing.js +35 -4
- package/src/nodes/utils/RTTNode.js +40 -24
- package/src/nodes/utils/ReflectorNode.js +1 -0
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/objects/BatchedMesh.js +22 -14
- package/src/objects/InstancedMesh.js +0 -11
- package/src/objects/Skeleton.js +0 -9
- package/src/renderers/WebGLRenderer.js +19 -15
- package/src/renderers/common/Backend.js +49 -5
- package/src/renderers/common/Bindings.js +114 -45
- package/src/renderers/common/Buffer.js +9 -0
- package/src/renderers/common/ClippingContext.js +10 -2
- package/src/renderers/common/Info.js +63 -22
- package/src/renderers/common/Lighting.js +53 -5
- package/src/renderers/common/RenderList.js +41 -4
- package/src/renderers/common/RenderObject.js +73 -13
- package/src/renderers/common/Renderer.js +281 -108
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/Textures.js +32 -5
- package/src/renderers/common/TimestampQueryPool.js +1 -1
- package/src/renderers/common/UniformsGroup.js +31 -9
- package/src/renderers/common/XRManager.js +340 -22
- package/src/renderers/common/extras/PMREMGenerator.js +15 -38
- package/src/renderers/common/nodes/NodeBuilderState.js +9 -1
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/NodeManager.js +63 -14
- package/src/renderers/common/nodes/NodeUniformBuffer.js +13 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/distance.glsl.js +1 -1
- package/src/renderers/webgl/WebGLOutput.js +2 -1
- package/src/renderers/webgl/WebGLProgram.js +5 -4
- package/src/renderers/webgl/WebGLPrograms.js +12 -5
- package/src/renderers/webgl/WebGLRenderLists.js +9 -1
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLTextures.js +20 -7
- package/src/renderers/webgl/WebGLUniformsGroups.js +66 -38
- package/src/renderers/webgl-fallback/WebGLBackend.js +84 -25
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +138 -8
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +4 -2
- package/src/renderers/webgpu/WebGPUBackend.js +480 -169
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +164 -7
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +98 -38
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +72 -68
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +164 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +158 -95
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +297 -141
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +33 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +38 -3
- package/src/textures/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- package/examples/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/inspector/extensions/extensions.json +0 -6
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- package/examples/jsm/tsl/display/AnamorphicNode.js +0 -293
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -349
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SkinningNode.js +0 -328
|
@@ -63,17 +63,30 @@ class PLYExporter {
|
|
|
63
63
|
const defaultOptions = {
|
|
64
64
|
binary: false,
|
|
65
65
|
excludeAttributes: [], // normal, uv, color, index
|
|
66
|
-
littleEndian: false
|
|
66
|
+
littleEndian: false,
|
|
67
|
+
customPropertyMapping: {}
|
|
67
68
|
};
|
|
68
69
|
|
|
69
70
|
options = Object.assign( defaultOptions, options );
|
|
70
71
|
|
|
71
72
|
const excludeAttributes = options.excludeAttributes;
|
|
73
|
+
const customPropertyMapping = options.customPropertyMapping;
|
|
74
|
+
const customAttributeNames = Object.keys( customPropertyMapping );
|
|
72
75
|
let includeIndices = true;
|
|
73
76
|
let includeNormals = false;
|
|
74
77
|
let includeColors = false;
|
|
75
78
|
let includeUVs = false;
|
|
76
79
|
|
|
80
|
+
// derive types from the attribtue's typed array (the exporter assumes
|
|
81
|
+
// all attributes of the same group e.g. "position" share the same data type)
|
|
82
|
+
let positionType = 'float';
|
|
83
|
+
let normalType = 'float';
|
|
84
|
+
let uvType = 'float';
|
|
85
|
+
let colorType = 'uchar';
|
|
86
|
+
|
|
87
|
+
const customTypes = {};
|
|
88
|
+
for ( const name of customAttributeNames ) customTypes[ name ] = 'float';
|
|
89
|
+
|
|
77
90
|
// count the vertices, check which properties are used,
|
|
78
91
|
// and cache the BufferGeometry
|
|
79
92
|
let vertexCount = 0;
|
|
@@ -101,11 +114,35 @@ class PLYExporter {
|
|
|
101
114
|
vertexCount += vertices.count;
|
|
102
115
|
faceCount += indices ? indices.count / 3 : vertices.count / 3;
|
|
103
116
|
|
|
104
|
-
|
|
117
|
+
positionType = getPlyType( vertices.array );
|
|
118
|
+
|
|
119
|
+
if ( normals !== undefined ) {
|
|
120
|
+
|
|
121
|
+
includeNormals = true;
|
|
122
|
+
normalType = getPlyType( normals.array );
|
|
123
|
+
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if ( uvs !== undefined ) {
|
|
127
|
+
|
|
128
|
+
includeUVs = true;
|
|
129
|
+
uvType = getPlyType( uvs.array );
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if ( colors !== undefined ) {
|
|
134
|
+
|
|
135
|
+
includeColors = true;
|
|
136
|
+
colorType = getPlyType( colors.array );
|
|
105
137
|
|
|
106
|
-
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
for ( const name of customAttributeNames ) {
|
|
141
|
+
|
|
142
|
+
const attr = geometry.getAttribute( name );
|
|
143
|
+
if ( attr !== undefined ) customTypes[ name ] = getPlyType( attr.array );
|
|
107
144
|
|
|
108
|
-
|
|
145
|
+
}
|
|
109
146
|
|
|
110
147
|
} else if ( child.isPoints ) {
|
|
111
148
|
|
|
@@ -118,9 +155,28 @@ class PLYExporter {
|
|
|
118
155
|
|
|
119
156
|
vertexCount += vertices.count;
|
|
120
157
|
|
|
121
|
-
|
|
158
|
+
positionType = getPlyType( vertices.array );
|
|
159
|
+
|
|
160
|
+
if ( normals !== undefined ) {
|
|
161
|
+
|
|
162
|
+
includeNormals = true;
|
|
163
|
+
normalType = getPlyType( normals.array );
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if ( colors !== undefined ) {
|
|
168
|
+
|
|
169
|
+
includeColors = true;
|
|
170
|
+
colorType = getPlyType( colors.array );
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
for ( const name of customAttributeNames ) {
|
|
175
|
+
|
|
176
|
+
const attr = geometry.getAttribute( name );
|
|
177
|
+
if ( attr !== undefined ) customTypes[ name ] = getPlyType( attr.array );
|
|
122
178
|
|
|
123
|
-
|
|
179
|
+
}
|
|
124
180
|
|
|
125
181
|
includeIndices = false;
|
|
126
182
|
|
|
@@ -159,17 +215,17 @@ class PLYExporter {
|
|
|
159
215
|
`element vertex ${vertexCount}\n` +
|
|
160
216
|
|
|
161
217
|
// position
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
218
|
+
`property ${positionType} x\n` +
|
|
219
|
+
`property ${positionType} y\n` +
|
|
220
|
+
`property ${positionType} z\n`;
|
|
165
221
|
|
|
166
222
|
if ( includeNormals === true ) {
|
|
167
223
|
|
|
168
224
|
// normal
|
|
169
225
|
header +=
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
226
|
+
`property ${normalType} nx\n` +
|
|
227
|
+
`property ${normalType} ny\n` +
|
|
228
|
+
`property ${normalType} nz\n`;
|
|
173
229
|
|
|
174
230
|
}
|
|
175
231
|
|
|
@@ -177,8 +233,8 @@ class PLYExporter {
|
|
|
177
233
|
|
|
178
234
|
// uvs
|
|
179
235
|
header +=
|
|
180
|
-
|
|
181
|
-
|
|
236
|
+
`property ${uvType} s\n` +
|
|
237
|
+
`property ${uvType} t\n`;
|
|
182
238
|
|
|
183
239
|
}
|
|
184
240
|
|
|
@@ -186,9 +242,22 @@ class PLYExporter {
|
|
|
186
242
|
|
|
187
243
|
// colors
|
|
188
244
|
header +=
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
245
|
+
`property ${colorType} red\n` +
|
|
246
|
+
`property ${colorType} green\n` +
|
|
247
|
+
`property ${colorType} blue\n`;
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// custom attributes
|
|
252
|
+
|
|
253
|
+
for ( const name of customAttributeNames ) {
|
|
254
|
+
|
|
255
|
+
const type = customTypes[ name ];
|
|
256
|
+
for ( const propName of customPropertyMapping[ name ] ) {
|
|
257
|
+
|
|
258
|
+
header += `property ${type} ${propName}\n`;
|
|
259
|
+
|
|
260
|
+
}
|
|
192
261
|
|
|
193
262
|
}
|
|
194
263
|
|
|
@@ -214,11 +283,34 @@ class PLYExporter {
|
|
|
214
283
|
// Binary File Generation
|
|
215
284
|
const headerBin = new TextEncoder().encode( header );
|
|
216
285
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
const
|
|
286
|
+
const posWriter = getBinaryWriter( positionType );
|
|
287
|
+
const normalWriter = includeNormals ? getBinaryWriter( normalType ) : null;
|
|
288
|
+
const uvWriter = includeUVs ? getBinaryWriter( uvType ) : null;
|
|
289
|
+
const colorWriter = includeColors ? getBinaryWriter( colorType ) : null;
|
|
290
|
+
const colorIsFloat = isFloatType( colorType );
|
|
291
|
+
const colorScale = getColorScale( colorType );
|
|
292
|
+
|
|
293
|
+
const customWriters = {};
|
|
294
|
+
const customIsFloat = {};
|
|
295
|
+
let customStride = 0;
|
|
296
|
+
|
|
297
|
+
for ( const name of customAttributeNames ) {
|
|
298
|
+
|
|
299
|
+
const type = customTypes[ name ];
|
|
300
|
+
const writer = getBinaryWriter( type );
|
|
301
|
+
customWriters[ name ] = writer;
|
|
302
|
+
customIsFloat[ name ] = isFloatType( type );
|
|
303
|
+
customStride += customPropertyMapping[ name ].length * writer.size;
|
|
304
|
+
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const vertexListLength = vertexCount * (
|
|
308
|
+
3 * posWriter.size +
|
|
309
|
+
( includeNormals ? 3 * normalWriter.size : 0 ) +
|
|
310
|
+
( includeUVs ? 2 * uvWriter.size : 0 ) +
|
|
311
|
+
( includeColors ? 3 * colorWriter.size : 0 ) +
|
|
312
|
+
customStride
|
|
313
|
+
);
|
|
222
314
|
|
|
223
315
|
// 1 byte shape descriptor
|
|
224
316
|
// 3 vertex indices at ${indexByteCount} bytes
|
|
@@ -248,14 +340,14 @@ class PLYExporter {
|
|
|
248
340
|
|
|
249
341
|
|
|
250
342
|
// Position information
|
|
251
|
-
|
|
252
|
-
vOffset +=
|
|
343
|
+
posWriter.write( output, vOffset, vertex.x, options.littleEndian );
|
|
344
|
+
vOffset += posWriter.size;
|
|
253
345
|
|
|
254
|
-
|
|
255
|
-
vOffset +=
|
|
346
|
+
posWriter.write( output, vOffset, vertex.y, options.littleEndian );
|
|
347
|
+
vOffset += posWriter.size;
|
|
256
348
|
|
|
257
|
-
|
|
258
|
-
vOffset +=
|
|
349
|
+
posWriter.write( output, vOffset, vertex.z, options.littleEndian );
|
|
350
|
+
vOffset += posWriter.size;
|
|
259
351
|
|
|
260
352
|
// Normal information
|
|
261
353
|
if ( includeNormals === true ) {
|
|
@@ -266,25 +358,25 @@ class PLYExporter {
|
|
|
266
358
|
|
|
267
359
|
vertex.applyMatrix3( normalMatrixWorld ).normalize();
|
|
268
360
|
|
|
269
|
-
|
|
270
|
-
vOffset +=
|
|
361
|
+
normalWriter.write( output, vOffset, vertex.x, options.littleEndian );
|
|
362
|
+
vOffset += normalWriter.size;
|
|
271
363
|
|
|
272
|
-
|
|
273
|
-
vOffset +=
|
|
364
|
+
normalWriter.write( output, vOffset, vertex.y, options.littleEndian );
|
|
365
|
+
vOffset += normalWriter.size;
|
|
274
366
|
|
|
275
|
-
|
|
276
|
-
vOffset +=
|
|
367
|
+
normalWriter.write( output, vOffset, vertex.z, options.littleEndian );
|
|
368
|
+
vOffset += normalWriter.size;
|
|
277
369
|
|
|
278
370
|
} else {
|
|
279
371
|
|
|
280
|
-
|
|
281
|
-
vOffset +=
|
|
372
|
+
normalWriter.write( output, vOffset, 0, options.littleEndian );
|
|
373
|
+
vOffset += normalWriter.size;
|
|
282
374
|
|
|
283
|
-
|
|
284
|
-
vOffset +=
|
|
375
|
+
normalWriter.write( output, vOffset, 0, options.littleEndian );
|
|
376
|
+
vOffset += normalWriter.size;
|
|
285
377
|
|
|
286
|
-
|
|
287
|
-
vOffset +=
|
|
378
|
+
normalWriter.write( output, vOffset, 0, options.littleEndian );
|
|
379
|
+
vOffset += normalWriter.size;
|
|
288
380
|
|
|
289
381
|
}
|
|
290
382
|
|
|
@@ -295,19 +387,19 @@ class PLYExporter {
|
|
|
295
387
|
|
|
296
388
|
if ( uvs != null ) {
|
|
297
389
|
|
|
298
|
-
|
|
299
|
-
vOffset +=
|
|
390
|
+
uvWriter.write( output, vOffset, uvs.getX( i ), options.littleEndian );
|
|
391
|
+
vOffset += uvWriter.size;
|
|
300
392
|
|
|
301
|
-
|
|
302
|
-
vOffset +=
|
|
393
|
+
uvWriter.write( output, vOffset, uvs.getY( i ), options.littleEndian );
|
|
394
|
+
vOffset += uvWriter.size;
|
|
303
395
|
|
|
304
396
|
} else {
|
|
305
397
|
|
|
306
|
-
|
|
307
|
-
vOffset +=
|
|
398
|
+
uvWriter.write( output, vOffset, 0, options.littleEndian );
|
|
399
|
+
vOffset += uvWriter.size;
|
|
308
400
|
|
|
309
|
-
|
|
310
|
-
vOffset +=
|
|
401
|
+
uvWriter.write( output, vOffset, 0, options.littleEndian );
|
|
402
|
+
vOffset += uvWriter.size;
|
|
311
403
|
|
|
312
404
|
}
|
|
313
405
|
|
|
@@ -322,25 +414,50 @@ class PLYExporter {
|
|
|
322
414
|
|
|
323
415
|
ColorManagement.workingToColorSpace( tempColor, SRGBColorSpace );
|
|
324
416
|
|
|
325
|
-
|
|
326
|
-
|
|
417
|
+
const r = colorIsFloat ? tempColor.r : Math.round( tempColor.r * colorScale );
|
|
418
|
+
const g = colorIsFloat ? tempColor.g : Math.round( tempColor.g * colorScale );
|
|
419
|
+
const b = colorIsFloat ? tempColor.b : Math.round( tempColor.b * colorScale );
|
|
327
420
|
|
|
328
|
-
|
|
329
|
-
vOffset +=
|
|
421
|
+
colorWriter.write( output, vOffset, r, options.littleEndian );
|
|
422
|
+
vOffset += colorWriter.size;
|
|
330
423
|
|
|
331
|
-
|
|
332
|
-
vOffset +=
|
|
424
|
+
colorWriter.write( output, vOffset, g, options.littleEndian );
|
|
425
|
+
vOffset += colorWriter.size;
|
|
426
|
+
|
|
427
|
+
colorWriter.write( output, vOffset, b, options.littleEndian );
|
|
428
|
+
vOffset += colorWriter.size;
|
|
333
429
|
|
|
334
430
|
} else {
|
|
335
431
|
|
|
336
|
-
|
|
337
|
-
|
|
432
|
+
const white = colorIsFloat ? 1 : colorScale;
|
|
433
|
+
|
|
434
|
+
colorWriter.write( output, vOffset, white, options.littleEndian );
|
|
435
|
+
vOffset += colorWriter.size;
|
|
436
|
+
|
|
437
|
+
colorWriter.write( output, vOffset, white, options.littleEndian );
|
|
438
|
+
vOffset += colorWriter.size;
|
|
439
|
+
|
|
440
|
+
colorWriter.write( output, vOffset, white, options.littleEndian );
|
|
441
|
+
vOffset += colorWriter.size;
|
|
442
|
+
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// Custom attributes
|
|
338
448
|
|
|
339
|
-
|
|
340
|
-
vOffset += 1;
|
|
449
|
+
for ( const name of customAttributeNames ) {
|
|
341
450
|
|
|
342
|
-
|
|
343
|
-
|
|
451
|
+
const writer = customWriters[ name ];
|
|
452
|
+
const propCount = customPropertyMapping[ name ].length;
|
|
453
|
+
const attr = geometry.getAttribute( name );
|
|
454
|
+
const isFloat = customIsFloat[ name ];
|
|
455
|
+
|
|
456
|
+
for ( let c = 0; c < propCount; c ++ ) {
|
|
457
|
+
|
|
458
|
+
const raw = attr != null ? getAttributeComponent( attr, i, c ) : 0;
|
|
459
|
+
writer.write( output, vOffset, isFloat ? raw : Math.round( raw ), options.littleEndian );
|
|
460
|
+
vOffset += writer.size;
|
|
344
461
|
|
|
345
462
|
}
|
|
346
463
|
|
|
@@ -409,6 +526,17 @@ class PLYExporter {
|
|
|
409
526
|
let vertexList = '';
|
|
410
527
|
let faceList = '';
|
|
411
528
|
|
|
529
|
+
const positionIsFloat = isFloatType( positionType );
|
|
530
|
+
const normalIsFloat = isFloatType( normalType );
|
|
531
|
+
const uvIsFloat = isFloatType( uvType );
|
|
532
|
+
const colorIsFloat = isFloatType( colorType );
|
|
533
|
+
const colorScale = getColorScale( colorType );
|
|
534
|
+
|
|
535
|
+
const customIsFloat = {};
|
|
536
|
+
for ( const name of customAttributeNames ) customIsFloat[ name ] = isFloatType( customTypes[ name ] );
|
|
537
|
+
|
|
538
|
+
const encode = ( v, isFloat ) => isFloat ? v : Math.round( v );
|
|
539
|
+
|
|
412
540
|
traverseMeshes( function ( mesh, geometry ) {
|
|
413
541
|
|
|
414
542
|
const vertices = geometry.getAttribute( 'position' );
|
|
@@ -429,9 +557,9 @@ class PLYExporter {
|
|
|
429
557
|
|
|
430
558
|
// Position information
|
|
431
559
|
let line =
|
|
432
|
-
vertex.x + ' ' +
|
|
433
|
-
vertex.y + ' ' +
|
|
434
|
-
vertex.z;
|
|
560
|
+
encode( vertex.x, positionIsFloat ) + ' ' +
|
|
561
|
+
encode( vertex.y, positionIsFloat ) + ' ' +
|
|
562
|
+
encode( vertex.z, positionIsFloat );
|
|
435
563
|
|
|
436
564
|
// Normal information
|
|
437
565
|
if ( includeNormals === true ) {
|
|
@@ -443,9 +571,9 @@ class PLYExporter {
|
|
|
443
571
|
vertex.applyMatrix3( normalMatrixWorld ).normalize();
|
|
444
572
|
|
|
445
573
|
line += ' ' +
|
|
446
|
-
vertex.x + ' ' +
|
|
447
|
-
vertex.y + ' ' +
|
|
448
|
-
vertex.z;
|
|
574
|
+
encode( vertex.x, normalIsFloat ) + ' ' +
|
|
575
|
+
encode( vertex.y, normalIsFloat ) + ' ' +
|
|
576
|
+
encode( vertex.z, normalIsFloat );
|
|
449
577
|
|
|
450
578
|
} else {
|
|
451
579
|
|
|
@@ -461,8 +589,8 @@ class PLYExporter {
|
|
|
461
589
|
if ( uvs != null ) {
|
|
462
590
|
|
|
463
591
|
line += ' ' +
|
|
464
|
-
uvs.getX( i ) + ' ' +
|
|
465
|
-
uvs.getY( i );
|
|
592
|
+
encode( uvs.getX( i ), uvIsFloat ) + ' ' +
|
|
593
|
+
encode( uvs.getY( i ), uvIsFloat );
|
|
466
594
|
|
|
467
595
|
} else {
|
|
468
596
|
|
|
@@ -481,14 +609,33 @@ class PLYExporter {
|
|
|
481
609
|
|
|
482
610
|
ColorManagement.workingToColorSpace( tempColor, SRGBColorSpace );
|
|
483
611
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
612
|
+
const r = colorIsFloat ? tempColor.r : Math.round( tempColor.r * colorScale );
|
|
613
|
+
const g = colorIsFloat ? tempColor.g : Math.round( tempColor.g * colorScale );
|
|
614
|
+
const b = colorIsFloat ? tempColor.b : Math.round( tempColor.b * colorScale );
|
|
615
|
+
|
|
616
|
+
line += ` ${r} ${g} ${b}`;
|
|
488
617
|
|
|
489
618
|
} else {
|
|
490
619
|
|
|
491
|
-
|
|
620
|
+
const white = colorIsFloat ? 1 : colorScale;
|
|
621
|
+
line += ` ${white} ${white} ${white}`;
|
|
622
|
+
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
// Custom attributes
|
|
628
|
+
|
|
629
|
+
for ( const name of customAttributeNames ) {
|
|
630
|
+
|
|
631
|
+
const propCount = customPropertyMapping[ name ].length;
|
|
632
|
+
const attr = geometry.getAttribute( name );
|
|
633
|
+
const isFloat = customIsFloat[ name ];
|
|
634
|
+
|
|
635
|
+
for ( let c = 0; c < propCount; c ++ ) {
|
|
636
|
+
|
|
637
|
+
const raw = attr != null ? getAttributeComponent( attr, i, c ) : 0;
|
|
638
|
+
line += ' ' + encode( raw, isFloat );
|
|
492
639
|
|
|
493
640
|
}
|
|
494
641
|
|
|
@@ -541,6 +688,68 @@ class PLYExporter {
|
|
|
541
688
|
|
|
542
689
|
}
|
|
543
690
|
|
|
691
|
+
function getPlyType( array ) {
|
|
692
|
+
|
|
693
|
+
if ( array instanceof Int8Array ) return 'char';
|
|
694
|
+
if ( array instanceof Uint8Array || array instanceof Uint8ClampedArray ) return 'uchar';
|
|
695
|
+
if ( array instanceof Int16Array ) return 'short';
|
|
696
|
+
if ( array instanceof Uint16Array ) return 'ushort';
|
|
697
|
+
if ( array instanceof Int32Array ) return 'int';
|
|
698
|
+
if ( array instanceof Uint32Array ) return 'uint';
|
|
699
|
+
if ( array instanceof Float32Array ) return 'float';
|
|
700
|
+
if ( array instanceof Float64Array ) return 'double';
|
|
701
|
+
return 'float';
|
|
702
|
+
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
function getBinaryWriter( type ) {
|
|
706
|
+
|
|
707
|
+
switch ( type ) {
|
|
708
|
+
|
|
709
|
+
case 'char': return { write: ( dv, at, v ) => dv.setInt8( at, v ), size: 1 };
|
|
710
|
+
case 'uchar': return { write: ( dv, at, v ) => dv.setUint8( at, v ), size: 1 };
|
|
711
|
+
case 'short': return { write: ( dv, at, v, le ) => dv.setInt16( at, v, le ), size: 2 };
|
|
712
|
+
case 'ushort': return { write: ( dv, at, v, le ) => dv.setUint16( at, v, le ), size: 2 };
|
|
713
|
+
case 'int': return { write: ( dv, at, v, le ) => dv.setInt32( at, v, le ), size: 4 };
|
|
714
|
+
case 'uint': return { write: ( dv, at, v, le ) => dv.setUint32( at, v, le ), size: 4 };
|
|
715
|
+
case 'float': return { write: ( dv, at, v, le ) => dv.setFloat32( at, v, le ), size: 4 };
|
|
716
|
+
case 'double': return { write: ( dv, at, v, le ) => dv.setFloat64( at, v, le ), size: 8 };
|
|
717
|
+
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
function isFloatType( type ) {
|
|
723
|
+
|
|
724
|
+
return type === 'float' || type === 'double';
|
|
725
|
+
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
function getAttributeComponent( attr, i, c ) {
|
|
729
|
+
|
|
730
|
+
switch ( c ) {
|
|
731
|
+
|
|
732
|
+
case 0: return attr.getX( i );
|
|
733
|
+
case 1: return attr.getY( i );
|
|
734
|
+
case 2: return attr.getZ( i );
|
|
735
|
+
case 3: return attr.getW( i );
|
|
736
|
+
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
function getColorScale( type ) {
|
|
742
|
+
|
|
743
|
+
switch ( type ) {
|
|
744
|
+
|
|
745
|
+
case 'uchar': return 255;
|
|
746
|
+
case 'ushort': return 65535;
|
|
747
|
+
default: return 1;
|
|
748
|
+
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
}
|
|
752
|
+
|
|
544
753
|
/**
|
|
545
754
|
* Export options of `PLYExporter`.
|
|
546
755
|
*
|
|
@@ -550,6 +759,10 @@ class PLYExporter {
|
|
|
550
759
|
* the exported PLY file. Valid values are `'color'`, `'normal'`, `'uv'`, and `'index'`. If triangle
|
|
551
760
|
* indices are excluded, then a point cloud is exported.
|
|
552
761
|
* @property {boolean} [littleEndian=false] - Whether the binary export uses little or big endian.
|
|
762
|
+
* @property {Object<string, Array<string>>} [customPropertyMapping] - A mapping that allows
|
|
763
|
+
* exporting custom buffer attributes as PLY vertex properties. Each entry maps a buffer attribute
|
|
764
|
+
* name to an array of PLY property names. The number of property names must match the item size
|
|
765
|
+
* of the buffer attribute. This is the inverse of `PLYLoader.setCustomPropertyNameMapping()`.
|
|
553
766
|
**/
|
|
554
767
|
|
|
555
768
|
/**
|