TiagoMSSantos/MobileRT

View on GitHub
app/Components/Cameras/Orthographic.cpp

Summary

Maintainability
Test Coverage
#include "Components/Cameras/Orthographic.hpp"

using ::Components::Orthographic;
using ::MobileRT::AABB;
using ::MobileRT::Ray;

Orthographic::Orthographic(
    const ::glm::vec3 &position, const ::glm::vec3 &lookAt, const ::glm::vec3 &up,
    const float sizeH, const float sizeV) :
        Camera {position, lookAt, up},
        sizeH_ {sizeH / 2.0F},
        sizeV_ {sizeV / 2.0F} {
}

Ray Orthographic::generateRay(const float u, const float v,
                              const float deviationU, const float deviationV) const {
    const float rightFactor {(u - 0.5F) * this->sizeH_};
    const ::glm::vec3 &right {this->right_ * rightFactor + this->right_ * deviationU};
    const float upFactor {(0.5F - v) * this->sizeV_};
    const ::glm::vec3 &up {this->up_ * upFactor + this->up_ * deviationV};
    const Ray ray {this->direction_, this->position_ + right + up, 1, false};
    return ray;
}

AABB Orthographic::getAABB() const {
    const ::glm::vec3 &min {
        this->position_ +
        this->right_ * (0.0F - 0.5F) * this->sizeH_ + this->right_ * -0.5F +
        this->up_ * (0.5F - 0.0F) * this->sizeV_ + this->up_ * -0.5F
    };
    const ::glm::vec3 &max {
        this->position_ +
        this->right_ * (1.0F - 0.5F) * this->sizeH_ + this->right_ * 0.5F +
        this->up_ * (0.5F - 1.0F) * this->sizeV_ + this->up_ * 0.5F
    };
    const AABB res {min, max};
    return res;
}

float Orthographic::getSizeH() const {
    return this->sizeH_;
}

float Orthographic::getSizeV() const {
    return this->sizeV_;
}