[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