Editor and Engine Showoff The code is on Github at https://github.com/AmirAzmi/DeferredGraphics ! Please clone and play around with it and recommend new features to add! Watch the video on HD for better quality! What and Why ImGui? ImGui is C++ GUI library primarily for the use of game development and it follow the practices of immediate mode user interface where all […]
ImGui is C++ GUI library primarily for the use of game development and it follow the practices of immediate mode user interface where all the UI is always drawn repeatedly where the benefit of this is rapid prototyping. I chose ImGui for the exact reason of it being that I could quickly develop tools for end users such as designers and artists to bring their ideas to life.
Editor Features I Implemented
Features Implemented Shown in Video:
Docking Windows for User Customization
Displaying the Scene Within a Window
Adding and Removing Entities
Adding and Removing Components
Translation, Rotation, and Scale of Objects
Changing of Color and Specular Intensity
Hot Swapping Meshes and/or Shaders Loaded From Folders
Changing of Light Color and Position
HDR, Exposure Tone Mapping, and Bloom
Uncharted 2 Tone Mapping
Viewing of Specific Deferred Textures and Bloom Textures
Axis Aligned Bounding Boxes and Sphere Bounding Volumes
AABB Top Down Dynamic Bounding Volume Hierarchy
Features Implemented not Shown in Video but in current build:
Octree implementation of a single object
Custom Linear Allocator and Profiler for tracking memory usage of the Octree and BVH nodes
Raycast – Intersection AABB test
Assimp Model Loading and Animations
Bezier Curves
Inverse Kinematics
Cloth Simulations
Editor Difficulties
One of my goals for this editor was the ability to select any object you want just by having it within a specific folder name/path. This was slightly difficult due to the fact that going through directories in C++ was slightly tedious. Fortunately C++17 came out with the feature of std::filesystems which allows you to search folders or assets within your working directory. After learning this, I spent a good amount of time learning about filesystems and was finally able to use it to load all object and shader files automatically. Another difficulty that I recently had trouble with was with the use of custom memory allocations. I wanted to use my own memory manager for my temporary trees so I decided on using a Linear Allocator. It is a simple allocator which tracks temporary objects, and in this case nodes for the trees.
ImprovementsThatCan Be Made
Some improvements to the editor that can made are changing object names which requires serialization, selecting objects to show its properties which entails raycasting, and finally dragging of objects in game. These features are all essential and monumental tasks for an engine to have and my next goals are to accomplish these set of features.