vtk-m/vtkm/rendering/raytracing/RayOperations.cxx

36 lines
1.4 KiB
C++
Raw Permalink Normal View History

2019-04-15 23:24:21 +00:00
//============================================================================
2017-08-06 02:14:31 +00:00
// Copyright (c) Kitware, Inc.
// All rights reserved.
// See LICENSE.txt for details.
//
// This software is distributed WITHOUT ANY WARRANTY; without even
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the above copyright notice for more information.
2019-04-15 23:24:21 +00:00
//============================================================================
2017-08-06 02:14:31 +00:00
#include <vtkm/rendering/raytracing/RayOperations.h>
namespace vtkm
{
namespace rendering
{
namespace raytracing
{
void RayOperations::MapCanvasToRays(Ray<vtkm::Float32>& rays,
const vtkm::rendering::Camera& camera,
const vtkm::rendering::CanvasRayTracer& canvas)
{
vtkm::Id width = canvas.GetWidth();
vtkm::Id height = canvas.GetHeight();
vtkm::Matrix<vtkm::Float32, 4, 4> projview =
vtkm::MatrixMultiply(camera.CreateProjectionMatrix(width, height), camera.CreateViewMatrix());
bool valid;
vtkm::Matrix<vtkm::Float32, 4, 4> inverse = vtkm::MatrixInverse(projview, valid);
(void)valid; // this can be a false negative for really tiny spatial domains.
vtkm::worklet::DispatcherMapField<detail::RayMapCanvas>(
detail::RayMapCanvas(inverse, width, height, camera.GetPosition()))
.Invoke(rays.PixelIdx, rays.MaxDistance, rays.Origin, canvas.GetDepthBuffer());
2017-08-06 02:14:31 +00:00
}
}
}
} // vtkm::rendering::raytacing