source: GTP/trunk/Lib/Vis/Preprocessing/src/QtInterface/QtGlViewer.cpp @ 2564

Revision 2564, 4.4 KB checked in by mattausch, 17 years ago (diff)
Line 
1// ===================================================================
2// $Id$
3
4// Qt headers
5#include <QtGui>
6#include <QtOpenGL>
7
8// C++ standard headers
9#include <cmath>
10
11// local headers
12#include "common.h"
13#include "QtGlViewer.h"
14#include "QtGlRenderer.h"
15#include "Trackball.h"
16#include "RssPreprocessor.h"
17#include "SceneGraph.h"
18
19
20namespace GtpVisibilityPreprocessor {
21
22QtGlRendererWidget *renderer;
23
24QtGlViewer::QtGlViewer(QWidget *parent,
25                                           QtGlRendererWidget *renderer):
26  QGLWidget(parent), mRenderer(renderer)
27{
28        scale = 1.0f;
29        mWireframe = false;
30        trackball(manipulatorLastQuat, 0.0f, 0.0f, 0.0f, 0.0f);
31        //connect(renderer, SIGNAL(PvsUpdated()), this, SLOT(updateGL()));
32        //connect(renderer, SIGNAL(cutupdated), this, SLOT(updateGL()));
33
34        const int delay = 250; // in milliseconds
35        timerId = startTimer(delay);
36}
37 
38QSize
39QtGlViewer::minimumSizeHint() const
40{
41  return QSize(100, 100);
42}
43
44QSize
45QtGlViewer::sizeHint() const {
46  return QSize(500, 500);
47}
48 
49// This method has to be rendefined by all renderer implementations
50void
51QtGlViewer::RenderScene()
52{
53        ++ mRenderer->mFrame;
54       
55        //glDisable(GL_DEPTH_TEST);
56
57        glColor3f(0.8f, 0.8f, 0.8f);
58        mRenderer->RenderPvs();
59       
60//      if (mRenderer->mShowRays) {
61//        RssPreprocessor *p = (RssPreprocessor *)
62//                      mRenderer->mViewCellsManager->GetPreprocessor();
63//        if (p->mRssTree) {
64//                      VssRayContainer rays;
65//                      p->mRssTree->CollectRays(rays, 10000);
66//                      mRenderer->RenderRays(rays);
67//        }
68//      }
69
70        if (mRenderer->mShowRenderCost)
71          mRenderer->RenderRenderCost();
72
73        // render into the right side of the window buffer
74        if (mRenderer->mRenderViewCells)
75                mRenderer->RenderViewCells();
76
77        mRenderer->RenderViewPoint();
78
79        glColor3f(1.0f, 1.0f, 1.0f);
80        mRenderer->RenderInfo();
81}
82
83
84void
85QtGlViewer::initializeGL()
86
87  const char *vendorString, *rendererString, *versionString, *extString;
88
89  // get GL info
90  vendorString = (const char *) glGetString(GL_VENDOR);
91  rendererString = (const char *) glGetString(GL_RENDERER);
92  versionString = (const char *) glGetString(GL_VERSION);
93  extString = (const char *) glGetString(GL_EXTENSIONS);
94 
95  Debug << "Info: GL Vendor = "<<vendorString<<endl
96        << "Info: GL Renderer = "<<rendererString<<endl
97        << "Info: GL Version = "<<versionString<<endl
98        << "Info: GL Extensions = "<<extString<<endl<<flush;
99
100
101  return;
102}
103
104void
105QtGlViewer::paintGL()
106{
107        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
108        glLoadIdentity();
109
110        float m[4][4];
111
112        glLoadIdentity();
113        gluLookAt(0.0, 0.0, 1.0,  /* eye is at (0,0,30) */
114                0.0, 0.0, 0.0,      /* center is at (0,0,0) */
115                0.0, 1.0, 0.);      /* up is in positive Y direction */
116
117        build_rotmatrix(m, manipulatorLastQuat);
118        glMultMatrixf(&m[0][0]);
119
120        float s = scale*20.0f/Magnitude(mRenderer->mSceneGraph->GetBox().Diagonal());
121        glScalef(s, s, s);
122
123        Vector3 t = -mRenderer->mSceneGraph->GetBox().Center();
124        glTranslatef(t.x, t.y, t.z);
125
126        RenderScene();
127}
128
129void
130QtGlViewer::resizeGL(int width, int height)
131{
132  glViewport(0, 0, width, height);
133 
134  glMatrixMode(GL_PROJECTION);
135  glLoadIdentity();
136  gluPerspective(70.0, 1.0, 0.1, 100.0);
137  //  glOrtho(-0.5*width/height, +0.5*width/height, 0.5, -0.5, 4.0, 15.0);
138  glMatrixMode(GL_MODELVIEW);
139}
140
141
142void
143QtGlViewer::mousePressEvent(QMouseEvent *event)
144{
145  lastPos = event->pos();
146}
147
148void
149QtGlViewer::keyPressEvent ( QKeyEvent * e )
150{
151  switch (e->key()) {
152  case Qt::Key_W:
153                mWireframe  = !mWireframe;
154                updateGL();
155  default:
156                e->ignore();
157                break;
158  }
159  updateGL();
160}
161
162void
163QtGlViewer::mouseMoveEvent(QMouseEvent *event)
164{
165  int dx = event->x() - lastPos.x();
166  int dy = event->y() - lastPos.y(); 
167 
168  if (event->modifiers() & Qt::CTRL)
169                {
170                        scale = scale*(1.0f - dy/(float)height());
171                        if (scale < 0.01f)
172                                scale = 0.01f;
173                        updateGL();
174                }
175  else {
176                float W = width();
177                float H = height();
178                int x = event->x();
179                int lastX = lastPos.x();
180                int y = event->y();
181                int lastY = lastPos.y();
182       
183                float quat[4];
184                trackball(quat,
185                                                        (2.0 * lastX - W) / W,
186                                                        (H - 2.0 * lastY) / H,
187                                                        (2.0 * x - W) / W,
188                                                        (H - 2.0 * y) / H
189                                                        );
190                add_quats(quat, manipulatorLastQuat, manipulatorLastQuat);
191  }
192 
193  lastPos = event->pos();
194  updateGL();
195}
196
197void QtGlViewer::timerEvent(QTimerEvent *event)
198{
199        update();
200}
201
202
203}
204
Note: See TracBrowser for help on using the repository browser.