Inspiration

Our inspiration was sparked by the concepts taught in MATH232, where we delved into the intriguing process of projecting 3D points onto a 2D plane. Plus the idea of linear transformation based on matrix.

What it does

Our project visualizes a detailed 3D representation of a leaf on your terminal. It can rasterize the leaf, and also rotate the leaf when user left click it, in order to give a more dynamic and interactive user experience.

How we built it

  • Rotation: Crafted using a fusion of rotation and translation matrices, our design ensures the object mirrors a natural "flip" rather than rotate around y-axis.
  • Projection: Simply by dropping the z component.
  • Rasterization: Based on scan-line algorithm.
  • Shading: Used geometric distribution to randomly assigns darkness values to each cell. These values are then translated into varied ASCII codes to create a gradient effect.
  • User Interaction: Integrated with a custom wrapper around ncurses, which was designed under signal design pattern.

Challenges & Accomplishments

Navigating the challenges of maintaining accuracy amidst floating calculations, especially within the constraints of terminal cell indexes, was no small feat. Additionally, designing a coherent and modular project structure under time constraints presented its own set of challenges. Yet, against these odds, we take pride in our achievement, that we successfully applied the systemster learning into this TUI 3D project, without formal training in computer graphics or vision.

Built With

  • c++
  • cmake
  • ncurses
Share this project:

Updates