diff --git a/Sources/Rendering/Core/ImageCPRMapper/example/controller.html b/Sources/Rendering/Core/ImageCPRMapper/example/controller.html index a28587866bc..0ffda4c7c20 100644 --- a/Sources/Rendering/Core/ImageCPRMapper/example/controller.html +++ b/Sources/Rendering/Core/ImageCPRMapper/example/controller.html @@ -44,7 +44,7 @@ Number of samples - + diff --git a/Sources/Rendering/Core/ImageCPRMapper/example/index.js b/Sources/Rendering/Core/ImageCPRMapper/example/index.js index b49d8f750ff..7f763c0f3f6 100644 --- a/Sources/Rendering/Core/ImageCPRMapper/example/index.js +++ b/Sources/Rendering/Core/ImageCPRMapper/example/index.js @@ -421,8 +421,15 @@ projectionModeEl.addEventListener('input', (ev) => { }); projectionThicknessEl.addEventListener('input', (ev) => { - const thickness = Number.parseFloat(projectionThicknessEl.value, 10); - mapper.setProjectionSlabThickness(thickness); + const thicknessRatio = Number.parseFloat(projectionThicknessEl.value, 10); + const image = mapper.getInputData(); + if (image) { + const spacing = image.getSpacing(); + const dimensions = image.getDimensions(); + const diagonal = vec3.len(vec3.mul([], spacing, dimensions)); + const thickness = diagonal * thicknessRatio; + mapper.setProjectionSlabThickness(thickness); + } renderWindow.render(); }); mapper.setProjectionSlabThickness(0.1); diff --git a/Sources/Rendering/OpenGL/ImageCPRMapper/index.js b/Sources/Rendering/OpenGL/ImageCPRMapper/index.js index f33b8b06f79..438d67fe388 100644 --- a/Sources/Rendering/OpenGL/ImageCPRMapper/index.js +++ b/Sources/Rendering/OpenGL/ImageCPRMapper/index.js @@ -664,7 +664,7 @@ function vtkOpenGLImageCPRMapper(publicAPI, model) { ]; if (useProjection) { tcoordFSDec.push( - 'uniform vec3 spacing;', + 'uniform vec3 volumeSizeMC;', 'uniform int projectionSlabNumberOfSamples;', 'uniform float projectionConstantOffset;', 'uniform float projectionStepLength;' @@ -821,7 +821,7 @@ function vtkOpenGLImageCPRMapper(publicAPI, model) { // Loop on all the samples of the projection tcoordFSImpl.push( - 'vec3 projectionScaledDirection = projectionDirection / spacing;', + 'vec3 projectionScaledDirection = projectionDirection / volumeSizeMC;', 'vec3 projectionStep = projectionStepLength * projectionScaledDirection;', 'vec3 projectionStartPosition = volumePosTC + projectionConstantOffset * projectionScaledDirection;', 'vec4 tvalue = initialProjectionTextureValue;', @@ -1092,12 +1092,14 @@ function vtkOpenGLImageCPRMapper(publicAPI, model) { if (model.renderable.isProjectionEnabled()) { const image = model.currentImageDataInput; const spacing = image.getSpacing(); + const dimensions = image.getDimensions(); const projectionSlabThickness = model.renderable.getProjectionSlabThickness(); const projectionSlabNumberOfSamples = model.renderable.getProjectionSlabNumberOfSamples(); - program.setUniform3fArray('spacing', spacing); + const volumeSize = vec3.mul([], spacing, dimensions); + program.setUniform3fArray('volumeSizeMC', volumeSize); program.setUniformi( 'projectionSlabNumberOfSamples', projectionSlabNumberOfSamples