VTK  9.3.20240419
Camera.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
3 #pragma once
4 
5 #include "../Types.h"
6 
7 #include "Object.h"
8 
9 #include <VisRTX.h>
10 #include <cassert>
11 #include <string>
12 
13 namespace RTW
14 {
15 VTK_ABI_NAMESPACE_BEGIN
16  class Camera : public Object
17  {
18  friend class Renderer;
19 
20  public:
22  {
23  VisRTX::Context* rtx = VisRTX_GetContext();
24 
25  if (type == "perspective")
26  this->camera = rtx->CreatePerspectiveCamera();
27  else if (type == "orthographic")
28  this->camera = rtx->CreateOrthographicCamera();
29  else
30  assert(false);
31  }
32 
34  {
35  this->camera->Release();
36  }
37 
38  void Commit() override
39  {
40  VisRTX::Vec3f pos;
41  if (this->GetVec3f({ "position" }, &pos))
42  {
43  this->camera->SetPosition(pos);
44  }
45 
46  VisRTX::Vec3f dir;
47  if (this->GetVec3f({ "direction" }, &dir))
48  {
49  this->camera->SetDirection(dir);
50  }
51 
52  VisRTX::Vec3f up;
53  if (this->GetVec3f({ "up" }, &up))
54  {
55  this->camera->SetUp(up);
56  }
57 
58  VisRTX::Vec2f imageBegin, imageEnd;
59  if (this->GetVec2f({ "imageStart" }, &imageBegin) && this->GetVec2f({ "imageEnd" }, &imageEnd))
60  {
61  this->camera->SetImageRegion(imageBegin, imageEnd);
62  }
63 
64  if (this->camera->GetType() == VisRTX::CameraType::PERSPECTIVE)
65  {
66  VisRTX::PerspectiveCamera* pc = dynamic_cast<VisRTX::PerspectiveCamera*>(this->camera);
67 
68  float fovy;
69  if (this->GetFloat({ "fovy" }, &fovy))
70  {
71  pc->SetFovY(fovy);
72  }
73 
74  float aspect;
75  if (this->GetFloat({ "aspect" }, &aspect))
76  {
77  pc->SetAspect(aspect);
78  }
79 
80  float focalDistance;
81  if (this->GetFloat({ "focusDistance" }, &focalDistance))
82  {
83  pc->SetFocalDistance(focalDistance);
84  }
85 
86  float apertureRadius;
87  if (this->GetFloat({ "apertureRadius" }, &apertureRadius))
88  {
89  pc->SetApertureRadius(apertureRadius);
90  }
91  }
92 
93  else if (this->camera->GetType() == VisRTX::CameraType::ORTHOGRAPHIC)
94  {
95  VisRTX::OrthographicCamera* oc = dynamic_cast<VisRTX::OrthographicCamera*>(this->camera);
96 
97  float height;
98  if (this->GetFloat({ "height" }, &height))
99  {
100  oc->SetHeight(height);
101  }
102 
103  float aspect;
104  if (this->GetFloat({ "aspect" }, &aspect))
105  {
106  oc->SetAspect(aspect);
107  }
108  }
109 
110  else
111  {
112  assert(false);
113  }
114  }
115 
116  private:
117  VisRTX::Camera* camera = nullptr;
118  };
119 VTK_ABI_NAMESPACE_END
120 }
@ RTW_CAMERA
Definition: Types.h:139
void Commit() override
Definition: Camera.h:38
~Camera()
Definition: Camera.h:33
Camera(const std::string &type)
Definition: Camera.h:21
VisRTX::Vec2f GetVec2f(const std::vector< std::string > &ids, const VisRTX::Vec2f &defaultValue=VisRTX::Vec2f(), bool *found=nullptr) const
Definition: Object.h:170
float GetFloat(const std::vector< std::string > &ids, float defaultValue=0.0f, bool *found=nullptr) const
Definition: Object.h:136
VisRTX::Vec3f GetVec3f(const std::vector< std::string > &ids, const VisRTX::Vec3f &defaultValue=VisRTX::Vec3f(), bool *found=nullptr) const
Definition: Object.h:204
Definition: Backend.h:8
@ dir
Definition: vtkX3D.h:324
@ type
Definition: vtkX3D.h:516
@ height
Definition: vtkX3D.h:254
@ string
Definition: vtkX3D.h:490