#include "InfinitePlane.h" #include "RenderObject.h" #include raytry::InfinitePlane::InfinitePlane() : zLevel{0.0f}, normalVec{0.0, 0.0, 1.0} {} raytry::InfinitePlane::InfinitePlane(float zLevel, QVector3D normalVec) : zLevel{zLevel}, normalVec{normalVec} {} std::optional raytry::InfinitePlane::intersects(const Ray &ray) const { auto normalDotDir = QVector3D::dotProduct(normalVec, ray.directionVec); if (qFuzzyIsNull(normalDotDir)) { return std::nullopt; } auto t = (-QVector3D::dotProduct(normalVec, ray.originVec) - zLevel) / normalDotDir; if (t < RenderObject::nearCrop) { return std::nullopt; } else { return std::make_optional(t); } } raytry::RenderMaterial raytry::InfinitePlane::material() const { return {{240, 240, 240}}; } QVector3D raytry::InfinitePlane::calculateNormal(QVector3D hitpoint) const { return normalVec; }