Personal tools

BogotaClimateChange:Climate Simulation Visualization

From hpcwiki

Revision as of 17:07, 1 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

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);
   glMatrixMode(GL_MODELVIEW);
   glPushMatrix();
   pmain_widget->draw();  // Draw de la ventana
   glPopMatrix();
   glutSwapBuffers();
  • Window::draw()
    • Pintar escena 3D y widgets
  • Window::draw()
  • 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)