import { Matrix4, Mesh, PerspectiveCamera, OrthographicCamera, WebGLRenderer } from "three"; import Volume from "./Volume.js"; import { type FuseChannel } from "./types.js"; import { Light } from "./Light.js"; import type { VolumeRenderImpl } from "./VolumeRenderImpl.js"; import { VolumeRenderSettings, SettingsFlags } from "./VolumeRenderSettings.js"; import Channel from "./Channel.js"; export default class PathTracedVolume implements VolumeRenderImpl { private settings; private volume; private viewChannels; private volumeTexture; private cameraIsMoving; private sampleCounter; private frameCounter; private pathTracingUniforms; private pathTracingRenderToBuffer; private pathTracingRenderTarget; private screenTextureRenderToBuffer; private screenTextureRenderTarget; private denoiseShaderUniforms; private screenOutputShaderUniforms; private screenOutputDenoiseMaterial; private screenOutputMaterial; private screenOutputGeometry; private screenOutputMesh; private gradientDelta; private renderUpdateListener?; /** * Creates a new PathTracedVolume. * @param volume The volume that this renderer should render data from. * @param settings Optional settings object. If set, updates the renderer with * the given settings. Otherwise, uses the default VolumeRenderSettings. */ constructor(volume: Volume, settings?: VolumeRenderSettings); cleanup(): void; setRenderUpdateListener(callback?: (iteration: number) => void): void; resetProgress(): void; private getNormVolumeSize; /** * If the new settings have changed, applies all changes to this volume renderer. * @param newSettings * @returns */ updateSettings(newSettings: VolumeRenderSettings, dirtyFlags?: number | SettingsFlags): void; updateVolumeDimensions(): void; doRender(renderer: WebGLRenderer, camera: PerspectiveCamera | OrthographicCamera): void; get3dObject(): Mesh; onStartControls(): void; onChangeControls(): void; onEndControls(): void; viewpointMoved(): void; updateActiveChannels(channelColors: FuseChannel[], channelData: Channel[]): void; updateVolumeData4(): void; updateLuts(channelColors: FuseChannel[], channelData: Channel[]): void; updateMaterial(): void; updateShadingMethod(brdf: number): void; updateShowLights(showlights: number): void; updateExposure(e: number): void; updateCamera(fov: number, focalDistance: number, apertureSize: number): void; updateLights(state: Light[]): void; updateLightsSecondary(cameraMatrix?: Matrix4): void; updateClipRegion(xmin: number, xmax: number, ymin: number, ymax: number, zmin: number, zmax: number): void; setZSlice(_slice: number): boolean; }