Here’s the whole story…
There are so many games out there in the realm of PC and console, but understanding the logic behind games and the complex nature is another thing entirely. This project was inspired through a desire to understand 3D graphics programming and try to make our drawing efficient.
What it does
Our application uses OpenGL libraries and the concept of the OpenGL graphics pipeline to share the workload of processing for a graphics application. The program is able to read bitmap files (for texture data), .obj files (stores vertices, texture coordinates, normal values), and can compile shaders (written in GLSL) to render graphics using the GPU. The updating of vectors to transform the objects (object transformations represented by Matrices) occurs on the CPU. At the start, vertex values (those imported by the .obj file loader) are sent to a buffer (memory space) which is used by the GPU, so that way, vertex data is only sent once. This makes rendering more efficient.
How I built it
The application was built on a mac compiled to native c++ using the clang compiler. It was linked to OpenGL based libraries (GLEW & glfw), which we used in our program for the function calls. OBJ files were exported from Blender and the textures were mapped from there as well.
Challenges I ran into
We had previous ideas what to make, but we made a couple revisions. Finally, we decided on featuring some of the cool features of 3D graphics programming, as well as focusing on performance of the program.
Accomplishments that we’re proud of
We’re proud of how fast it runs; it has smooth motion. We’re also proud of being able to use multiple shaders at once. We made this program ourselves with tools used in industry, we are proud of that.
What I learned
How to work well with a team and how to use each one of our skills, and areas of expertise, to make a cohesive project. We also learned how to adapt our code given the time constraints and great stress.
What’s next for CanOpener
Make a dedicated library based off the program, to be used in future projects by anyone who wants to. This would allow us and others to be able to create all sort of different games; with the re-linking of other system's library types, the platform could be used on other OS’s as well.