AnimEngine
BoundingBox.hpp
1 #pragma once
2 #ifndef _BOUNDING_BOX_HPP_
3 #define _BOUNDING_BOX_HPP_
4 #include <glm/glm.hpp>
5 #include <memory>
6 #include <array>
7 #include "../util/Program.h"
8 #include "OOOGL/GLobjects/VertexArrayObject.hpp"
9 #include "OOOGL/GLobjects/Buffers.hpp"
10 #include "components/inheritable/drawable.hpp"
11 
12 /* TODO: Update to OOOGL */
13 
15  public:
16  BoundingBox(const glm::vec3& min_point, const glm::vec3& max_point) : min_point(min_point), max_point(max_point) {}
17  virtual ~BoundingBox(){}
18  virtual void draw(const MVPset& MVP, Program* shader = nullptr) override;
19  virtual bool canOverrideShader() const override {return(false);}
20  virtual bool requiesOverrideShader() const {return(false);}
21  const glm::vec3 min_point;
22  const glm::vec3 max_point;
23 
24  private:
25  static std::shared_ptr<Program> _control_point_program;
26  static GLuint _box_vao;
27  static GLuint _box_vbo;
28  static GLuint _box_elements;
29  static GLsizei _box_element_count;
30 
31 
32  static void _init_static_draw_assets_();
33  static bool _static_draw_ready_;
34 };
35 
36 class DeformationBox : public BoundingBox{
37  public:
38  DeformationBox(const glm::vec3& min_point, const glm::vec3& max_point);
39  DeformationBox(const BoundingBox& bbox) : DeformationBox(bbox.min_point, bbox.max_point) {}
40  virtual ~DeformationBox(){}
41 
42  virtual void draw(const MVPset& MVP, Program* shader = nullptr) override;
43  const std::array<glm::vec3, 8>& getControlPoints() const {return(control_points);}
44  const glm::vec3& getControlPoint(size_t index) const;
45  void setControlPoint(size_t index, const glm::vec3& location);
46  void setHighlight(size_t index, bool highlight) {highlights[index%8] = highlight ? 1.0f : 0.0f;}
47  void clearHighlight() {for(float& f : highlights){f = 0.0f;}}
48  void reset() {control_points = original_points; updateDrawAssets();}
49 
50  protected:
51  void computeInitialControlPoints();
52  void initDrawAssets();
53  void updateDrawAssets();
54 
55  std::array<glm::vec3, 8> control_points;
56  std::array<glm::vec3, 8> original_points;
57  std::array<float, 8> highlights = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
58 
59  private:
60  GLuint cage_vao = 0;
61  GLuint cage_vertices = 0;
62 
63  static std::shared_ptr<Program> _control_point_program;
64  static GLuint _cage_elements;
65  static void _init_static_draw_assets_();
66  static bool _static_draw_ready_;
67 };
68 
69 
70 
71 #endif
Definition: Program.h:15
Definition: BoundingBox.hpp:14
Definition: drawable.hpp:8
Definition: BoundingBox.hpp:36
Definition: drawable.hpp:14