Skip to content
Snippets Groups Projects
Group.h 971 B
Newer Older
Postea's avatar
Postea committed
#pragma once
Yoel's avatar
Yoel committed
#include <vector>

#include "../tools/Mat4.h"
#include "../tools/Transformation.h"
Postea's avatar
Postea committed
#include "Shape.h"
#include "ShapeSingleGroup.h"
Postea's avatar
Postea committed

namespace shapes {
class Group : public Shape {
Yoel's avatar
Yoel committed
   public:
	Group(const util::Transformation& trans, bool rebuildBB = true);
	Group(const util::Mat4& matrix, bool rebuildBB = true);
Postea's avatar
Postea committed

Yoel's avatar
Yoel committed
	std::optional<cam::Hit> intersect(const cam::Ray& r) const override;
Yoel's avatar
Yoel committed
	virtual std::pair<float, float> texture_coordinates(
	    const util::Vec3& pos) const override;
	util::AxisAlignedBoundingBox bounds() const override;
	void setBounds(const util::AxisAlignedBoundingBox& bb);
	void add(const ShapeSingleGroup& group);
	// protected:
Yoel's avatar
Yoel committed
	void add(const std::shared_ptr<shapes::Shape>& shape);
Postea's avatar
Postea committed

	std::vector<std::shared_ptr<Shape>> shapeList;

Yoel's avatar
Yoel committed
   private:
	void rebuildBoundingVolume();

	util::AxisAlignedBoundingBox boundingVolume;
Yoel's avatar
Yoel committed
	util::Transformation transform;
Yoel's avatar
Yoel committed
}  // namespace shapes