#ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef HAVE_GL_GL_H # include #elif HAVE_OPENGL_GL_H # include #endif #ifdef HAVE_GL_GLU_H # include #elif HAVE_OPENGL_GLU_H # include #endif #include #include "anugavis.hh" #include "height_quantity.hh" #include "sww_file.hh" using boost::shared_ptr; using std::string; AnugaVis::AnugaVis(const string &file_name, int width, int height): screen(NULL), sww_file(new SWWFile(file_name)){ init_SDL(width, height); init_OpenGL(width, height); } AnugaVis::~AnugaVis(void){ if(this->screen != NULL) SDL_Quit(); } void AnugaVis::add_HeightQuantity(shared_ptr &height){ height->set_SWWFile(this->sww_file); this->heights.push_back(height); } void AnugaVis::run(void){ } void AnugaVis::init_SDL(int width, int height){ if((SDL_Init(SDL_INIT_VIDEO) == -1) || (SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5) == -1) || (SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5) == -1) || (SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5) == -1) || (SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16) == -1) || (SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1) == -1) || ((this->screen = SDL_SetVideoMode(width, height, 16, SDL_OPENGL)) == NULL)) throw SDL_GetError(); SDL_WM_SetCaption("ANUGA Visualiser", "ANUGA Visualiser"); } void AnugaVis::init_OpenGL(int width, int height){ GLfloat lightAmbient[] = {0.0, 0.0, 0.0, 1.0}; GLfloat lightDiffuse[] = {1.0, 1.0, 1.0, 1.0}; glEnable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glEnable(GL_NORMALIZE); glMatrixMode(GL_PROJECTION); gluPerspective(45.0, ((GLdouble)width)/((GLdouble)height), 0.1, 1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); }