VTK: Rendering/RayTracing/RTWrapper/VisRTX/Camera.h Source File

| VTK 9.3.1

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:
21 Camera(const std::string& type) : Object(RTW_CAMERA)
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
33 ~Camera()
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 }
Object.h
RTW_CAMERA
@ RTW_CAMERA
Definition: Types.h:139
RTW::Camera
Definition: Camera.h:17
RTW::Camera::Commit
void Commit() override
Definition: Camera.h:38
RTW::Camera::~Camera
~Camera()
Definition: Camera.h:33
RTW::Camera::Camera
Camera(const std::string &type)
Definition: Camera.h:21
RTW::Object
Definition: Object.h:22
RTW::Object::GetVec2f
VisRTX::Vec2f GetVec2f(const std::vector< std::string > &ids, const VisRTX::Vec2f &defaultValue=VisRTX::Vec2f(), bool *found=nullptr) const
Definition: Object.h:170
RTW::Object::GetFloat
float GetFloat(const std::vector< std::string > &ids, float defaultValue=0.0f, bool *found=nullptr) const
Definition: Object.h:136
RTW::Object::GetVec3f
VisRTX::Vec3f GetVec3f(const std::vector< std::string > &ids, const VisRTX::Vec3f &defaultValue=VisRTX::Vec3f(), bool *found=nullptr) const
Definition: Object.h:204
RTW::Renderer
Definition: Renderer.h:23
RTW
Definition: Backend.h:8
vtkX3D::dir
@ dir
Definition: vtkX3D.h:324
vtkX3D::type
@ type
Definition: vtkX3D.h:516
vtkX3D::height
@ height
Definition: vtkX3D.h:254
vtkX3D::string
@ string
Definition: vtkX3D.h:490