Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/freestyle/intern/app/AppGLWidget.cpp')
-rwxr-xr-xsource/blender/freestyle/intern/app/AppGLWidget.cpp1049
1 files changed, 0 insertions, 1049 deletions
diff --git a/source/blender/freestyle/intern/app/AppGLWidget.cpp b/source/blender/freestyle/intern/app/AppGLWidget.cpp
deleted file mode 100755
index 46e1f409cb2..00000000000
--- a/source/blender/freestyle/intern/app/AppGLWidget.cpp
+++ /dev/null
@@ -1,1049 +0,0 @@
-
-//
-// Copyright (C) : Please refer to the COPYRIGHT file distributed
-// with this source distribution.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include <iostream>
-#include <qtextstream.h>
-#include <qimage.h>
-#include <qtabwidget.h>
-#include <qtextedit.h>
-#include <QMouseEvent>
-#include "../stroke/Canvas.h"
-#include "AppGLWidget.h"
-#include "../scene_graph/NodeLight.h"
-#include "../rendering/GLRenderer.h"
-#include "../rendering/GLSelectRenderer.h"
-#include "../rendering/GLBBoxRenderer.h"
-#include "../rendering/GLMonoColorRenderer.h"
-#include "Controller.h"
-#include "../view_map/Silhouette.h"
-#include "../view_map/ViewMap.h"
-#include "../scene_graph/LineRep.h"
-#include "../scene_graph/NodeShape.h"
-#include "../scene_graph/VertexRep.h"
-#include "AppConfig.h"
-
-// glut.h must be included last to avoid a conflict with stdlib.h on vc .net 2003 and 2005
-#ifdef __MACH__
-# include <GLUT/glut.h>
-#else
-# include <GL/glut.h>
-#endif
-
-GLuint texture = 0;
-
-bool AppGLWidget::_frontBufferFlag = false;
-bool AppGLWidget::_backBufferFlag = true;
-
-AppGLWidget::AppGLWidget(QWidget *iParent, const char *iName)
- : QGLViewer(iParent)
-{
- _Fovy = 30.f;
- //_SceneDepth = 2.f;
- _RenderStyle = LINE;
- //_ModelRootNode->setBBox(BBox<Vec3f>(Vec3f(-10.f, -10.f, -10.f), Vec3f(10.f, 10.f, 10.f)));
- _ModelRootNode = new NodeDrawingStyle;
- _SilhouetteRootNode = new NodeDrawingStyle;
- _DebugRootNode = new NodeDrawingStyle;
-
- _RootNode.AddChild(_ModelRootNode);
- _SilhouetteRootNode->setStyle(DrawingStyle::LINES);
- _SilhouetteRootNode->setLightingEnabled(false);
- _SilhouetteRootNode->setLineWidth(2.f);
- _SilhouetteRootNode->setPointSize(3.f);
-
- _RootNode.AddChild(_SilhouetteRootNode);
-
- _DebugRootNode->setStyle(DrawingStyle::LINES);
- _DebugRootNode->setLightingEnabled(false);
- _DebugRootNode->setLineWidth(1.f);
-
- _RootNode.AddChild(_DebugRootNode);
-
- _minBBox = __min(__min(_ModelRootNode->bbox().getMin()[0],
- _ModelRootNode->bbox().getMin()[1]),
- _ModelRootNode->bbox().getMin()[2]);
- _maxBBox = __max(__max(_ModelRootNode->bbox().getMax()[0],
- _ModelRootNode->bbox().getMax()[1]),
- _ModelRootNode->bbox().getMax()[2]);
-
- _maxAbs = __max(rabs(_minBBox), rabs(_maxBBox));
- _minAbs = __min(rabs(_minBBox), rabs(_maxBBox));
-
- camera()->setZNearCoefficient(0.1);
-
- // 2D Scene
- // _pFENode = new NodeDrawingStyle;
- // _pFENode->setStyle(DrawingStyle::LINES);
- // _pFENode->setLightingEnabled(false);
- // _pFENode->setLineWidth(1.f);
- //
- // _p2DNode.AddChild(_pFENode);
- //
- // _pVisibleSilhouetteNode = new NodeDrawingStyle;
- // _pVisibleSilhouetteNode->setStyle(DrawingStyle::LINES);
- // _pVisibleSilhouetteNode->setLightingEnabled(false);
- // _pVisibleSilhouetteNode->setLineWidth(3.f);
- //
- // _p2DNode.AddChild(_pVisibleSilhouetteNode);
- //
- _p2DSelectionNode = new NodeDrawingStyle;
- _p2DSelectionNode->setLightingEnabled(false);
- _p2DSelectionNode->setStyle(DrawingStyle::LINES);
- _p2DSelectionNode->setLineWidth(5.f);
-
- _p2DNode.AddChild(_p2DSelectionNode);
-
- _pGLRenderer = new GLRenderer;
- _pSelectRenderer = new GLSelectRenderer;
- _pBBoxRenderer = new GLBBoxRenderer;
- _pMonoColorRenderer = new GLMonoColorRenderer;
- _pDebugRenderer = new GLDebugRenderer;
-
- _pMainWindow = NULL;
- _cameraStateSaved = false;
- _drawBBox = false;
- _silhouette = false;
- _fedges = false;
- _debug = false;
- _selection_mode = false;
- _Draw2DScene = true;
- _Draw3DScene = true;
- _drawEnvMap = false;
- _currentEnvMap = 1;
- _maxId = 0;
- _blendFunc = 0;
-
- const QString sep(Config::DIR_SEP.c_str());
- const QString filename = Config::Path::getInstance()->getHomeDir() + sep +
- Config::OPTIONS_DIR + sep + Config::OPTIONS_QGLVIEWER_FILE;
- setStateFileName(filename);
-
- //get camera frame:
- qglviewer::Camera * cam = camera();
- qglviewer::ManipulatedFrame * fr = cam->frame() ;
- _enableUpdateSilhouettes = false;
- connect(fr, SIGNAL(modified()), this, SLOT(updateSilhouettes()));
- _captureMovie = false;
- // _frontBufferFlag = false;
- // _backBufferFlag = true;
- _record = false;
-}
-
-AppGLWidget::~AppGLWidget()
-{
- int ref = _RootNode.destroy();
-
- _Light.destroy();
- ref = _p2DNode.destroy();
-
- if(NULL != _pGLRenderer)
- {
- delete _pGLRenderer;
- _pGLRenderer = NULL;
- }
-
- if(NULL != _pSelectRenderer)
- {
- delete _pSelectRenderer;
- _pSelectRenderer = NULL;
- }
-
- if(NULL != _pBBoxRenderer)
- {
- delete _pBBoxRenderer;
- _pBBoxRenderer = NULL;
- }
-
- if(NULL != _pMonoColorRenderer)
- {
- delete _pMonoColorRenderer;
- _pMonoColorRenderer = NULL;
- }
-
- if(NULL != _pDebugRenderer)
- {
- delete _pDebugRenderer;
- _pDebugRenderer = NULL;
- }
-
- makeCurrent();
- //saveToFile(filename);
-}
-
-void AppGLWidget::setMainWindow(QMainWindow *iMainWindow) {
- _pMainWindow = iMainWindow;
-}
-void AppGLWidget::captureMovie()
-{
- _captureMovie = true;
- setSnapshotFormat("BMP");
- setSnapshotFileName("anim");
- camera()->playPath(0);
- //_captureMovie = false;
-}
-
-void
-AppGLWidget::updateSilhouettes()
-{
- if(!_enableUpdateSilhouettes || !g_pController)
- return;
- g_pController->ComputeViewMap();
- g_pController->DrawStrokes();
- if(_captureMovie)
- {
- if(!camera()->keyFrameInterpolator(0)->interpolationIsStarted())
- {
- _captureMovie = false;
- return;
- }
- saveSnapshot(true);
- }
-}
-
-void
-AppGLWidget::select(const QMouseEvent *e) {
-
- // 3D Shape selection
-
- if (_selection_mode) {
-
- // Make openGL context current
- makeCurrent();
-
- const unsigned SENSITIVITY = 4;
- const unsigned NB_HITS_MAX = 64;
-
- // Prepare the selection mode
- static GLuint hits[NB_HITS_MAX];
-
- glSelectBuffer(NB_HITS_MAX, hits);
- glRenderMode(GL_SELECT);
- glInitNames();
-
- // Loads the matrices
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- GLint viewport[4];
- camera()->getViewport(viewport);
- gluPickMatrix(static_cast<GLdouble>(e->x()), static_cast<GLdouble>(e->y()), SENSITIVITY, SENSITIVITY, viewport);
-
- // loadProjectionMatrix() first resets the GL_PROJECTION matrix with a glLoadIdentity.
- // Give false as a parameter in order to prevent this and to combine the matrices.
- camera()->loadProjectionMatrix(false);
-
- camera()->loadModelViewMatrix();
-
- // Render scene with objects ids
- _pSelectRenderer->setSelectRendering(true);
- DrawScene(_pSelectRenderer);
- glFlush();
-
- // Get the results
- GLint nb_hits = glRenderMode(GL_RENDER);
-
- if (nb_hits <= 0) {
- _pSelectRenderer->setSelectedId(-1);
- return;
- }
-
- // Interpret results
- unsigned int zMin = hits[1];
- unsigned int selected = hits[3];
- for (int i=1; i<nb_hits; ++i)
- if (hits[i*4+1] < zMin)
- {
- zMin = hits[i*4+1];
- selected = hits[i*4+3];
- }
- _pSelectRenderer->setSelectedId(selected);
-
- cout << "SHAPE" << endl;
- cout << "-----" << endl;
- cout << "Id: " << _pSelectRenderer->getSelectedId() << endl;
- cout << endl;
-
- return;
- }
-
- // ViewMap selection
-
- FEdge *fe = g_pController->SelectFEdge(e->x(), height()-e->y());
- if (!fe)
- return;
- ViewEdge * ve = fe->viewedge();
-
- if (ve) {
- cout << "VIEWEDGE" << endl;
- cout << "--------" << endl;
- cout << "ViewEdge Id: " << ve->getId().getFirst() << ", " << ve->getId().getSecond() << endl;
- cout << "Shape Id: " << ve->shape_id() << endl;
- cout << "Nature: " << ve->getNature() << endl;
- cout << "QI: " << ve->qi() << endl;
- if(ve->aShape())
- cout << "Occludee: " << ve->aShape()->getId() << endl;
- else
- cout << "Occludee: NULL" << endl ;
- cout << endl;
-
- cout << "FEDGE" << endl;
- cout << "-----" << endl;
- cout << "FEdge Id: " << fe->getId().getFirst() << ", " << fe->getId().getSecond() << endl;
- cout << "Vertex A Id: " << fe->vertexA()->getId() << endl;
- cout << "Vertex B Id: " << fe->vertexB()->getId() << endl;
- cout << endl;
-
- vector<ViewEdge*> vedges;
- vedges.push_back(ve);
- _p2DSelectionNode->AddChild(g_pController->BuildRep(vedges.begin(), vedges.end()));
- // FEdge
- LineRep * fedgeRep = new LineRep(fe->vertexA()->point2d(), fe->vertexB()->point2d());
- fedgeRep->setWidth(3.f);
- NodeShape * fedgeNode = new NodeShape;
- fedgeNode->AddRep(fedgeRep);
- fedgeNode->material().setDiffuse(0.2, 1, 0.2, 1.0);
- _p2DSelectionNode->AddChild(fedgeNode);
- //SVertex A
- Vec3r A(fe->vertexA()->point2d());
- VertexRep * aVertexRep = new VertexRep(A.x(), A.y(), A.z());
- aVertexRep->setPointSize(3.f);
- NodeShape * aVertexNode = new NodeShape;
- aVertexNode->AddRep(aVertexRep);
- aVertexNode->material().setDiffuse(1, 0, 0, 1.0);
- _p2DSelectionNode->AddChild(aVertexNode);
- // and its fedges
- const vector<FEdge*>& afedges = fe->vertexA()->fedges();
- vector<FEdge*>::const_iterator f=afedges.begin(), fend=afedges.end();
- for(;
- f!=fend;
- ++f)
- {
- LineRep * lrep = new LineRep((*f)->vertexA()->point2d(), (*f)->vertexB()->point2d());
- lrep->setWidth(1.f);
- aVertexNode->AddRep(lrep);
- }
- //SVertex B
- Vec3r B(fe->vertexB()->point2d());
- VertexRep * bVertexRep = new VertexRep(B.x(), B.y(), B.z());
- bVertexRep->setPointSize(3.f);
- NodeShape * bVertexNode = new NodeShape;
- bVertexNode->AddRep(bVertexRep);
- bVertexNode->material().setDiffuse(0, 0, 1, 1.0);
- _p2DSelectionNode->AddChild(bVertexNode);
- // and its fedges
- const vector<FEdge*>& bfedges = fe->vertexB()->fedges();
- f=bfedges.begin();
- fend=bfedges.end();
- for(;
- f!=fend;
- ++f)
- {
- LineRep * lrep = new LineRep((*f)->vertexA()->point2d(), (*f)->vertexB()->point2d());
- lrep->setWidth(1.f);
- bVertexNode->AddRep(lrep);
- }
-
- }
-}
-
-
-void
-AppGLWidget::mousePressEvent(QMouseEvent *e)
-{
- _p2DSelectionNode->destroy();
- if (e->button() == Qt::LeftButton)
- {
- if(e->modifiers() == Qt::ShiftModifier)
- {
- select(e);
- }
- else if(e->modifiers() == Qt::ControlModifier)
- {
- // Density Observation
- g_pController->displayDensityCurves(e->x(), height()-1-e->y());
- }else{
- QGLViewer::mousePressEvent(e);
- }
- updateGL();
- }
- else
- QGLViewer::mousePressEvent(e);
-}
-
-void
-AppGLWidget::mouseReleaseEvent ( QMouseEvent * e )
-{
- // if(g_pController)
- // g_pController->ComputeViewMap();
- // g_pController->DrawStrokes();
- QGLViewer::mouseReleaseEvent(e);
-}
-
-void
-AppGLWidget::keyPressEvent(QKeyEvent* e)
-{
- switch (e->key()) {
-
- case Qt::Key_U:
- _enableUpdateSilhouettes = !_enableUpdateSilhouettes;
- break;
- case Qt::Key_Escape:
- break;
- case Qt::Key_V:
- g_pController->toggleVisibilityAlgo();
- break;
- case Qt::Key_R:
- if(e->modifiers() == Qt::ShiftModifier){
- _record = !_record;
- if(_record){
- setSnapshotFormat("JPEG");
- setSnapshotFileName("anim");
- g_pController->displayMessage("record", true);
- }else{
- g_pController->displayMessage("");
- }
-
- }
- else if(_cameraStateSaved) {
- setCameraState(_cameraPosition, _cameraOrientation);
- updateGL();
- }
- break;
- case Qt::Key_M:
- _drawEnvMap = !_drawEnvMap ;
- updateGL(); break;
- case Qt::Key_Plus:
- Canvas::getInstance()->changePaperTexture(true);updateGL();
- break;
- case Qt::Key_Minus:
- Canvas::getInstance()->changePaperTexture(false);updateGL();
- break;
- case Qt::Key_P:
- Canvas::getInstance()->togglePaperTexture();updateGL();
- break;
- case Qt::Key_PageUp:
- if(e->modifiers() == Qt::ControlModifier)
- _blendFunc = (_blendFunc + 1) % 2;
- else {
- _currentEnvMap++;
- if(_currentEnvMap > _maxId)
- _currentEnvMap = 1;
- }
- updateGL();
- break;
- case Qt::Key_PageDown:
- if(e->modifiers() == Qt::ControlModifier)
- _blendFunc = (_blendFunc + 1) % 2;
- else {
- _currentEnvMap--;
- if(_currentEnvMap < 1)
- _currentEnvMap = _maxId;
- }
- updateGL();
- break;
- case Qt::Key_1: _ModelRootNode->setStyle(DrawingStyle::FILLED); updateGL(); break;
- case Qt::Key_2: _ModelRootNode->setStyle(DrawingStyle::LINES); _ModelRootNode->setLineWidth(1.0); updateGL(); break;
- case Qt::Key_3: _ModelRootNode->setStyle(DrawingStyle::INVISIBLE); updateGL(); break;
- case Qt::Key_B:
- {
-// if(e->state() == ShiftButton)
-// {
-// g_pController->toggleEdgeTesselationNature(Nature::BORDER); updateGL(); break;
-// }
-// else
- {
- _drawBBox == true ? _drawBBox = false : _drawBBox = true; updateGL(); break;
- }
- }
-// case Key_C:
-// if(e->state() == ShiftButton)
-// {
-// g_pController->toggleEdgeTesselationNature(Nature::CREASE); updateGL(); break;
-// }
-// break;
- case Qt::Key_S:
- {
-// if(e->state() == ShiftButton)
-// {
-// g_pController->toggleEdgeTesselationNature(Nature::SILHOUETTE); updateGL(); break;
-// }
-// else
- {
- _silhouette == true ? _silhouette = false : _silhouette = true; updateGL(); break;
- }
- }
- case Qt::Key_L:
- {
- _selection_mode = !_selection_mode; updateGL(); break;
- }
- break;
- case Qt::Key_E:
- {
- _fedges == true ? _fedges = false : _fedges = true; updateGL(); break;
- }
- break;
- case Qt::Key_D:
- {
- _debug == true ? _debug = false : _debug = true; updateGL();
- }
- break;
- case Qt::Key_F2: _Draw2DScene == true ? _Draw2DScene = false : _Draw2DScene = true; updateGL(); break;
- case Qt::Key_F3: _Draw3DScene == true ? _Draw3DScene = false : _Draw3DScene = true; updateGL(); break;
- default:
- QGLViewer::keyPressEvent(e);
- }
-}
-
-void AppGLWidget::LoadEnvMap(const char *filename)
-{
- GLuint textureId;
- GLubyte *data;
- //sgiImage img;
- //cout << filename << endl;
- QImage img(filename, "PNG");
- QImage glImage = QGLWidget::convertToGLFormat(img);
- int d = glImage.depth();
- //data = img.read(filename); // tres beau bleu gris mauve!!
- // allocate a texture name
- glGenTextures( 1, &textureId );
- if(textureId > _maxId)
- _maxId = textureId;
-
- // select our current texture
- glBindTexture( GL_TEXTURE_2D, textureId );
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
- GL_NEAREST);
-
- glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, glImage.width(), glImage.height(), 0,
- GL_RGBA, GL_UNSIGNED_BYTE, glImage.bits() );
-}
-
-void AppGLWidget::help(){
- emit helpRequired();
-
- bool resize = false;
- int width=600;
- int height=400;
-
- static QString label[] = {" &Keyboard ", " &Mouse "};
-
- QTabWidget * hWidget = helpWidget();
- if (!hWidget){
- hWidget = new QTabWidget(NULL);
- hWidget->setWindowTitle("Control Bindings");
- resize = true;
- for (int i=0; i<2; ++i){
- QTextEdit* tab = new QTextEdit(hWidget);
- //tab->setAcceptRichText(true); // FIXME: commented because qt 4.0 is incomplete
-#if QT_VERSION >= 300
- tab->setReadOnly(true);
-#endif
- hWidget->insertTab(i, tab, label[i]);
- }
- }
-
-#if QT_VERSION < 300
- const int currentPageIndex = hWidget->currentPageIndex();
-#endif
-
- for (int i=0; i<2; ++i)
- {
- QString text;
- switch (i)
- {
- case 0 : text = keyboardString(); break;
- case 1 : text = mouseString(); break;
- default : break;
- }
-
-#if QT_VERSION < 300
- hWidget->setCurrentPage(i);
- QTextEdit* textEdit = (QTextEdit*)(hWidget->currentPage());
-#else
- hWidget->setCurrentIndex(i);
- QTextEdit* textEdit = (QTextEdit*)(hWidget->currentWidget());
-#endif
- textEdit->setHtml(text);
-
- if (resize && (textEdit->heightForWidth(width) > height))
- height = textEdit->heightForWidth(width);
- }
-
-#if QT_VERSION < 300
- hWidget->setCurrentPage(currentPageIndex);
-#endif
-
- if (resize)
- hWidget->resize(width, height+40); // 40 is tabs' height
- hWidget->show();
- hWidget->raise();
-}
-
-QString AppGLWidget::helpString() const{
- QString pdir(Config::Path::getInstance()->getProjectDir());
- QString text = "<a href=\"" + pdir + "/doc/html/index.html\">help content</a>";
- return text;
-}
-
-QString AppGLWidget::mouseString() const{
- QString text("<table border=\"1\" cellspacing=\"0\">\n");
- text += "<tr bgcolor=\"#eebf00\"><th align=\"center\">Button</th><th align=\"center\">Description</th></tr>\n";
- text += "<tr><td><b>Shift+Left</b></td><td>If view map exists, selects a view edge.<br> If in selection mode, selects a shape</td></tr>";
- text += "</table>";
- text += QGLViewer::mouseString();
- return text;
-}
-
-QString AppGLWidget::keyboardString() const {
-
- QString text("<table border=\"1\" cellspacing=\"0\">\n");
- text += "<tr bgcolor=\"#eebf00\"><th align=\"center\">Key</th><th align=\"center\">Description</th></tr>\n";
- text += "<tr><td><b>F2</b></td><td>Toggles 2D Scene display</td></tr>";
- text += "<tr><td><b>F3</b></td><td>Toggles 3D Scene display</td></tr>";
-
- text += "<tr><td><b>1</b></td><td>Filled display mode</td></tr>";
- text += "<tr><td><b>2</b></td><td>Lines display mode</td></tr>";
- text += "<tr><td><b>3</b></td><td>Invisible display mode</td></tr>";
-
- text += "<tr><td><b>E</b></td><td>Toggles ViewMap display</td></tr>";
- text += "<tr><td><b>B</b></td><td>Toggles bounding boxes display</td></tr>";
- text += "<tr><td><b>S</b></td><td>Toggles GL silhouettes display</td></tr>";
- text += "<tr><td><b>D</b></td><td>Toggles debug information display</td></tr>";
- text += "<tr><td><b>L</b></td><td>Toggles shape selection mode</td></tr>";
- text += "<tr><td><b>P</b></td><td>Toggles paper texture display</td></tr>";
- text += "<tr><td><b>M</b></td><td>Toggles toon shading</td></tr>";
- text += "<tr><td><b>V</b></td><td>Toggles visibility algorithm</td></tr>";
-
- text += "<tr><td><b>R</b></td><td>Reset camera to the latest ViewMap computation settings</td></tr>";
- text += "<tr><td><b>Shift+R</b></td><td>Toggles snapshots mode</td></tr>";
-
- text += "<tr><td><b>U</b></td><td>Recomputes the ViewMap when the view changes</td></tr>";
-
- text += "<tr><td><b>+/-</b></td><td>Change paper texture</td></tr>";
- text += "<tr><td><b>PgUp/PgDn</b></td><td>Changes EnvMap</td></tr>";
- text += "<tr><td><b>Ctrl+PgUp/PgDn</b></td><td>Changes blending function</td></tr>";
- text += "</table>";
- text += QGLViewer::keyboardString();
- return text;
-}
-
-void AppGLWidget::init()
-{
- setShortcut(QGLViewer::EXIT_VIEWER, 0);
-// setShortcut(QGLViewer::DISPLAY_Z_BUFFER, 0);
- setShortcut(QGLViewer::STEREO, 0);
- setShortcut(QGLViewer::ANIMATION, 0);
- setShortcut(QGLViewer::EDIT_CAMERA, 0);
-
- restoreStateFromFile();
-
- //trackball().fitBBox(_ModelRootNode->bbox().getMin(), _ModelRootNode->bbox().getMax(), _Fovy);
-
- glClearColor(1,1,1,0);
- glShadeModel(GL_SMOOTH);
-
- glCullFace(GL_BACK);
- glEnable(GL_CULL_FACE);
- glEnable(GL_DEPTH_TEST);
-
- // open and read texture data
- Config::Path * cpath = Config::Path::getInstance();
- QString envmapDir = cpath->getEnvMapDir();
- LoadEnvMap((envmapDir + QString("gray00.png")).toAscii().data());
- //LoadEnvMap(Config::ENV_MAP_DIR + "gray01.bmp");
- LoadEnvMap((envmapDir + QString("gray02.png")).toAscii().data());
- LoadEnvMap((envmapDir + QString("gray03.png")).toAscii().data());
- LoadEnvMap((envmapDir + QString("brown00.png")).toAscii().data());
- glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP) ;
- glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP) ;
-
- // gl settings for Environmental Texturing:
- glColor3f(1, 1, 1);
-
- // Use GL auto-computed enviroment texture coordinates
- //glEnable(GL_TEXTURE_GEN_S);
- //glEnable(GL_TEXTURE_GEN_T);
-
- // Bind the texture to use
- //glBindTexture(GL_TEXTURE_2D,texture);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- //glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
-
- // parametres de melange
- //glBlendFunc(GL_ONE, GL_ONE);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- //glBlendEquatio(GL_FUNC_ADD);
-
- //glEnable(GL_BLEND);
- NodeLight *light = new NodeLight;
- _Light.AddChild(light);
-
- // Change QGLViewer's default shortcut for snapshots
- setShortcut(QGLViewer::SAVE_SCREENSHOT, Qt::CTRL + Qt::Key_W);
- // setShortcutKey (QGLViewer::SAVE_SCREENSHOT, Key_W);
- // setShortcutStateKey(QGLViewer::SAVE_SCREENSHOT, ControlButton);
-
- cout << "Renderer (GL) : " << glGetString(GL_RENDERER) << endl
- << "Vendor (GL) : " << glGetString(GL_VENDOR) << endl << endl;
-}
-
-void AppGLWidget::draw()
-{
- if (true == _Draw3DScene)
- {
- if (true == _selection_mode) {
- _pSelectRenderer->setSelectRendering(false);
- _pSelectRenderer->resetColor();
- DrawScene(_pSelectRenderer);
- } else
- DrawScene(_pGLRenderer);
-
- if (true == _silhouette)
- DrawSilhouette();
-
- if (true == _drawBBox) {
- glPushAttrib(GL_ALL_ATTRIB_BITS);
- _ModelRootNode->accept(*_pBBoxRenderer);
- glPopAttrib();
- }
-
- if (true == _debug) {
- glPushAttrib(GL_ALL_ATTRIB_BITS);
- _DebugRootNode->accept(*_pDebugRenderer);
- glPopAttrib();
- }
- }
-
- if (true == _Draw2DScene) {
- Draw2DScene(_pGLRenderer);
- set3DContext();
- }
- if(_record){
- saveSnapshot(true);
- }
- if(_captureMovie)
- {
- if(!camera()->keyFrameInterpolator(0)->interpolationIsStarted())
- {
- _captureMovie = false;
- return;
- }
- saveSnapshot(true);
- }
-}
-
-void AppGLWidget::DrawScene(SceneVisitor *iRenderer)
-{
- glPushAttrib(GL_ALL_ATTRIB_BITS);
-
- if(_drawEnvMap)
- {
- _ModelRootNode->setLightingEnabled(false);
- glEnable(GL_COLOR_MATERIAL);
-
- glEnable(GL_TEXTURE_2D);
- // Bind the texture to use
- glBindTexture(GL_TEXTURE_2D,_currentEnvMap);
- switch(_blendFunc)
- {
- case 0:
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) ;
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
- break;
- case 1:
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE) ;
- glDisable(GL_BLEND);
- break;
- // case 2:
- // glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) ;
- // glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- // glEnable(GL_BLEND);
- // break;
- // case 3:
- // glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) ;
- // glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
- // glEnable(GL_BLEND);
- // break;
- // case 4:
- // glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) ;
- // glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA);
- // glEnable(GL_BLEND);
- // break;
- default:
- break;
- }
-
- glEnable(GL_TEXTURE_GEN_S);
- glEnable(GL_TEXTURE_GEN_T);
- }
-
- // FIXME
- // //_ModelRootNode->setLightingEnabled(true);
- // if(_ModelRootNode->style() == DrawingStyle::LINES){
- // glPushAttrib(GL_ALL_ATTRIB_BITS);
- // //glDisable(GL_COLOR_MATERIAL);
- // _ModelRootNode->setStyle(DrawingStyle::FILLED);
- // _ModelRootNode->setLightingEnabled(true);
- // _ModelRootNode->accept(*iRenderer);
- // _ModelRootNode->setStyle(DrawingStyle::LINES);
- // _ModelRootNode->setLightingEnabled(false);
- // _ModelRootNode->accept(*iRenderer);
- // glPopAttrib();
- // }
- // else
- _ModelRootNode->accept(*iRenderer);
-
- glDisable(GL_TEXTURE_GEN_S);
- glDisable(GL_TEXTURE_GEN_T);
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_COLOR_MATERIAL);
- _ModelRootNode->setLightingEnabled(true);
-
- if(_fedges == true)
- _SilhouetteRootNode->accept(*iRenderer);
-
- // FIXME: deprecated
-// if(_debug == true)
-// _DebugRootNode->accept(*iRenderer);
-
- glPopAttrib();
-}
-
-void AppGLWidget::prepareCanvas()
-{
- makeCurrent();
- glPushAttrib(GL_ALL_ATTRIB_BITS);
-
- if(_frontBufferFlag){
- if(_backBufferFlag)
- glDrawBuffer(GL_FRONT_AND_BACK);
- else
- glDrawBuffer(GL_FRONT);
- }
- else if(_backBufferFlag)
- glDrawBuffer(GL_BACK);
-
- // Projection Matrix
- //==================
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- glOrtho(0,width(), 0, height(), -1.0, 1.0);
-
- //Modelview Matrix
- //================
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-}
-
-void AppGLWidget::releaseCanvas()
-{
- makeCurrent();
- glDrawBuffer(GL_BACK);
- glPopAttrib();
-}
-
-void AppGLWidget::Draw2DScene(SceneVisitor *iRenderer)
-{
- static bool first = 1;
- glPushAttrib(GL_ALL_ATTRIB_BITS);
-
-// // Projection Matrix
-// //==================
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(0,width(), 0, height(), -1.0, 1.0);
-
-// //Modelview Matrix
-// //================
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- // glBegin(GL_LINE_LOOP);
- // glVertex2f(0,0);
- // glVertex2f(100,0);
- // glVertex2f(100,100);
- // glVertex2f(0,100);
- // glEnd();
-
- //glDrawBuffer(GL_FRONT_AND_BACK);
- // Draw visible silhouette
- //_pVisibleSilhouetteNode->Render(iRenderer);
- Canvas * canvas = Canvas::getInstance();
- if((canvas) && (!canvas->isEmpty()))
- {
- if (first)
- {
- canvas->init();
- first = false;
- }
- canvas->Render(canvas->renderer());
- }
-
- glLoadIdentity();
- // glColor3f(0.f,1.f,0.f);
- // glLineWidth(5.f);
- //glPolygonOffset(0.5f, 0.5f);
- glPushAttrib(GL_DEPTH_BUFFER_BIT);
- glDisable(GL_DEPTH_TEST);
- _p2DSelectionNode->accept(*iRenderer);
- glPopAttrib();
- // Draw Feature edges
- // if(_fedges == true)
- // {
- // _pFENode->Render(iRenderer);
- // }
-
- glPopAttrib();
-}
-
-void AppGLWidget::DrawSilhouette()
-{
- glPushAttrib(GL_ALL_ATTRIB_BITS);
-
- glDepthFunc(GL_LESS);
- glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
- DrawScene(_pMonoColorRenderer);
-
- glCullFace(GL_FRONT);
- glDepthFunc(GL_LEQUAL);
- glEnable(GL_POLYGON_OFFSET_FILL);
- glLineWidth(3.0);
- //glPolygonOffset(10.f, 10.f);
- glPolygonOffset(0.5f, 0.5f);
-
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
- _pMonoColorRenderer->setColor(0.f, 0.f, 0.f);
- DrawScene(_pMonoColorRenderer);
-
- //Restore old context
- glPopAttrib();
-
-}
-
-void AppGLWidget::ReInitRenderers()
-{
- // Debug Renderer
- if(NULL != _pDebugRenderer)
- _pDebugRenderer->ReInit(rabs(_ModelRootNode->bbox().getMax()[1] -
- _ModelRootNode->bbox().getMin()[1]));
-}
-
-void AppGLWidget::setFrontBufferFlag(bool iBool){
- _frontBufferFlag = iBool;
-}
-bool AppGLWidget::getFrontBufferFlag() {
- return _frontBufferFlag;
-}
-void AppGLWidget::setBackBufferFlag(bool iBool){
- _backBufferFlag = iBool;
-}
-bool AppGLWidget::getBackBufferFlag() {
- return _backBufferFlag;
-}
-
-//void AppGLWidget::DrawLines()
-//{
-// //Antialiasing:
-// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-// glEnable(GL_BLEND);
-// glEnable(GL_LINE_SMOOTH);
-// glPolygonMode(GL_FRONT, GL_LINE);
-//
-// glColor3f(0.f, 0.f, 0.f);
-// glLineWidth(2.f);
-//
-// DrawScene();
-//}
-//
-//void AppGLWidget::DrawSurfacic()
-//{
-// glPolygonMode(GL_FRONT, GL_FILL);
-// glShadeModel(GL_SMOOTH);
-//
-// glEnable(GL_LIGHTING);
-// glEnable(GL_LIGHT0);
-//
-//
-// GLreal diffuseV[] = {0.5, 0.7, 0.5, 1.0};
-// glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseV);
-//
-// //glColor3f(0.f, 0.f, 0.f);
-//
-// DrawScene();
-//
-// glDisable(GL_LIGHTING);
-//}
-//
-//void AppGLWidget::DrawDepthBuffer()
-//{
-// GLint w = width();
-// GLint h = height();
-//
-// glPolygonMode(GL_FRONT, GL_FILL);
-//
-// //Disable the writing in the frame buffer
-// glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
-//
-// //This rendering will only fills the depth buffer
-// DrawScene();
-//
-// //Re-enable the frame buffer writing
-// glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
-//
-//
-// GLreal *zPixels = new real[w*h];
-// GLreal *colorPixels = new real[4*w*h];
-//
-// // glReadBuffer(GL_FRONT); //in reality: glReadBuffer and glDrawBuffer are both set to GL_BACK
-// glReadPixels(0,0,w, h, GL_DEPTH_COMPONENT, GL_real, (GLreal*)zPixels);
-//
-// real *tmpZ = zPixels;
-// real *tmpColor = colorPixels;
-//
-// for(int i=0; i<h; i++)
-// {
-// for(int j=0; j<w; j++)
-// {
-// //fprintf(test, " %.5f ", pixels[i*w+j]);
-// tmpColor[0] = *tmpZ;
-// tmpColor[1] = *tmpZ;
-// tmpColor[2] = *tmpZ;
-// tmpColor[3] = 1.f;
-//
-// tmpColor += 4;
-// tmpZ++;
-// }
-// }
-// glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
-// // glDrawBuffer(GL_FRONT_AND_BACK);
-// //glRasterPos2i(0, 0);
-// //glLoadIdentity();
-// glDrawPixels(w, h, GL_RGBA, GL_real, (GLreal *)colorPixels);
-//
-// delete [] zPixels;
-// delete [] colorPixels;
-//}
-