70 lines
1.4 KiB
C++
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);
|
|
}
|