Academic projects

Computer Engineering grade Thesis: CFD Mesh Visualizer

https://github.com/ValenZacarias/LMRenderer/tree/master/LMRenderer/LMRenderer

For my computer engineering thesis I worked on developing a CFD finite volume/elements large mesh visualizator using real time rendering techniques, with the main goal of providing an interactive tool for mesh visualization. In order to achieve that, it was necessary to implement data reduction techniques, give that the meshes that the tool is meant to work with are built of millions of cells/elements.

As for the data reduction techniques, I selected 2 for the implementation (the total time of development was 5 months, so the amount of features incorporated in the tool was very limitated).

  • Sampling: Given that the meshes are usually very large and dense, we believe that is possible to analyze a mesh that isn’t completely loaded in memory and still get valuable insight. Also, sampling cells allows the user to obtain information of the structure of the elements that compose the mesh, this is often important information for the users if they want to detect poorly meshed sections of the mesh.
  • Dynamic Loading: For the visualization tool, the main camera consists in an FPS inspired version that allows the user to navigate all the space around and inside the mesh. Because of that, there is a big chance that the user may visualize just a portion of the total mesh. Using that to our advantage, mesh portions (called Zones in the system) that are not inside the view frustum, are discarded from the render, just like a classic frustum culling algorithm. For this to work and allow the system to quickly load/unload mesh zones, we use a fragmented mesh which consist of multiple portions each with different levels of detail, made of incremental samplings of the portion. The different levels of detail of one zone are stored into binary files, so the system can detect which portions are visible, and with the definition of a memory limit, the system can load in memory and render, only the visible portions at its highest level of detail possible considering the amount of zones and memory limit.

The tool was built entirely in C++ and OpenGL, with Dear ImGui and GLFW libraries. This is a quick demo of how the tool works with a 6.5 Million cells mesh:


Image processing class project: Hand gesture recognition

For my image processing class project, me and 2 of my classmates built a prototype for a rehab application for people with hand motrice problems. This prototype is inspired in the Mirror Therapy.

For the development we used pre-existent code of fingers/hand detection, and we added the functionality of detecting different types of gestures, and built an interactive game-like experience for the patient.

The idea of this project is that this software could be the starting point for a real application used by therapists and patients in this kind of rehabilitation.

The project is built using Python, OpenCV for processing the camera input, and PyGame for the gamification elements.