# ouros Ouros is a rudimentary 3D rendering application built with C++ utilizing the Vulkan API for blazing fast rasterization and shading. This is mainly for tinkering around, so don't expect the most performant and clean code. I will be using the amazing Sascha Willems's https://howtovulkan.com/ guide as a platform. ## Some design philosphies: - Cross platform (Windown & Linux, Debian in my case) - Minimal external libraries. Some libraries are unavoidable, especially for a project with a large scope. Libraries for window creation, matrix math, and device interfacing are inevitable, but dependency complexity is usually a problem. - Compartmentalization: units should be separated a part from each other as mushc as possible to reduce codebase complexity. eg, the renderer should be completely separate from a keyboard interface. - Performance tracking: since Vulkan is absurdly configurable, different options need to be able to be profiled to determine the best option - Configurability: being able to change things without a rebuild is in general good practice. I like yaml - Fun: if its a pain to maintain then you're doing it wrong - shmunguss ## Roadmap Below is some steps to organize development plan and future goals, mostly following Sascha's guide. - [ ] Repo setup - [ ] Hello world application - [ ] Window creation (glfw or sdl) - [ ] Vulkan installation - [ ] Hello Vulkan: instance creation - [ ] Device/GPU Setup - [ ] Graphic pipeline -> swapchain - [ ] Shaders - [ ] Hello triangle - [ ] 3D - [ ] Texture loader - [ ] Model Loader - [ ] Mouse/Keyboard inputs Below is beyond Sascha's guide, but available elsewhere on his github. These are more long term ideas. - [ ] Lighting - [ ] Shadows (via Shadow Mapping) - [ ] Compute Shading - [ ] Raytracing - [ ] Graphical User Interfacing - [ ] Post-Processing Effects - [ ] Procedural Generation - [ ] Particles ## Build instructions TODO: git clone, build/install libraries script, cmake commands, etc. TODO: identify dependencies and how to install them (vulkan libraries, sdl, glm, etc.) ## Additional Resources - https://howtovulkan.com/ - Will add more as I use them