vtk-m/vtkm/rendering/raytracing/Camera.h

160 lines
3.8 KiB
C
Raw Normal View History

2016-01-20 22:40:54 +00:00
//============================================================================
// Copyright (c) Kitware, Inc.
// All rights reserved.
// See LICENSE.txt for details.
2019-04-15 23:24:21 +00:00
//
2016-01-20 22:40:54 +00:00
// 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.
//============================================================================
#ifndef vtk_m_rendering_raytracing_Camera_h
#define vtk_m_rendering_raytracing_Camera_h
#include <vtkm/cont/CoordinateSystem.h>
2016-06-02 19:04:01 +00:00
#include <vtkm/rendering/Camera.h>
#include <vtkm/rendering/CanvasRayTracer.h>
2016-01-20 22:40:54 +00:00
#include <vtkm/rendering/raytracing/Ray.h>
2016-05-18 05:13:36 +00:00
2017-05-18 14:29:41 +00:00
namespace vtkm
{
namespace rendering
{
namespace raytracing
{
class VTKM_RENDERING_EXPORT Camera
2016-01-20 22:40:54 +00:00
{
2016-01-20 22:40:54 +00:00
private:
struct PixelDataFunctor;
vtkm::rendering::CanvasRayTracer Canvas;
2017-05-18 14:29:41 +00:00
vtkm::Int32 Height;
vtkm::Int32 Width;
vtkm::Int32 SubsetWidth;
vtkm::Int32 SubsetHeight;
vtkm::Int32 SubsetMinX;
vtkm::Int32 SubsetMinY;
2016-01-20 22:40:54 +00:00
vtkm::Float32 FovX;
vtkm::Float32 FovY;
vtkm::Float32 Zoom;
2017-05-18 14:29:41 +00:00
bool IsViewDirty;
2016-01-20 22:40:54 +00:00
2017-05-18 14:29:41 +00:00
vtkm::Vec<vtkm::Float32, 3> Look;
vtkm::Vec<vtkm::Float32, 3> Up;
vtkm::Vec<vtkm::Float32, 3> LookAt;
vtkm::Vec<vtkm::Float32, 3> Position;
2016-06-02 19:04:01 +00:00
vtkm::rendering::Camera CameraView;
2017-05-18 14:29:41 +00:00
vtkm::Matrix<vtkm::Float32, 4, 4> ViewProjectionMat;
2016-05-18 05:13:36 +00:00
2016-01-20 22:40:54 +00:00
public:
VTKM_CONT
Camera();
2016-05-18 05:13:36 +00:00
VTKM_CONT
~Camera();
// cuda does not compile if this is private
class PerspectiveRayGen;
class Ortho2DRayGen;
std::string ToString();
2016-01-20 22:40:54 +00:00
VTKM_CONT
2017-05-18 14:29:41 +00:00
void SetParameters(const vtkm::rendering::Camera& camera,
vtkm::rendering::CanvasRayTracer& canvas);
2016-01-20 22:40:54 +00:00
VTKM_CONT
void SetHeight(const vtkm::Int32& height);
2016-01-20 22:40:54 +00:00
VTKM_CONT
void WriteSettingsToLog();
2016-01-20 22:40:54 +00:00
VTKM_CONT
vtkm::Int32 GetHeight() const;
VTKM_CONT
void SetWidth(const vtkm::Int32& width);
VTKM_CONT
vtkm::Int32 GetWidth() const;
2016-01-20 22:40:54 +00:00
VTKM_CONT
vtkm::Int32 GetSubsetWidth() const;
2016-01-20 22:40:54 +00:00
VTKM_CONT
vtkm::Int32 GetSubsetHeight() const;
2016-01-20 22:40:54 +00:00
VTKM_CONT
void SetZoom(const vtkm::Float32& zoom);
2016-01-20 22:40:54 +00:00
VTKM_CONT
vtkm::Float32 GetZoom() const;
2016-01-20 22:40:54 +00:00
VTKM_CONT
void SetFieldOfView(const vtkm::Float32& degrees);
2016-01-20 22:40:54 +00:00
VTKM_CONT
vtkm::Float32 GetFieldOfView() const;
2016-01-20 22:40:54 +00:00
VTKM_CONT
void SetUp(const vtkm::Vec<vtkm::Float32, 3>& up);
2016-01-20 22:40:54 +00:00
VTKM_CONT
void SetPosition(const vtkm::Vec<vtkm::Float32, 3>& position);
2016-01-20 22:40:54 +00:00
VTKM_CONT
vtkm::Vec<vtkm::Float32, 3> GetPosition() const;
2016-01-20 22:40:54 +00:00
VTKM_CONT
vtkm::Vec<vtkm::Float32, 3> GetUp() const;
2016-01-20 22:40:54 +00:00
VTKM_CONT
void SetLookAt(const vtkm::Vec<vtkm::Float32, 3>& lookAt);
2016-01-20 22:40:54 +00:00
VTKM_CONT
vtkm::Vec<vtkm::Float32, 3> GetLookAt() const;
2016-05-18 05:13:36 +00:00
VTKM_CONT
void ResetIsViewDirty();
2016-01-20 22:40:54 +00:00
2017-05-18 14:29:41 +00:00
VTKM_CONT
bool GetIsViewDirty() const;
2016-05-18 05:13:36 +00:00
VTKM_CONT
2018-09-11 02:25:42 +00:00
void CreateRays(Ray<vtkm::Float32>& rays, vtkm::Bounds bounds);
VTKM_CONT
2018-09-11 02:25:42 +00:00
void CreateRays(Ray<vtkm::Float64>& rays, vtkm::Bounds bounds);
2016-05-18 05:13:36 +00:00
VTKM_CONT
void GetPixelData(const vtkm::cont::CoordinateSystem& coords,
vtkm::Int32& activePixels,
vtkm::Float32& aveRayDistance);
2018-09-11 02:25:42 +00:00
template <typename Precision>
VTKM_CONT void CreateRaysImpl(Ray<Precision>& rays, const vtkm::Bounds boundingBox);
void CreateDebugRay(vtkm::Vec<vtkm::Int32, 2> pixel, Ray<vtkm::Float32>& rays);
void CreateDebugRay(vtkm::Vec<vtkm::Int32, 2> pixel, Ray<vtkm::Float64>& rays);
bool operator==(const Camera& other) const;
private:
template <typename Precision>
void CreateDebugRayImp(vtkm::Vec<vtkm::Int32, 2> pixel, Ray<Precision>& rays);
VTKM_CONT
void FindSubset(const vtkm::Bounds& bounds);
2018-09-11 02:25:42 +00:00
template <typename Precision>
VTKM_CONT void UpdateDimensions(Ray<Precision>& rays,
const vtkm::Bounds& boundingBox,
bool ortho2D);
2016-05-18 05:13:36 +00:00
2016-01-20 22:40:54 +00:00
}; // class camera
2017-05-18 14:29:41 +00:00
}
}
} //namespace vtkm::rendering::raytracing
#endif //vtk_m_rendering_raytracing_Camera_h