src/gl/partrenderer.h

changeset 61
4585d8d7a7ec
parent 58
b7841cd31fb7
child 66
77c819262b7a
equal deleted inserted replaced
60:0f221121849b 61:4585d8d7a7ec
8 #include <QOpenGLShaderProgram> 8 #include <QOpenGLShaderProgram>
9 #include <glm/glm.hpp> 9 #include <glm/glm.hpp>
10 #include "main.h" 10 #include "main.h"
11 #include "gl/common.h" 11 #include "gl/common.h"
12 #include "gl/compiler.h" 12 #include "gl/compiler.h"
13 #include "gl/gridprogram.h"
14 13
15 class PartRenderer : public QOpenGLWidget, protected QOpenGLFunctions 14 class PartRenderer : public QOpenGLWidget, protected QOpenGLFunctions
16 { 15 {
17 Q_OBJECT 16 Q_OBJECT
18 public: 17 public:
21 DocumentManager* documents, 20 DocumentManager* documents,
22 const ldraw::ColorTable& colorTable, 21 const ldraw::ColorTable& colorTable,
23 QWidget* parent = nullptr); 22 QWidget* parent = nullptr);
24 ~PartRenderer() override; 23 ~PartRenderer() override;
25 void setRenderPreferences(const gl::RenderPreferences& newPreferences); 24 void setRenderPreferences(const gl::RenderPreferences& newPreferences);
26 static glm::vec3 viewport(const glm::vec3& point, float width, float height);
27 static glm::vec3 antiviewport(const glm::vec3& point, float width, float height);
28 protected: 25 protected:
29 ldraw::Id pick(const QPoint& where); 26 ldraw::Id pick(const QPoint& where);
30 void initializeGL() override; 27 void initializeGL() override;
31 void resizeGL(int width, int height) override; 28 void resizeGL(int width, int height) override;
32 void paintGL() override; 29 void paintGL() override;
33 void mouseMoveEvent(QMouseEvent* event) override; 30 void mouseMoveEvent(QMouseEvent* event) override;
34 void wheelEvent(QWheelEvent* event) override; 31 void wheelEvent(QWheelEvent* event) override;
35 glm::vec3 viewport(const glm::vec3& point);
36 Model* const model; 32 Model* const model;
37 DocumentManager* const documents; 33 DocumentManager* const documents;
38 const ldraw::ColorTable& colorTable; 34 const ldraw::ColorTable& colorTable;
39 gl::Compiler* const compiler; 35 gl::Compiler* const compiler;
40 ldraw::Id highlighted = ldraw::NULL_ID; 36 ldraw::Id highlighted = ldraw::NULL_ID;
41 std::optional<glm::vec3> screenToModelCoordinates(const QPoint& point, const geom::Plane& plane); 37 std::optional<glm::vec3> screenToModelCoordinates(const QPoint& point, const geom::Plane& plane);
42 QPointF modelToScreenCoordinates(const glm::vec3& point); 38 QPointF modelToScreenCoordinates(const glm::vec3& point);
43 glm::vec3 unproject(const glm::vec3& win); 39 glm::vec3 unproject(const glm::vec3& win);
40 glm::mat4 projectionMatrix;
41 glm::mat4 viewMatrix;
42 glm::mat4 modelMatrix;
43 glm::vec4 viewportVector;
44 glm::quat modelQuaternion;
45 QPoint lastMousePosition;
46 gl::RenderPreferences renderPreferences;
47 signals:
48 void projectionMatrixChanged();
49 void modelMatrixChanged();
50 void viewMatrixChanged();
51 void renderPreferencesChanged();
44 private: 52 private:
45 void setFragmentStyle(gl::FragmentStyle fragStyle); 53 void setFragmentStyle(gl::FragmentStyle fragStyle);
46 void renderAllArrays(); 54 void renderAllArrays();
47 void renderScene(); 55 void renderScene();
48 void updateViewMatrix(); 56 void updateViewMatrix();
49 void updateModelMatrix(); 57 void updateModelMatrix();
50 void setupBackgroundColor(); 58 void setupBackgroundColor();
51 QPointF lastMousePosition;
52 gl::RenderPreferences renderPreferences;
53 glm::mat4 projectionMatrix;
54 glm::mat4 viewMatrix;
55 glm::vec4 viewportVector;
56 glm::quat modelQuaternion;
57 std::optional<GridProgram> gridProgram;
58 static constexpr double MIN_ZOOM = 0.0; 59 static constexpr double MIN_ZOOM = 0.0;
59 static constexpr double MAX_ZOOM = 3.0; 60 static constexpr double MAX_ZOOM = 3.0;
60 double zoom = 1.0; 61 double zoom = 1.0;
61 bool initialized = false; 62 bool initialized = false;
62 void renderVao(const gl::ArrayClass arrayClass); 63 void renderVao(const gl::ArrayClass arrayClass);

mercurial