summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2011-04-16 20:10:52 +0000
committerJakob Odersky <jodersky@gmail.com>2011-04-16 20:10:52 +0000
commit064e27d5e7bf451542cc89ee0a05a06447acdc88 (patch)
tree393bfcfd1ed8312d3805dbdaa48788a5090c8b32
parent4e157e9aad9907807e6b9ae30a5d2f35cf643c15 (diff)
downloadvhc-064e27d5e7bf451542cc89ee0a05a06447acdc88.tar.gz
vhc-064e27d5e7bf451542cc89ee0a05a06447acdc88.tar.bz2
vhc-064e27d5e7bf451542cc89ee0a05a06447acdc88.zip
Amelioration de l'interface grap graphique.
-rw-r--r--src/gui/Main.cc2
-rw-r--r--src/gui/Makefile2
-rw-r--r--src/gui/Stage.cc87
-rw-r--r--src/gui/Stage.h5
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;