Inspiration
Lilac is a celebration of my love for the field of computer graphics, art, and the nostalgia that I hold for early graphical applications. I wanted to create something that attests to the passion I have for the beauty of graphical algorithms, so I made an entire Paint-inspired OpenGL app from scratch, wherein I've implemented everything on my own in C++.
What it does
Lilac's features include, but are not limited to:
- Line Drawing: Using Bresenham's line drawing algorithm
- Circle Drawing: Using Bresenham's circle drawing algorithm
- Bezier Curves: With any arbitrary number of control points
- Spline Curves: Of degrees 2, 3 and 4
- Color Filling: Using the flood fill algorithm
- Polygon Clipping: Using Sutherland-Hodgeman's algorithm
- Transformations:
- Translation
- Rotation
- Scaling
- Shearing - Shape Editing:
- Thickness modification
- Style modification
- Color modification
- Endpoints modification for lines, center and radius modification for circles, Control Points modification for curves
How we built it
Though the app is made using OpenGL, OpenGL is just used to render singular pixels onto the screen. I wrote the algorithms to actually draw shapes, and transform and modify them, on my own using C++.
Challenges we ran into
Creating an application like this in C++ from the base up within just the duration of the hackathon was really tough. I wasn't able to incorporate all the features that I wanted onto the interface, so the input is partly keypress and command-based. The interface itself turned out to be more simplistic than I had planned initially.
Accomplishments that we're proud of
To be able to create such a project as this within such a short time frame is an accomplishment in itself, in my opinion. I'm proud that I was able to write up all the algorithms by myself and still created something functional, artistic and useful.
What we learned
A whole lot about computer graphics, OpenGL, and program design and object oriented programming in C++.
What's next for Lilac
A better interface, more features, shifting some of the existing input from the keyboard to the interface itself.

Log in or sign up for Devpost to join the conversation.