[vtkusers] Artifacts along bounding box edges in volume rendering

Elvis Stansvik elvis.stansvik at orexplore.com
Fri Mar 10 04:07:22 EST 2017


Hi all,

I'm trying to debug a problem with artifacts appearing around the
bounding box edges in my volume rendering (at certain camera angles).
I can reproduce the problem with the minimal test case below. In the
attached screen shot, notice the faint white artifacts along the
bounding box edges.

Anyone know where these come from and how I can fix it?

Thanks in advance,
Elvis


main.cpp:

#include <algorithm>

#include <vtkCamera.h>
#include <vtkColorTransferFunction.h>
#include <vtkGPUVolumeRayCastMapper.h>
#include <vtkImageData.h>
#include <vtkNew.h>
#include <vtkPiecewiseFunction.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkVolume.h>
#include <vtkVolumeProperty.h>

int main(int argc, char *argv[])
{
    vtkNew<vtkColorTransferFunction> colorFunction;
    colorFunction->AddRGBPoint(0.0, 0.0, 0.0, 0.0);
    colorFunction->AddRGBPoint(1.0, 0.0, 0.0, 0.0);

    vtkNew<vtkPiecewiseFunction> opacityFunction;
    opacityFunction->AddPoint(0.0, 0.0);
    opacityFunction->AddPoint(1.0, 1.0);

    vtkNew<vtkImageData> data;
    data->SetExtent(0, 200, 0, 200, 0, 200);
    data->AllocateScalars(VTK_FLOAT, 1);
    std::fill_n(static_cast<float *>(data->GetScalarPointer()), 8000000, 0.1);

    vtkNew<vtkGPUVolumeRayCastMapper> mapper;
    mapper->SetInputData(data.Get());

    vtkNew<vtkVolumeProperty> property;
    property->SetScalarOpacity(opacityFunction.Get());
    property->SetColor(colorFunction.Get());

    vtkNew<vtkVolume> volume;
    volume->SetMapper(mapper.Get());
    volume->SetProperty(property.Get());

    vtkNew<vtkRenderer> renderer;
    renderer->AddVolume(volume.Get());
    renderer->SetBackground(1.0, 1.0, 1.0);

    vtkNew<vtkRenderWindow> window;
    window->AddRenderer(renderer.Get());

    // Position camera such that artifacts appear
    auto camera = renderer->GetActiveCamera();
    camera->SetPosition(500.0, 220.0, 500.0);
    camera->SetFocalPoint(0.0, 80.0, 0.0);
    renderer->ResetCameraClippingRange();

    vtkNew<vtkRenderWindowInteractor> interactor;
    interactor->SetRenderWindow(window.Get());
    interactor->Start();

    return 0;
}


CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)

project(TestCase)

set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} /opt/VTK7)

find_package(VTK 7.1 COMPONENTS
    vtkCommonCore
    vtkCommonDataModel
    vtkCommonExecutionModel
    vtkCommonMath
    vtkInteractionStyle
    vtkRenderingCore
    vtkRenderingOpenGL2
    vtkRenderingVolume
    vtkRenderingVolumeOpenGL2
    REQUIRED
)

add_executable(TestCase WIN32 main.cpp)

target_link_libraries(TestCase PUBLIC
    vtkCommonCore
    vtkCommonDataModel
    vtkCommonExecutionModel
    vtkCommonMath
    vtkInteractionStyle
    vtkRenderingCore
    vtkRenderingOpenGL2
    vtkRenderingVolume
    vtkRenderingVolumeOpenGL2
)

target_include_directories(TestCase PUBLIC
    ${VTK_INCLUDE_DIRS}
)

target_compile_definitions(TestCase PUBLIC
    ${VTK_DEFINITIONS}
)

set_target_properties(TestCase PROPERTIES
    CXX_STANDARD 14
    CXX_STANDARD_REQUIRED ON
)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: testcase.png
Type: image/png
Size: 13704 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170310/6e99182e/attachment.png>


More information about the vtkusers mailing list