From: spixx Date: Sat, 4 Nov 2006 19:32:21 +0000 (+0000) Subject: not needed (no glut,glui) X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=bd75813d44d09dec4f62b86ef2ef44f3471a0148;p=lsystem3d.git not needed (no glut,glui) --- diff --git a/src/openglwindow.cpp b/src/openglwindow.cpp deleted file mode 100644 index ba5c753..0000000 --- a/src/openglwindow.cpp +++ /dev/null @@ -1,391 +0,0 @@ -// Copyright (C) 2006 Erik Dahlberg -// -// This file is part of LSystem3d. -// -// LSystem3D 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. -// -// LSystem3D 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 LSystem3D; if not, write to the Free Software -// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - - - -#include - -#include -#include -#include -#include - -#include "callbacks.h" -#include "lindenmayersystem.h" -#include "lsystemparameters.h" -#include "model.h" -#include "openglwindow.h" - -using namespace std; - -extern OpenGLWindow *openglWindow; - - - -/** - * Constructor - */ -OpenGLWindow::OpenGLWindow() -{ - // misc init - - openglWindow = this; - _busyGenerating = true; - lsystemParametersPath = "lsystem.xml"; - defaultView(); - - - - // init GLUT & GLUI - // ---------------- - - // drawing window - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); - glutInitWindowSize(800, 800); - int _window = glutCreateWindow("lsystem"); - - // return control after closing the window - glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, 1); - - // register callbacks - glutKeyboardFunc(glutKeyboardCB); - glutSpecialFunc(glutSpecialCB); - glutDisplayFunc(glutDisplayCB); - GLUI_Master.set_glutIdleFunc(glutIdleCB); - - // GUI window - _glui = GLUI_Master.create_glui("lsystem"); - - // model and l-system creation - _model = new Model; - _lsystem = new LindenmayerSystem(_model); - - // load lsystem parameters - _lsystemParameters.load(_lsystem, lsystemParametersPath.c_str()); - - - - // create GLUI widgets - // ------------------- - - // axiom - _axiomEditText = _glui->add_edittext("Axiom", GLUI_EDITTEXT_TEXT); - _axiomEditText->set_text((char *)_lsystem->getAxiom().c_str()); - - // rules - // TODO: make dynamic! - GLUI_Panel *panel = _glui->add_panel("Rules", GLUI_PANEL_EMBOSSED); - _ruleEditTexts.push_back(_glui->add_edittext_to_panel(panel, "#1", GLUI_EDITTEXT_TEXT)); - _ruleEditTexts.push_back(_glui->add_edittext_to_panel(panel, "#2", GLUI_EDITTEXT_TEXT)); - _ruleEditTexts.push_back(_glui->add_edittext_to_panel(panel, "#3", GLUI_EDITTEXT_TEXT)); - _ruleEditTexts.push_back(_glui->add_edittext_to_panel(panel, "#4", GLUI_EDITTEXT_TEXT)); - _ruleEditTexts.push_back(_glui->add_edittext_to_panel(panel, "#5", GLUI_EDITTEXT_TEXT)); - _ruleEditTexts[0]->set_w(200); - _ruleEditTexts[1]->set_w(200); - _ruleEditTexts[2]->set_w(200); - _ruleEditTexts[3]->set_w(200); - _ruleEditTexts[4]->set_w(200); - - // sync gui and l-system - map rules = _lsystem->getRules(); - map::iterator currentRule; - int i = 0; - for (currentRule = rules.begin(); currentRule != rules.end(); currentRule++) - { - string rule = currentRule->first + "=" + currentRule->second; - // TODO: bounds? - _ruleEditTexts[i++]->set_text((char *)rule.c_str()); - } - - // angle - _angleSpinner = _glui->add_spinner("Angle", GLUI_SPINNER_FLOAT, NULL, -1, (GLUI_Update_CB)gluiSpinnerAngleCB); - _angleSpinner->set_float_val(_lsystem->getAngle()); - _angleSpinner->set_speed(1.0); - - // iterations - _iterationsSpinner = _glui->add_spinner("Iterations", GLUI_SPINNER_INT); - _iterationsSpinner->set_int_val(_lsystem->getNumIterations()); - - - _glui->add_separator(); - - - // live update - _liveUpdates = 1; - _liveCheckbox = _glui->add_checkbox("Live update", &_liveUpdates); - - // reset - _glui->add_button("Reset view", -1, (GLUI_Update_CB)gluiButtonResetCB); - - // generate - _glui->add_button("Generate", -1, (GLUI_Update_CB)gluiButtonGenerateCB); - - - _glui->set_main_gfx_window(_window); - - - - - // init OpenGL view - // ---------------- - - // projection - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(65, 1, 1, 100); - - // model view - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0.0, 0.0, 2.0, - 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0); - - glClearColor(0.0, 0.0, 0.0, 0.0); - - glShadeModel(GL_SMOOTH); - - // light - GLfloat lightPosition[] = {0.0, 0.0, 2.0, 0.0}; - GLfloat white[] = {1.0, 1.0, 1.0, 1.0}; - glLightfv(GL_LIGHT0, GL_DIFFUSE, white); - glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); - - glEnable(GL_COLOR_MATERIAL); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - glutMainLoop(); -} - - - -/** - * Destructor - */ -OpenGLWindow::~OpenGLWindow() -{ - // save current l-system to disk - _lsystemParameters.save(_lsystem, lsystemParametersPath.c_str()); - - delete _lsystem; - delete _model; -} - - - -/** - * Start generation of l-system data - */ -void OpenGLWindow::generate() -{ - _busyGenerating = true; - - // read GLUI widgets and set corresponding l-system parameters - - // axiom - char *axiom = _axiomEditText->get_text(); - _lsystem->setAxiom(axiom); - - // rules - vector rules; - rules.push_back(_ruleEditTexts[0]->get_text()); - rules.push_back(_ruleEditTexts[1]->get_text()); - rules.push_back(_ruleEditTexts[2]->get_text()); - rules.push_back(_ruleEditTexts[3]->get_text()); - rules.push_back(_ruleEditTexts[4]->get_text()); - - for (int i = 0; i < rules.size(); i++) - { - if (rules[i][0] != '\0') - { - // non-empty rule - - // separate rule name from the actual rule - string ruleName(rules[i], 1); - string theRule(rules[i]+2); - - _lsystem->setRule(ruleName, theRule); - } - } - - // angle - float angle = _angleSpinner->get_float_val(); - _lsystem->setAngle(angle); - - // iterations - int iterations = _iterationsSpinner->get_int_val(); - _lsystem->setNumIterations(iterations); - - - // start generation - _model->begin(); - _lsystem->generate(); - _model->end(); - - _busyGenerating = false; -} - - - -/** - * Move camera left - */ -void OpenGLWindow::left() -{ - _xModel += 0.1; - glutPostRedisplay(); -} - - - -/** - * Move camera right - */ -void OpenGLWindow::right() -{ - _xModel -= 0.1; - glutPostRedisplay(); -} - - - -/** - * Move camera up - */ -void OpenGLWindow::up() -{ - _yModel -= 0.1; - glutPostRedisplay(); -} - - - -/** - * Move camera down - */ -void OpenGLWindow::down() -{ - _yModel += 0.1; - glutPostRedisplay(); -} - - - -/** - * Move camera forth - */ -void OpenGLWindow::forth() -{ - _zModel += 1; - glutPostRedisplay(); -} - - - -/** - * Move camera back - */ -void OpenGLWindow::back() -{ - _zModel -= 1; - glutPostRedisplay(); -} - - - -/** - * Zoom in - */ -void OpenGLWindow::zoomIn() -{ - _scaleModel *= 1.1; - glutPostRedisplay(); -} - - - -/** - * Zoom out - */ -void OpenGLWindow::zoomOut() -{ - _scaleModel /= 1.1; - glutPostRedisplay(); -} - - - -/** - * Rotate around y-axis - */ -void OpenGLWindow::rotateY() -{ - _yRotationModel = int(_yRotationModel + 5.0) % 360; - glutPostRedisplay(); -} - - - -/** - * Draw l-system model to screen - */ -void OpenGLWindow::draw() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - if (!_busyGenerating) - { - // ready for rendering - - glPushMatrix(); - glTranslatef(_xModel, _yModel, _zModel); - glScalef(_scaleModel, _scaleModel, _scaleModel); - glRotatef(_yRotationModel, 0.0, 1.0, 0.0); - - _model->draw(); - glPopMatrix(); - } - - glutSwapBuffers(); -} - - - -/** - * Reset to default view - */ -void OpenGLWindow::defaultView() -{ - _xModel = _yModel = _zModel = 0.0; - _scaleModel = 1.0; - _yRotationModel = 0.0; -} - - - -/** - * Check if live mode is activated - * @return true, if activated - */ -bool OpenGLWindow::liveActivated() -{ - return _liveUpdates; -}