Thu, 27 Feb 2020 11:56:41 +0200
use glm::unProject to implement screenToModelCoordinates
17 | 1 | #pragma once |
2 | #include <QOpenGLWidget> | |
3 | #include <QOpenGLFunctions> | |
4 | #include <QQuaternion> | |
26 | 5 | #include <QOpenGLVertexArrayObject> |
6 | #include <QOpenGLBuffer> | |
7 | #include <QOpenGLShader> | |
8 | #include <QOpenGLShaderProgram> | |
28 | 9 | #include <glm/glm.hpp> |
17 | 10 | #include "main.h" |
18 | 11 | #include "gl/common.h" |
21 | 12 | #include "gl/compiler.h" |
53 | 13 | #include "gl/gridprogram.h" |
17 | 14 | |
15 | class PartRenderer : public QOpenGLWidget, protected QOpenGLFunctions | |
16 | { | |
21 | 17 | Q_OBJECT |
17 | 18 | public: |
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
19 | PartRenderer( |
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
20 | Model* model, |
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
21 | DocumentManager* documents, |
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
22 | const ldraw::ColorTable& colorTable, |
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
23 | QWidget* parent = nullptr); |
26 | 24 | ~PartRenderer() override; |
39
caac957e9834
Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents:
37
diff
changeset
|
25 | void setRenderPreferences(const gl::RenderPreferences& newPreferences); |
56
fad4a5dd8dee
PartRenderer::modelToScreenCoordinates FINALLY WORKS
Teemu Piippo <teemu@hecknology.net>
parents:
55
diff
changeset
|
26 | static glm::vec3 viewport(const glm::vec3& point, float width, float height); |
57
5c0005f63319
use glm::unProject to implement screenToModelCoordinates
Teemu Piippo <teemu@hecknology.net>
parents:
56
diff
changeset
|
27 | static glm::vec3 antiviewport(const glm::vec3& point, float width, float height); |
17 | 28 | protected: |
47 | 29 | ldraw::Id pick(const QPoint& where); |
17 | 30 | void initializeGL() override; |
31 | void resizeGL(int width, int height) override; | |
32 | void paintGL() override; | |
33 | void mouseMoveEvent(QMouseEvent* event) override; | |
31
b6df269a2c6b
fix remaining rendering control issues
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
34 | void wheelEvent(QWheelEvent* event) override; |
56
fad4a5dd8dee
PartRenderer::modelToScreenCoordinates FINALLY WORKS
Teemu Piippo <teemu@hecknology.net>
parents:
55
diff
changeset
|
35 | glm::vec3 viewport(const glm::vec3& point); |
51 | 36 | Model* const model; |
37 | DocumentManager* const documents; | |
38 | const ldraw::ColorTable& colorTable; | |
39 | gl::Compiler* const compiler; | |
40 | ldraw::Id highlighted = ldraw::NULL_ID; | |
56
fad4a5dd8dee
PartRenderer::modelToScreenCoordinates FINALLY WORKS
Teemu Piippo <teemu@hecknology.net>
parents:
55
diff
changeset
|
41 | std::optional<glm::vec3> screenToModelCoordinates(const QPoint& point); |
fad4a5dd8dee
PartRenderer::modelToScreenCoordinates FINALLY WORKS
Teemu Piippo <teemu@hecknology.net>
parents:
55
diff
changeset
|
42 | QPointF modelToScreenCoordinates(const glm::vec3& point); |
57
5c0005f63319
use glm::unProject to implement screenToModelCoordinates
Teemu Piippo <teemu@hecknology.net>
parents:
56
diff
changeset
|
43 | glm::vec3 unproject(const glm::vec3& win); |
17 | 44 | private: |
37 | 45 | void setFragmentStyle(gl::FragmentStyle fragStyle); |
46 | void renderAllArrays(); | |
22
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
47 | void renderScene(); |
31
b6df269a2c6b
fix remaining rendering control issues
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
48 | void updateViewMatrix(); |
55 | 49 | void updateModelMatrix(); |
50 | void setupBackgroundColor(); | |
17 | 51 | QPointF lastMousePosition; |
39
caac957e9834
Main color is now configurable
Teemu Piippo <teemu@hecknology.net>
parents:
37
diff
changeset
|
52 | gl::RenderPreferences renderPreferences; |
28 | 53 | glm::mat4 projectionMatrix; |
54 | glm::mat4 viewMatrix; | |
57
5c0005f63319
use glm::unProject to implement screenToModelCoordinates
Teemu Piippo <teemu@hecknology.net>
parents:
56
diff
changeset
|
55 | glm::vec4 viewportVector; |
31
b6df269a2c6b
fix remaining rendering control issues
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
56 | glm::quat modelQuaternion; |
53 | 57 | std::optional<GridProgram> gridProgram; |
31
b6df269a2c6b
fix remaining rendering control issues
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
58 | static constexpr double MIN_ZOOM = 0.0; |
b6df269a2c6b
fix remaining rendering control issues
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
59 | static constexpr double MAX_ZOOM = 3.0; |
b6df269a2c6b
fix remaining rendering control issues
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
60 | double zoom = 1.0; |
22
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
61 | bool initialized = false; |
26 | 62 | void renderVao(const gl::ArrayClass arrayClass); |
63 | void checkForGLErrors(); | |
17 | 64 | }; |