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

Revision 1833, 4.1 KB checked in by bittner, 18 years ago (diff)

gl render updates - separate gl viewer widget

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