[vtkusers] Artifacts along bounding box edges in volume rendering

Elvis Stansvik elvis.stansvik at orexplore.com
Mon Mar 13 02:53:23 EDT 2017


2017-03-10 10:11 GMT+01:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:
> 2017-03-10 10:07 GMT+01:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:
>> 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?
>
> I forgot to say, this is with VTK 7.1.0.

Noone who knows where this comes from? Would be great if someone could
confirm that they can reproduce it with my test case, as I'm beginning
to suspect it might be graphics card specific (I'm on Linux, Intel
graphics).

Should I post to vtk-dev perhaps?

Elvis

>
> Elvis
>
>>
>> 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
>> )


More information about the vtkusers mailing list