Difference between revisions of "BogotaClimateChange:Climate Simulation Visualization"
From hpcwiki
Jvictorinog (Talk | contribs) (→Estado inicial de OpenGL) |
Jvictorinog (Talk | contribs) (→Estado inicial de OpenGL) |
||
Line 94: | Line 94: | ||
glPushMatrix(); | glPushMatrix(); | ||
'''Window->draw(){ // Draw de la ventana | '''Window->draw(){ // Draw de la ventana | ||
− | --- Pintar escena 3D y widgets en Draw de la ventana | + | --- //Pintar escena 3D y widgets en Draw de la ventana |
--- ... | --- ... | ||
− | }''' | + | } |
− | + | ''' glPopMatrix(); | |
glutSwapBuffers(); | glutSwapBuffers(); | ||
glMatrixMode(GL_PROJECTION); | glMatrixMode(GL_PROJECTION); |
Revision as of 16:23, 7 October 2013
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
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.
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); glMatrixMode(GL_MODELVIEW); glPushMatrix(); Window->draw(){ // Draw de la ventana --- //Pintar escena 3D y widgets en Draw de la ventana --- ... }
glPopMatrix();
glutSwapBuffers(); glMatrixMode(GL_PROJECTION); glPpoMatrix(); glMatrixMode(GL_MODELVIEW); 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)