diff options
author | Jakob Odersky <jodersky@gmail.com> | 2011-04-16 20:10:52 +0000 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2011-04-16 20:10:52 +0000 |
commit | 064e27d5e7bf451542cc89ee0a05a06447acdc88 (patch) | |
tree | 393bfcfd1ed8312d3805dbdaa48788a5090c8b32 | |
parent | 4e157e9aad9907807e6b9ae30a5d2f35cf643c15 (diff) | |
download | vhc-064e27d5e7bf451542cc89ee0a05a06447acdc88.tar.gz vhc-064e27d5e7bf451542cc89ee0a05a06447acdc88.tar.bz2 vhc-064e27d5e7bf451542cc89ee0a05a06447acdc88.zip |
Amelioration de l'interface grap graphique.
-rw-r--r-- | src/gui/Main.cc | 2 | ||||
-rw-r--r-- | src/gui/Makefile | 2 | ||||
-rw-r--r-- | src/gui/Stage.cc | 87 | ||||
-rw-r--r-- | src/gui/Stage.h | 5 |
4 files changed, 65 insertions, 31 deletions
diff --git a/src/gui/Main.cc b/src/gui/Main.cc index 003960f..ac9e7a5 100644 --- a/src/gui/Main.cc +++ b/src/gui/Main.cc @@ -70,7 +70,7 @@ int main(int argc, char *argv[]) vhc::Stage window; window.accelerator = &acc; - // window.showFullScreen(); + window.showFullScreen(); //window.resize(QSize(500, 500)); window.setWindowTitle("Virtual Hadron Collider"); diff --git a/src/gui/Makefile b/src/gui/Makefile index 1f6658e..e2266af 100644 --- a/src/gui/Makefile +++ b/src/gui/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: $(BINDIR)/gui/gui -# Generated by qmake (2.01a) (Qt 4.7.0) on: Sat Apr 16 18:07:54 2011 +# Generated by qmake (2.01a) (Qt 4.7.0) on: Sat Apr 16 22:07:50 2011 # Project: gui.pro # Template: app # Command: /usr/bin/qmake -o Makefile gui.pro diff --git a/src/gui/Stage.cc b/src/gui/Stage.cc index 6b5ec4a..c3b09fc 100644 --- a/src/gui/Stage.cc +++ b/src/gui/Stage.cc @@ -16,22 +16,22 @@ Stage::Stage(QWidget* parent): QGLWidget (parent), accelerator(NULL), camera(), - elementRenderer(new ElementRenderer), + elementRenderer(), particleRenderer(), displayMode(FILL), - keys(0) { + keys(0), + frameTime(0) { timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(foo())); - timer->start(1); + connect(timer, SIGNAL(timeout()), this, SLOT(update())); + timer->start(1.0/60); setMouseTracking(true); } Stage::~Stage() { - delete elementRenderer; elementRenderer = NULL; delete timer; timer = NULL; }; @@ -43,32 +43,34 @@ void Stage::initializeGL () { } void Stage::resizeGL (int width, int height) { - setCursor(QCursor(Qt::CrossCursor)); + setCursor(QCursor(Qt::BlankCursor)); + center = QPoint(width / 2, height / 2); glViewport (0, 0, width, height); glMatrixMode (GL_PROJECTION); glLoadIdentity(); - gluPerspective(65.0, 1.0 * width / height, 0.1, 100.0); + gluPerspective(65.0, 1.0 * width / height, 0.01, 100.0); glMatrixMode (GL_MODELVIEW); } void Stage::paintGL() { + //time.start(); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); camera.setView(); - renderText(0,12,QString("camera coordinates:") + camera.getPosition().toString().c_str()); + renderText(0,12,QString("fps: ") + QString::number(1E3 / frameTime)); + renderText(0,24,QString("camera coordinates: ") + camera.getPosition().toString().c_str()); + renderText(0,36,QString("heading: ") + QString::number(camera.getHeading())); + renderText(0,48,QString("pitch: ") + QString::number(camera.getPitch())); axes(); + glPushMatrix(); glScaled(10, 10, 10); glColor3d(0.5, 0.5, 0.5); grid(20); glPopMatrix(); - - center = QWidget::mapToGlobal(QPoint(this->size().width() / 2, this->size().height() / 2)); - QCursor::setPos(center); - // glScaled (100.0, 100.0, 100.0); @@ -94,7 +96,7 @@ void Stage::paintGL() { glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); for (unsigned int i = 0; i < accelerator->getElements().size(); ++i) { - accelerator->getElements()[i]->accept(*elementRenderer); + elementRenderer.render(*(accelerator->getElements()[i])); } glEnable(GL_DEPTH_TEST); glDisable(GL_BLEND); @@ -105,20 +107,59 @@ void Stage::paintGL() { } } + if (keys != 0) { + double dt = frameTime; + double s = 0.002; + Vector3D mv = Vector3D::Null; + if (keys & 1) mv = mv - Vector3D::j * dt * s; + if (keys & 2) mv = mv - Vector3D::i * dt * s; + if (keys & 4) mv = mv + Vector3D::j * dt * s; + if (keys & 8) mv = mv + Vector3D::i * dt * s; + if (keys & 16) mv = mv + Vector3D::k * dt * s; + if (keys & 32) mv = mv - Vector3D::k * dt * s; + camera.move(mv); + } + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + double vp[4]; + glGetDoublev(GL_VIEWPORT, vp); + glOrtho(vp[0], vp[1], vp[2], vp[3],-1,1); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + glColor3d(1,1,0); + + glBegin(GL_LINES); + glVertex3d(-0.01, 0,0); + glVertex3d(0.01, 0, 0); + glVertex3d(0,-0.01,0); + glVertex3d(0, 0.01, 0); + glEnd(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + + frameTime = time.restart(); } + void Stage::mouseMoveEvent(QMouseEvent* event) { - int dheading = -QCursor::pos().x() + center.x(); - int dpitch = -QCursor::pos().y() + center.y(); - camera.addHeading(1.0 * dheading / 200); - camera.addPitch(1.0 * dpitch / 200); + int dheading = -event->x() + center.x(); + int dpitch = -event->y() + center.y(); + camera.addHeading(1.0 * dheading * frameTime / 4000); + camera.addPitch(1.0 * dpitch * frameTime / 4000); + QCursor::setPos(center); update(); } void Stage::keyPressEvent (QKeyEvent* event) { - Vector3D mv = Vector3D::Null; switch (event->key()) { case Qt::Key_Escape: qApp->quit(); @@ -167,16 +208,6 @@ void Stage::keyPressEvent (QKeyEvent* event) { default: break; } - - if (keys & 1) mv = mv - 0.1 * Vector3D::j; - if (keys & 2) mv = mv - 0.1 * Vector3D::i; - if (keys & 4) mv = mv + 0.1 * Vector3D::j; - if (keys & 8) mv = mv + 0.1 * Vector3D::i; - if (keys & 16) mv = mv + 0.1 * Vector3D::k; - if (keys & 32) mv = mv - 0.1 * Vector3D::k; - camera.move(mv); - - update(); } diff --git a/src/gui/Stage.h b/src/gui/Stage.h index 6c338fc..6fbad10 100644 --- a/src/gui/Stage.h +++ b/src/gui/Stage.h @@ -55,7 +55,10 @@ private: Camera camera; QTimer* timer; - ElementRenderer* elementRenderer; + QTime time; + int frameTime; //ms + + ElementRenderer elementRenderer; ParticleRenderer particleRenderer; DisplayMode displayMode; |