LOVE-Projections

Overview


LOVE-Projections renders 3D models (.obj files) by projecting them onto 2D space using a strong perspective projection approach. A primitive shader has been added, but z-buffering proved beyond my skill set, entirely ruining the effect.

Methods


Perspective Projection simulates the action of a pinhole camera, allowing for a good amount of depth perspective. I started creating the shader by taking the dot product of the cross product of two edges of a face and a vector towards the light source. This product could then easily be used to shade the RGB values of a polygon. Unfortunately, it became difficult and downright slow to make it so elements wouldn't render over each other. I tried to implement a z-buffer using z-culling, not rendering polygons the farthest away. Unfortunatly, this turned out as effective as you would think it would. Much slower too!

Takeaways


I didn't have nearly as much experience using matrices and vectors for graphics transformations before this project. When starting, I felt nearly helpless. You can only imagine the wonky shapes I had to witness in the creation of this project. I also don't think I have ever spent as much time reading wikipedia and online articles in order to get my project to work, so suffice to say I am proud of my own ability to learn and pick up on new information quickly. I also spent a fair amount of time getting practice on the linux command line.

Overall, I crushed my initial hopes of simply being able to render a box into loading object files and performing tricky computations. The project was much harder than I thought it would be, and I am so happy with the output I got.

Future


From some talk I have had with peers on computer graphics, I think it would be possible to write shader code in LOVE using GLSL, which would provide the outputs I was looking for the whole event. That is, beautiful z-buffering and shading! It was also bland staring at a black and white model the entire time, it would definitely be a goal to introduce some normal mapping.

Credits


Source File(s)
Adrian Alberto vector.lua
Landon Manning loader.lua
Michael Lutz, David Manura matrix.lua
Objects object files

LOVE-Projections is written in lua and brought to life by the amazing LOVE2D engine. https://love2d.org/

Knight Hacks 2019 https://knighthacks.org/

Made with love.

Thanks for reading!

Built With

Share this project:
×

Updates