2017-10-26 15:52:03 +00:00
|
|
|
# VTK-m #
|
2017-05-22 17:33:40 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
VTK-m is a toolkit of scientific visualization algorithms for emerging
|
|
|
|
processor architectures. VTK-m supports the fine-grained concurrency for
|
|
|
|
data analysis and visualization algorithms required to drive extreme scale
|
|
|
|
computing by providing abstract models for data and execution that can be
|
|
|
|
applied to a variety of algorithms across many different processor
|
|
|
|
architectures.
|
2017-07-07 14:19:22 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
You can find out more about the design of VTK-m on the [VTK-m Wiki].
|
2017-07-07 14:19:22 +00:00
|
|
|
|
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
## Learning Resources ##
|
2017-07-07 14:19:22 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
+ A high-level overview is given in the IEEE Vis talk "[VTK-m:
|
|
|
|
Accelerating the Visualization Toolkit for Massively Threaded
|
|
|
|
Architectures][VTK-m Overview]."
|
2017-07-07 14:19:22 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
+ The [VTK-m Users Guide] provides extensive documentation. It is broken
|
|
|
|
into multiple parts for learning and references at multiple different
|
|
|
|
levels.
|
|
|
|
+ "Part 1: Getting Started" provides the introductory instruction for
|
|
|
|
building VTK-m and using its high-level features.
|
|
|
|
+ "Part 2: Using VTK-m" covers the core fundamental components of
|
|
|
|
VTK-m including data model, worklets, and filters.
|
|
|
|
+ "Part 3: Developing with VTK-m" covers how to develop new worklets
|
|
|
|
and filters.
|
|
|
|
+ "Part 4: Advanced Development" covers topics such as new worklet
|
|
|
|
types and custom device adapters.
|
2017-05-22 17:33:40 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
+ Community discussion takes place on the [VTK-m users email list].
|
2017-05-22 17:33:40 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
+ Doxygen-generated nightly reference documentation is available
|
|
|
|
[online][VTK-m Doxygen].
|
2017-05-22 17:33:40 +00:00
|
|
|
|
2017-07-07 14:19:22 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
## Contributing ##
|
|
|
|
|
|
|
|
There are many ways to contribute to [VTK-m], with varying levels of
|
|
|
|
effort.
|
|
|
|
|
|
|
|
+ Ask a question on the [VTK-m users email list].
|
|
|
|
|
|
|
|
+ Submit new or add to discussions of a feature requests or bugs on the
|
|
|
|
[VTK-m Issue Tracker].
|
|
|
|
|
|
|
|
+ Submit a Pull Request to improve [VTK-m]
|
|
|
|
+ See [CONTRIBUTING.md] for detailed instructions on how to create a
|
|
|
|
Pull Request.
|
|
|
|
+ See the [VTK-m Coding Conventions] that must be followed for
|
|
|
|
contributed code.
|
|
|
|
|
|
|
|
+ Submit an Issue or Pull Request for the [VTK-m Users Guide]
|
2017-07-07 14:19:22 +00:00
|
|
|
|
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
## Dependencies ##
|
|
|
|
|
|
|
|
VTK-m Requires:
|
|
|
|
|
|
|
|
+ C++11 Compiler. VTK-m has been confirmed to work with the following
|
|
|
|
+ GCC 4.8+
|
|
|
|
+ Clang 3.3+
|
|
|
|
+ XCode 5.0+
|
2018-02-22 16:34:08 +00:00
|
|
|
+ MSVC 2015+
|
2017-10-26 15:52:03 +00:00
|
|
|
+ [CMake](http://www.cmake.org/download/)
|
|
|
|
+ CMake 3.3+ (for any build)
|
|
|
|
+ CMake 3.9+ (for CUDA build)
|
2017-05-22 17:33:40 +00:00
|
|
|
|
2017-07-07 14:19:22 +00:00
|
|
|
Optional dependencies are:
|
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
+ CUDA Device Adapter
|
|
|
|
+ [Cuda Toolkit 7+](https://developer.nvidia.com/cuda-toolkit)
|
|
|
|
+ TBB Device Adapter
|
|
|
|
+ [TBB](https://www.threadingbuildingblocks.org/)
|
|
|
|
+ OpenGL Rendering
|
|
|
|
+ The rendering module contains multiple rendering implementations
|
|
|
|
including standalone rendering code. The rendering module also
|
|
|
|
includes (optionally built) OpenGL rendering classes.
|
|
|
|
+ The OpenGL rendering classes require that you have a extension
|
|
|
|
binding library and one rendering library. A windowing library is
|
2017-10-26 19:02:18 +00:00
|
|
|
not needed except for some optional tests.
|
2017-10-26 15:52:03 +00:00
|
|
|
+ Extension Binding
|
|
|
|
+ [GLEW](http://glew.sourceforge.net/)
|
2017-10-26 19:51:48 +00:00
|
|
|
+ On Screen Rendering
|
|
|
|
+ OpenGL Driver
|
|
|
|
+ Mesa Driver
|
|
|
|
+ On Screen Rendering Tests
|
2017-10-26 15:52:03 +00:00
|
|
|
+ [GLFW](http://www.glfw.org/)
|
|
|
|
+ [GLUT](http://freeglut.sourceforge.net/)
|
2017-10-26 19:51:48 +00:00
|
|
|
+ Headless Rendering
|
|
|
|
+ [OS Mesa](https://www.mesa3d.org/osmesa.html)
|
|
|
|
+ EGL Driver
|
2017-10-26 15:52:03 +00:00
|
|
|
|
2017-07-07 14:19:22 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
## Building ##
|
2017-07-07 14:19:22 +00:00
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
VTK-m supports all majors platforms (Windows, Linux, OSX), and uses CMake
|
|
|
|
to generate all the build rules for the project. The VTK-m source code is
|
|
|
|
available from the [VTK-m download page] or by directly cloning the [VTK-m
|
|
|
|
git repository].
|
2017-07-07 14:19:22 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
$ git clone https://gitlab.kitware.com/vtk/vtk-m.git
|
|
|
|
$ mkdir vtkm-build
|
|
|
|
$ cd vtkm-build
|
|
|
|
$ cmake-gui ../vtk-m
|
|
|
|
$ make -j<N>
|
|
|
|
$ make test
|
|
|
|
```
|
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
A more detailed description of building VTK-m is available in the [VTK-m
|
|
|
|
Users Guide].
|
|
|
|
|
|
|
|
|
2017-10-26 19:02:18 +00:00
|
|
|
## Example##
|
|
|
|
|
|
|
|
The VTK-m source distribution includes a number of examples. The goal of the
|
|
|
|
VTK-m examples is to illustrate specific VTK-m concepts in a consistent and
|
|
|
|
simple format. However, these examples only cover a small part of the
|
|
|
|
capabilities of VTK-m.
|
|
|
|
|
|
|
|
Below is a simple example of using VTK-m to load a VTK image file, run the
|
|
|
|
Marching Cubes algorithm on it, and render the results to an image:
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
vtkm::io::reader::VTKDataSetReader reader("path/to/vtk_image_file");
|
|
|
|
inputData = reader.ReadDataSet();
|
|
|
|
|
|
|
|
vtkm::Float64 isovalue = 100.0f;
|
|
|
|
std::string fieldName = "pointvar";
|
|
|
|
|
|
|
|
// Create an isosurface filter
|
|
|
|
vtkm::filter::MarchingCubes filter;
|
|
|
|
filter.SetIsoValue(0, isovalue);
|
|
|
|
vtkm::filter::Result result = filter.Execute( inputData,
|
|
|
|
inputData.GetField(fieldName) );
|
|
|
|
filter.MapFieldOntoOutput(result, inputData.GetField(fieldName));
|
|
|
|
|
|
|
|
// compute the bounds and extends of the input data
|
|
|
|
vtkm::Bounds coordsBounds = inputData.GetCoordinateSystem().GetBounds();
|
|
|
|
vtkm::Vec<vtkm::Float64,3> totalExtent( coordsBounds.X.Length(),
|
|
|
|
coordsBounds.Y.Length(),
|
|
|
|
coordsBounds.Z.Length() );
|
|
|
|
vtkm::Float64 mag = vtkm::Magnitude(totalExtent);
|
|
|
|
vtkm::Normalize(totalExtent);
|
|
|
|
|
|
|
|
// setup a camera and point it to towards the center of the input data
|
|
|
|
vtkm::rendering::Camera camera;
|
|
|
|
camera.ResetToBounds(coordsBounds);
|
|
|
|
|
|
|
|
camera.SetLookAt(totalExtent*(mag * .5f));
|
|
|
|
camera.SetViewUp(vtkm::make_Vec(0.f, 1.f, 0.f));
|
|
|
|
camera.SetClippingRange(1.f, 100.f);
|
|
|
|
camera.SetFieldOfView(60.f);
|
|
|
|
camera.SetPosition(totalExtent*(mag * 2.f));
|
2018-01-18 18:55:15 +00:00
|
|
|
vtkm::cont::ColorTable colorTable("inferno");
|
2017-10-26 19:02:18 +00:00
|
|
|
|
|
|
|
// Create a mapper, canvas and view that will be used to render the scene
|
|
|
|
vtkm::rendering::Scene scene;
|
|
|
|
vtkm::rendering::MapperRayTracer mapper;
|
|
|
|
vtkm::rendering::CanvasRayTracer canvas(512, 512);
|
|
|
|
vtkm::rendering::Color bg(0.2f, 0.2f, 0.2f, 1.0f);
|
|
|
|
|
|
|
|
// Render an image of the output isosurface
|
|
|
|
vtkm::cont::DataSet& outputData = result.GetDataSet();
|
|
|
|
scene.AddActor(vtkm::rendering::Actor(outputData.GetCellSet(),
|
|
|
|
outputData.GetCoordinateSystem(),
|
|
|
|
outputData.GetField(fieldName),
|
|
|
|
colorTable));
|
|
|
|
vtkm::rendering::View3D view(scene, mapper, canvas, camera, bg);
|
|
|
|
view.Initialize();
|
|
|
|
view.Paint();
|
|
|
|
view.SaveAs("demo_output.pnm");
|
|
|
|
```
|
|
|
|
|
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
## License ##
|
2017-05-22 17:33:40 +00:00
|
|
|
|
|
|
|
VTK-m is distributed under the OSI-approved BSD 3-clause License.
|
|
|
|
See [LICENSE.txt](LICENSE.txt) for details.
|
|
|
|
|
|
|
|
|
2017-10-26 15:52:03 +00:00
|
|
|
[VTK-m]: https://gitlab.kitware.com/vtk/vtk-m/
|
|
|
|
[VTK-m Coding Conventions]: docs/CodingConventions.md
|
|
|
|
[VTK-m Doxygen]: http://m.vtk.org/documentation/
|
|
|
|
[VTK-m download page]: http://m.vtk.org/index.php/VTK-m_Releases
|
|
|
|
[VTK-m git repository]: https://gitlab.kitware.com/vtk/vtk-m/
|
|
|
|
[VTK-m Issue Tracker]: https://gitlab.kitware.com/vtk/vtk-m/issues
|
|
|
|
[VTK-m Overview]: http://m.vtk.org/images/2/29/VTKmVis2016.pptx
|
|
|
|
[VTK-m Users Guide]: http://m.vtk.org/images/c/c8/VTKmUsersGuide.pdf
|
|
|
|
[VTK-m users email list]: http://vtk.org/mailman/listinfo/vtkm
|
|
|
|
[VTK-m Wiki]: http://m.vtk.org/
|
|
|
|
[CONTRIBUTING.md]: CONTRIBUTING.md
|