Commonly Used Libraries in 3D Graphics Rendering

1 minute read

Published:

(work in progress…)

3D Model Loader

Some of the commonly used 3D model loading libries are tinyobjloader (limited to the .obj format), tinygltf, ASSIMP (supports wider range of formats). Here is a brief comparison between different .obj parser libraries.

ASSIMP is on of the most popular choice for 3D model handling. It is cross-platform and supports over 40 types of 3D model formats including some of the popular production formats, Collada, 3DS, ASE, DXF. However, the limitation could the the point cloud data formats. It loads a 3D model data structure and presents it on the graphics API readable format. There are two type of data structures Assimp presents (i) Array of Structures (AOS) and (ii) Structure of Arrays (SOA).

Texture and HDR Lighting etc. Asset Handler

The 3D model loading libraries often limited to the mesh loading. Therefore, additional library is required to handle the textures. For instance, stb_image is often a good match for tinyobjloader. As and advantage, stb_image is a header only library which is easier to integrate on a running project. However, some other libraries, e.g., soil and soil2 is more advance version than stb_image.

Some of the other choices could be FreeImage (cross platform, supports PNG, BMP, JPEG, TIFF), OpenImageIO (supports PNG, TIFF, TARGA, JPEG), SDL_ttf, DevIL Library (load 2D images with DevIL and create textures), SFML.

Other than the general formats for the textures, the EXR is a common format for image-based lighting. The OpenEXR is an excellent library to handle the image-based lighting (IBR).

Input-Output

  • Inputs and Window handling libraries: GLFW, SDL2

Graphical User Interface (GUI)

Some of the commonly used GUI libraries are the Dear ImGui, AntTweakBar, Qt, etc. Each of the libraries have their own advantages and limitations. For example, to the best of my knowledge (2026), the AntTweakBar is limited to the OpenGL, DirectX (9, 10, and 11 version).

The Dear ImGui is a poular choice for many open-source projects. A simple workflow for adding to the project could be:

  1. Add ImGui Headers ti the project
  2. Add ImGui State Variables
  3. Initialize ImGui
  4. Create Menu Bar (or any other GUI functionality needed) Function
  5. Important: Update Main Rendering Loop