diff options
author | github-classroom[bot] <66690702+github-classroom[bot]@users.noreply.github.com> | 2024-03-19 02:01:17 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-19 02:01:17 +0000 |
commit | 0f8d0e3cfdbd9b11b2357ed3e1a11375e7af8e80 (patch) | |
tree | 48b88b3b3b3a522a90c38b2178363a163a32f2ee /src/glwidget.h |
Initial commit
Diffstat (limited to 'src/glwidget.h')
-rwxr-xr-x | src/glwidget.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/glwidget.h b/src/glwidget.h new file mode 100755 index 0000000..b319756 --- /dev/null +++ b/src/glwidget.h @@ -0,0 +1,72 @@ +#pragma once + +#ifdef __APPLE__ +#define GL_SILENCE_DEPRECATION +#endif + +#include "arap.h" +#include "graphics/camera.h" +#include "graphics/shader.h" + +#include <QOpenGLWidget> +#include <QElapsedTimer> +#include <QTimer> +#include <memory> + +class GLWidget : public QOpenGLWidget +{ + Q_OBJECT + +public: + GLWidget(QWidget *parent = nullptr); + ~GLWidget(); + +private: + static const int FRAMES_TO_AVERAGE = 30; + + Eigen::Vector3f transformToWorldRay(int x, int y); + + // Basic OpenGL Overrides + void initializeGL() override; + void paintGL() override; + void resizeGL(int w, int h) override; + + // Event Listeners + void mousePressEvent (QMouseEvent *event) override; + void mouseMoveEvent (QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void wheelEvent (QWheelEvent *event) override; + void keyPressEvent (QKeyEvent *event) override; + void keyReleaseEvent (QKeyEvent *event) override; + +private slots: + // Physics Tick + void tick(); + +private: + ARAP m_arap; + Camera m_camera; + Shader *m_defaultShader; + Shader *m_pointShader; + + float m_movementScaling; + float m_vertexSelectionThreshold; + float m_vSize; + + // Timing + QElapsedTimer m_deltaTimeProvider; // For measuring elapsed time + QTimer m_intervalTimer; // For triggering timed events + + // Movement + int m_forward; + int m_sideways; + int m_vertical; + + // Mouse handler stuff + int m_lastX; + int m_lastY; + bool m_leftCapture; + bool m_rightCapture; + SelectMode m_rightClickSelectMode; + int m_lastSelectedVertex = -1; +}; |