You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.8 KiB

Small3dlib

Small3dlib (S3L) is a very portable LRS/suckless single header 3D software renderer library written by drummyfish in the C programming language. It is very efficient and runs on many resource-limited computers such as embedded open consoles. It is similar to TinyGL, but yet more simple. Small3dlib is public domain free software under CC0, written in under 3000 lines of code.

The repository is available at https://codeberg.org/drummyfish/small3dlib and https://gitlab.com/drummyfish/small3dlib.

Small3dlib can be used for rendering 3D graphics on almost any device as it is written in pure C99 without any software and hardware dependencies; it doesn't use the standard library, floating point or GPU. It is also very flexible, not forcing any preprogrammed shaders -- instead it only computes which pixels should be rasterized and lets the programmer of the main application decide himself what should be done with these pixels (this is typically applying some shading and writing them to screen).

Some of the rendering features include:

  • different drawing strategies (z-buffer, sorted rendering, ...)
  • top-left rasterization rule (no holes between or overlaps of triangles)
  • perspective correction (either none, full or approximate)
  • different near plane collision handling strategies (culling, clipping, shifting, ...)
                                                            ##x
                                                         ####xx
                                                      ######xxxx
                ..xx                               ########xxxxx
             .....xxx                           ##########xxxxxx
          .......xxxxx                       #############xxxxxxx
          .......xxxxxxx                    #############xxxxxxxx
          .......xxxxxxxx                  #############xxxxxxxxxx
         .......xxxxxxxxxx                #############xxxxxxxxxxx
         .......xxxxxxxxxxx              #############xxxxxxxxxxxx
        ........xxxxxxxxxxxxx           ##############xxxxxxxxxxxxx
        .......xxxxxxxxxxxxxxx         ##############xxxxxxxxxxxxxx
        .......xxxxxxxxxxxxxxxx       ##############xxxxxxxxxxxxxxxx
       ........xxxxxxxxxxxxxxxxx     ##############xxxxxxxxxxxxxxxxx
       .......xxxxxxxxxxxxxxxxxx    ##############xxxxxxxxxxxxxxxxxx
      ........xxxxxxxxxxxxxxxxxx   ................xxxxxxxxxxxxxxxxxx
      ........xxxxxxxxxxxxxxxxxx    ................xxxxxxxxxxxxxxxxx
      .......xxxxxxxxxxxxxxxxxx      ...............xxxxxxxxxxxxxxxxx
     ........xxxxxxxxxxxxxxxxxx      ................xxxxxxxxxxxxxxxx
     ........xxxxxxxxxxxxxxxxxx       ...............xxxxxxxxxxxxxxx
    ........xxxxxxxxxxxxxxxxxxx        ...............xxxxxxxxxxxxxx
    ........xxxxxxxxxxxxxxxxxx         ................xxxxxxxxxxxx
    ........xxxxxxxxxxxxxxxxxx          ...............xxxxxxxxxxxx
   ........xxxxxxxxxxxxxxxxxxx           ...............xxxxxxxxxx
   ........xxxxxxxxxxxxxxxxxxx           ...............xxxxxxxxxx
  .........xxxxxxxxxxxxxxxxxx             ...............xxxxxxxx
         #xxxxxxxxxxxxxxxxxxx              ..............xxxxxxxx
               #xxxxxxxxxxxxx              ...............xxxxxx
                      xxxxxxx                 .............xxxxx
                                                 ..........xxxx
                                                    ........xxx
                                                       .....xx
                                                          ...x

Simple ASCII rendering made with small3dlib.