UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

111 lines (100 loc) 3.3 kB
import { m as macro } from '../../../macros2.js'; import { r as radiansFromDegrees } from '../../../Common/Core/Math/index.js'; import vtkDracoReader from '../DracoReader.js'; import vtkLight from '../../../Rendering/Core/Light.js'; import { MIN_LIGHT_ATTENUATION } from './Constants.js'; const { vtkWarningMacro } = macro; /** * Handles the KHR_materials_unlit extension. * * @param {object} extension - The KHR_materials_unlit extension object. * @param {vtkProperty} property - The vtkProperty instance to update. */ function handleKHRMaterialsUnlit(extension, property) { property.setLighting(true); } /** * Handles the KHR_materials_ior extension. * * @param {object} extension - The KHR_materials_unlit extension object. * @param {vtkProperty} property - The vtkProperty instance to update. */ function handleKHRMaterialsIor(extension, property) { property.setBaseIOR(extension.ior); } /** * Handles the KHR_materials_specular extension. * @param {object} extension - The KHR_materials_specular extension object. * @param {vtkProperty} property - The vtkProperty instance to update. */ function handleKHRMaterialsSpecular(extension, property) { property.setSpecular(extension.specularFactor); property.setSpecularColor(extension.specularColorFactor); } /** * Handles the KHR_lights_punctual extension. * * @param {object} extension - The KHR_lights_punctual extension object. * @param {vtkRenderer} renderer - The vtkRenderer instance to add the light to. */ function handleKHRLightsPunctual(extension, transformMatrix, model) { const { light } = extension; const { color, intensity, range, spot, type } = light; const l = vtkLight.newInstance({ color: color || [1, 1, 1], intensity: intensity || 1.0 }); // Apply the global transform to the light l.setTransformMatrix(transformMatrix); // Handle range if (range > 0) { // Set quadratic values to get attenuation(range) ~= MIN_LIGHT_ATTENUATION l.setAttenuationValues(1, 0, 1.0 / (range * range * MIN_LIGHT_ATTENUATION)); } switch (type) { case 'directional': l.setPositional(false); break; case 'point': l.setPositional(true); l.setConeAngle(90); break; case 'spot': l.setPositional(true); l.setConeAngle(radiansFromDegrees(spot.outerConeAngle)); break; default: vtkWarningMacro(`Unsupported light type: ${type}`); } model.lights.set(light.name, l); } /** * Handles the KHR_draco_mesh_compression extension. * * @param {object} extension - The KHR_draco_mesh_compression extension object. */ function handleKHRDracoMeshCompression(extension) { const reader = vtkDracoReader.newInstance(); reader.parse(extension.bufferView); return reader.getOutputData(); } /** * Handles the KHR_materials_variants extension. * * @param {object} extension - The KHR_materials_variants extension object. * @param {object} model - The model object to update with variant information. */ function handleKHRMaterialsVariants(extension, model) { model.variants = extension.variants.map(v => v.name); } export { handleKHRDracoMeshCompression, handleKHRLightsPunctual, handleKHRMaterialsIor, handleKHRMaterialsSpecular, handleKHRMaterialsUnlit, handleKHRMaterialsVariants };