Loading [MathJax]/extensions/tex2jax.js
ProtoTracer  1.0
Real-time 3D rendering and animation engine
All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros Pages
Camera.tpp
Go to the documentation of this file.
1#pragma once
2
3#include <Arduino.h>
4
5template<size_t pixelCount>
6Camera<pixelCount>::Camera(Transform* transform, PixelGroup<pixelCount>* pixelGroup) {
7 this->transform = transform;
8 this->pixelGroup = pixelGroup;
9
10 Set2D(true);
11}
12
13template<size_t pixelCount>
14Camera<pixelCount>::Camera(Transform* transform, CameraLayout* cameraLayout, PixelGroup<pixelCount>* pixelGroup) {
15 this->transform = transform;
16 this->pixelGroup = pixelGroup;
17 this->cameraLayout = cameraLayout;
18
19 transform->SetBaseRotation(cameraLayout->GetRotation());
20
21 Set2D(false);
22}
23
24template<size_t pixelCount>
25PixelGroup<pixelCount>* Camera<pixelCount>::GetPixelGroup() {
26 return pixelGroup;
27}
28
29template<size_t pixelCount>
30Vector2D Camera<pixelCount>::GetCameraMinCoordinate() {
31 if(!calculatedMin){
32 for(uint16_t i = 0; i < pixelGroup->GetPixelCount(); i++){
33 minC.X = pixelGroup->GetCoordinate(i).X < minC.X ? pixelGroup->GetCoordinate(i).X : minC.X;
34 minC.Y = pixelGroup->GetCoordinate(i).Y < minC.Y ? pixelGroup->GetCoordinate(i).Y : minC.Y;
35 }
36
37 calculatedMin = true;
38 }
39
40 return minC;
41}
42
43template<size_t pixelCount>
44Vector2D Camera<pixelCount>::GetCameraMaxCoordinate() {
45 if(!calculatedMax){
46 for(uint16_t i = 0; i < pixelGroup->GetPixelCount(); i++){
47 maxC.X = pixelGroup->GetCoordinate(i).X > maxC.X ? pixelGroup->GetCoordinate(i).X : maxC.X;
48 maxC.Y = pixelGroup->GetCoordinate(i).Y > maxC.Y ? pixelGroup->GetCoordinate(i).Y : maxC.Y;
49 }
50
51 calculatedMax = true;
52 }
53
54 return maxC;
55}
56
57template<size_t pixelCount>
58Vector2D Camera<pixelCount>::GetCameraCenterCoordinate() {
59 return (GetCameraMinCoordinate() + GetCameraMaxCoordinate()) / 2.0f;
60}
61
62template<size_t pixelCount>
63Vector3D Camera<pixelCount>::GetCameraTransformMin() {
64 Vector2D minV2 = GetCameraMinCoordinate();
65
66 return transform->GetRotation().RotateVector(Vector3D(minV2.X, minV2.Y, 0) * transform->GetScale()) + transform->GetPosition();
67}
68
69template<size_t pixelCount>
70Vector3D Camera<pixelCount>::GetCameraTransformMax() {
71 Vector2D maxV2 = GetCameraMaxCoordinate();
72
73 return transform->GetRotation().RotateVector(Vector3D(maxV2.X, maxV2.Y, 0) * transform->GetScale()) + transform->GetPosition();
74}
75
76template<size_t pixelCount>
77Vector3D Camera<pixelCount>::GetCameraTransformCenter() {
78 return (GetCameraTransformMin() + GetCameraTransformMax()) / 2.0f;
79}