Personal tools

BogotaClimateChange:Climate Simulation Visualization

From hpcwiki

Revision as of 16:17, 7 October 2013 by Jvictorinog (Talk | contribs)

Jump to: navigation, search

Contents

WRF Data Extraction

path scripts to generate fields

  /home/jvictorino/wrf/scripts

path fields data generated

  /home/jvictorino/wrf/wrf_data

4D fields generated {lats 287, lons 280, levs 34, times 265} XX corresponds with time index:

  • tempXX.dat: temperature
  • PsXX.dat: pressure
  • UXX.dat: Meridional component of wind
  • VXX.dat: Zonal component of wind
  • WXX.dat: Verical component of wind

3D fields generated {lats 287, lons 280, times 265}:

  • relhum.dat: Relative Humidity
  • raina.dat: acummulated rain
  • cldfrac.dat: cloud fraction

Terrain Elevation Rendering

Data source: ASTER_GDEM

Dem1.png

Demo versión 0.1 de Render de elevación del terreno en los cerros orientales de Bogotá, resolución 30 metros, región de 5.4 Km x 5.4 Km. Usando OpenGL.

Field4.png

Temperature 3D, 10 layers, selected region.

Physically-based Cloud Generation

GUI OpenGL

Elementos de la libreria

Estructura de la interfaz

Funcionamiento básico

Para usar la librería se debe crear un descendiente de la clase Widget que funciona como ventana principal y se debe implementar el constructor y las funciones de init(), resize() y draw(). Opcionalmente, puede usar los eventos de teclado, ratón y temporizador. Esta librería tiene disponibles una serie de Widgets de los cuales puede crear instancias en la función init() y deben ser agregados a la ventana principal. También puede crear nuevos Widgets haciendo descendientes de esta clase. A continuación se muestra un ejemplo de implementación básica de la librería y luego se presenta un inventario de las clases que están disponibles:

Orden de llamados:

  • Constructor de la clase Widget
  • Constructor de la ventana de usuario que desciende de Widget
  • Constructor WrapperGL
  • Llamado a la función init() de la ventana llamada por WrapperGL::init()
  • Llamado a la función resize() de la ventana llamada por WrapperGL::reshape()
  • Llamado a la función draw() de la ventana llamada por WrapperGL::glut_display()
  • Automáticamente se llama por segunda a la función draw() de la ventana
  • El motor gráfico queda escuchando los eventos activados

La función WrapperGL::reshape() configura una proyección de perspectiva. Y en la función WrapperGL::glut_display() configura una proyección Ortogonal

Estado inicial de OpenGL

  • Widget::Widget()
  • Window::Window()
    • No usar directivas de OpenGL
  • WrapperGL::WrapperGL()
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
   glutInitWindowSize(pmain_widget->get_width(), pmain_widget->get_height());
   if(gameMode){
       glutGameModeString("800x600:32@60");
       glutEnterGameMode();
   }
   else glutCreateWindow(pmain_widget->get_title().c_str());
   glClearColor(1.0, 1.0, 1.0, 0.1);
   glutDisplayFunc(glut_display);
   glutReshapeFunc(glut_reshape);
   glutMouseFunc(glut_mouse_press);
   glutMotionFunc(glut_mouse_drag);
   glutPassiveMotionFunc(glut_mouse_move);
   glutKeyboardFunc(glut_key_pressed);
   glutKeyboardUpFunc(glut_key_released);
   glutSpecialFunc(glut_special_key_pressed);
   glutSpecialUpFunc(glut_special_key_released);
  • WrapperGL::init()
   glClearColor(c[0], c[1], c[2], c[3]);
  • Window::init()
    • Espacio disponible para configurar el estado de OpenGL, excepto la proyección
    • Antes de ejecutar glutMainLoop()
  • WrapperGL::reshape()
   glViewport(0, 0, w, h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(60.0, (double)w/h, 1, 10000);
   glMatrixMode(GL_MODELVIEW);
  • Window::resize()
    • No cambiar perspectiva
    • Cambiar propiedades de los Widgets para ajustar a las nuevas dimensiones
  • WrapperGL::glut_display()
   glMatrixMode(GL_PROJECTION); 
   glPushMatrix();            
   glLoadIdentity();      
   gluOrtho2D(0, w, 0, h);
   glScalef(1, -1, 1);
   glTranslatef(0, -h, 0);
    • Window::draw()
      • Pintar escena 3D y widgets en Draw de la ventana
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
   pmain_widget->draw();  // Draw de la ventana
   glPopMatrix();
   glutSwapBuffers();
  • glut_exec()...

Funciones y utilidades de OpenGL

Visualización de campos WRF

Descripción de objetos

TODO List

  • Propose a model for cloud generation based on single cells in a simulation domain (WRF)