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

Revision 2569, 4.8 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        mModelMatrix = IdentityMatrix();
31
32        trackball(manipulatorLastQuat, 0.0f, 0.0f, 0.0f, 0.0f);
33        //connect(renderer, SIGNAL(PvsUpdated()), this, SLOT(updateGL()));
34        //connect(renderer, SIGNAL(cutupdated), this, SLOT(updateGL()));
35
36        const int delay = 250; // in milliseconds
37        timerId = startTimer(delay);
38}
39 
40QSize
41QtGlViewer::minimumSizeHint() const
42{
43  return QSize(100, 100);
44}
45
46QSize
47QtGlViewer::sizeHint() const {
48  return QSize(500, 500);
49}
50 
51// This method has to be rendefined by all renderer implementations
52void
53QtGlViewer::RenderScene()
54{
55        ++ mRenderer->mFrame;
56       
57        //glDisable(GL_DEPTH_TEST);
58
59        mRenderer->mDummyViewPoint = mDummyViewPoint;
60        glColor3f(0.8f, 0.8f, 0.8f);
61        mRenderer->RenderPvs();
62       
63//      if (mRenderer->mShowRays) {
64//        RssPreprocessor *p = (RssPreprocessor *)
65//                      mRenderer->mViewCellsManager->GetPreprocessor();
66//        if (p->mRssTree) {
67//                      VssRayContainer rays;
68//                      p->mRssTree->CollectRays(rays, 10000);
69//                      mRenderer->RenderRays(rays);
70//        }
71//      }
72
73        if (mRenderer->mShowRenderCost)
74          mRenderer->RenderRenderCost();
75
76        // render into the right side of the window buffer
77        if (mRenderer->mRenderViewCells)
78                mRenderer->RenderViewCells();
79
80        mRenderer->RenderViewPoint();
81
82        glColor3f(1.0f, 1.0f, 1.0f);
83        mRenderer->RenderInfo();
84}
85
86
87void
88QtGlViewer::initializeGL()
89
90  const char *vendorString, *rendererString, *versionString, *extString;
91
92  // get GL info
93  vendorString = (const char *) glGetString(GL_VENDOR);
94  rendererString = (const char *) glGetString(GL_RENDERER);
95  versionString = (const char *) glGetString(GL_VERSION);
96  extString = (const char *) glGetString(GL_EXTENSIONS);
97 
98  Debug << "Info: GL Vendor = "<<vendorString<<endl
99        << "Info: GL Renderer = "<<rendererString<<endl
100        << "Info: GL Version = "<<versionString<<endl
101        << "Info: GL Extensions = "<<extString<<endl<<flush;
102
103
104  return;
105}
106
107void
108QtGlViewer::paintGL()
109{
110        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
111        glLoadIdentity();
112
113        //float m[4][4];
114        Matrix4x4 m;
115
116        glLoadIdentity();
117        gluLookAt(0.0, 0.0, 1.0,  /* eye is at (0,0,30) */
118                      0.0, 0.0, 0.0,  /* center is at (0,0,0) */
119                      0.0, 1.0, 0.);  /* up is in positive Y direction */
120
121        build_rotmatrix(m.x, manipulatorLastQuat);
122        glMultMatrixf((float *)m.x);
123
124        float s = scale * 20.0f / Magnitude(mRenderer->mSceneGraph->GetBox().Diagonal());
125        glScalef(s, s, s);
126
127        // TODO: determine model matrix for establishing right rendering order for transparency
128        Vector3 t = -mRenderer->mSceneGraph->GetBox().Center();
129        glTranslatef(t.x, t.y, t.z);
130
131        /*mDummyViewPoint = -t;
132        mDummyViewPoint /= s;
133
134        //glGetFloatv(GL_MODELVIEW_MATRIX, m1);
135*/
136        m.Invert();
137
138        mModelMatrix *= m;
139        mDummyViewPoint = mModelMatrix * Vector3(0, 0, 0);
140
141        //mDummyViewPoint
142        //cout << "view point: " << mDummyViewPoint << endl;
143        RenderScene();
144}
145
146void
147QtGlViewer::resizeGL(int width, int height)
148{
149  glViewport(0, 0, width, height);
150 
151  glMatrixMode(GL_PROJECTION);
152  glLoadIdentity();
153  gluPerspective(70.0, 1.0, 0.1, 100.0);
154  //  glOrtho(-0.5*width/height, +0.5*width/height, 0.5, -0.5, 4.0, 15.0);
155  glMatrixMode(GL_MODELVIEW);
156}
157
158
159void
160QtGlViewer::mousePressEvent(QMouseEvent *event)
161{
162  lastPos = event->pos();
163}
164
165void
166QtGlViewer::keyPressEvent ( QKeyEvent * e )
167{
168  switch (e->key()) {
169  case Qt::Key_W:
170                mWireframe  = !mWireframe;
171                updateGL();
172  default:
173                e->ignore();
174                break;
175  }
176  updateGL();
177}
178
179void
180QtGlViewer::mouseMoveEvent(QMouseEvent *event)
181{
182  int dx = event->x() - lastPos.x();
183  int dy = event->y() - lastPos.y(); 
184 
185  if (event->modifiers() & Qt::CTRL)
186                {
187                        scale = scale*(1.0f - dy/(float)height());
188                        if (scale < 0.01f)
189                                scale = 0.01f;
190                        updateGL();
191                }
192  else {
193                float W = width();
194                float H = height();
195                int x = event->x();
196                int lastX = lastPos.x();
197                int y = event->y();
198                int lastY = lastPos.y();
199       
200                float quat[4];
201                trackball(quat,
202                                                        (2.0 * lastX - W) / W,
203                                                        (H - 2.0 * lastY) / H,
204                                                        (2.0 * x - W) / W,
205                                                        (H - 2.0 * y) / H
206                                                        );
207                add_quats(quat, manipulatorLastQuat, manipulatorLastQuat);
208  }
209 
210  lastPos = event->pos();
211  updateGL();
212}
213
214void QtGlViewer::timerEvent(QTimerEvent *event)
215{
216        update();
217}
218
219
220}
221
Note: See TracBrowser for help on using the repository browser.