37 lines
1.1 KiB
C++
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
|