accelerated-raytracer/src/Triangle.h

37 lines
1.1 KiB
C++

#ifndef RAYTRYCPP_TRIANGLE_H
#define RAYTRYCPP_TRIANGLE_H
#include "RenderObject.h"
namespace raytry {
class Triangle : public RenderObject {
public:
Triangle() = default;
Triangle(QVector3D a, QVector3D b, QVector3D c);
Triangle(const QVector3D &a, const QVector3D &b, const QVector3D &c, const QVector3D &an, const QVector3D &bn, const QVector3D &cn, const RenderMaterial &mat);
~Triangle() override = default;
[[nodiscard]] std::optional<float> intersects(const Ray &ray) const override;
[[nodiscard]] RenderMaterial material() const override;
[[nodiscard]] QVector3D calculateNormal(QVector3D hitpoint) const override;
void setMaterial(RenderMaterial mat);
[[nodiscard]] const QVector3D& aVec() const;
[[nodiscard]] const QVector3D& bVec() const;
[[nodiscard]] const QVector3D& cVec() const;
private:
QVector3D a;
QVector3D b;
QVector3D c;
QVector3D an;
QVector3D bn;
QVector3D cn;
RenderMaterial mat{RenderObject::material()};
};
}// namespace raytry
#endif//RAYTRYCPP_TRIANGLE_H