terrain-gen/src/glwidget.cpp

70 lines
1.4 KiB
C++

#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
m_terrain = new Terrain();
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(40);
}
GLWidget::~GLWidget()
{
delete m_terrain;
}
Terrain *GLWidget::terrain() const
{
return m_terrain;
}
void GLWidget::initializeGL()
{
initializeOpenGLFunctions();
glClearColor(.0, .0, .0, 1.);
m_terrain->initGl();
}
void GLWidget::paintGL()
{
m_terrain->render(defaultFramebufferObject());
}
void GLWidget::resizeGL(int width, int height)
{
m_terrain->setViewPort(width, height);
}
void GLWidget::mousePressEvent(QMouseEvent *event)
{
m_lastMousePosition = event->pos();
}
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
float dy = event->y() - m_lastMousePosition.y();
float dx = event->x() - m_lastMousePosition.x();
if (event->buttons() & Qt::LeftButton) {
float deltaXAngle = dy / 300.0f;
float deltaYAngle = dx / 300.0f;
m_terrain->camera()->rotateAroundX(deltaXAngle);
m_terrain->camera()->rotateAroundY(deltaYAngle);
} else if (event->buttons() & Qt::MiddleButton) {
m_terrain->camera()->moveX(-dx / 200.f);
m_terrain->camera()->moveY(dy / 200.f);
}
m_lastMousePosition = event->pos();
}
void GLWidget::wheelEvent(QWheelEvent *event)
{
float delta = event->delta() / 120;
m_terrain->camera()->moveZ(delta);
}