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 79: | Line 79: | ||
glMatrixMode(GL_PROJECTION); | glMatrixMode(GL_PROJECTION); | ||
glLoadIdentity(); | glLoadIdentity(); | ||
− | gluPerspective( | + | gluPerspective(45.0, (double)w/h, 0.1, 10000); |
glMatrixMode(GL_MODELVIEW); | glMatrixMode(GL_MODELVIEW); | ||
* Window::resize() | * Window::resize() | ||
Line 85: | Line 85: | ||
** Cambiar propiedades de los Widgets para ajustar a las nuevas dimensiones | ** Cambiar propiedades de los Widgets para ajustar a las nuevas dimensiones | ||
* WrapperGL::glut_display() | * WrapperGL::glut_display() | ||
− | + | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
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 | ||
+ | ___ ... | ||
+ | ___ // puede cambiar la proyección con: set_orthographic_projection(); | ||
+ | ___ // glPushMatrix(); glLoadIdentity(); funcion_Pintar_Widgets() glPopMatrix(); | ||
___ ... | ___ ... | ||
'''} | '''} | ||
− | glPopMatrix(); | + | glPopMatrix(); |
glutSwapBuffers(); | glutSwapBuffers(); | ||
− | |||
− | |||
− | |||
− | |||
* glut_exec()... | * glut_exec()... | ||
Latest revision as of 07:36, 9 October 2013
Contents |
[edit] 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
[edit] 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.
[edit] Physically-based Cloud Generation
[edit] GUI OpenGL
[edit] Elementos de la libreria
[edit] Estructura de la interfaz
[edit] 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:
[edit] 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
[edit] 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(45.0, (double)w/h, 0.1, 10000); glMatrixMode(GL_MODELVIEW);
- Window::resize()
- No cambiar perspectiva
- Cambiar propiedades de los Widgets para ajustar a las nuevas dimensiones
- WrapperGL::glut_display()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); Window->draw(){ // Draw de la ventana ___ // pintar escena 3D y widgets en Draw de la ventana ___ ... ___ // puede cambiar la proyección con: set_orthographic_projection(); ___ // glPushMatrix(); glLoadIdentity(); funcion_Pintar_Widgets() glPopMatrix(); ___ ... } glPopMatrix(); glutSwapBuffers();
- glut_exec()...
[edit] Funciones y utilidades de OpenGL
[edit] Visualización de campos WRF
[edit] Descripción de objetos
[edit] TODO List
- Propose a model for cloud generation based on single cells in a simulation domain (WRF)