All Projects → alecjacobson → Ascii3d

alecjacobson / Ascii3d

3D Render in ASCII art

ASCII ART

C++ implementation of image to ASCII art conversion.

The main functionality is in ascii_art in ascii_art.h. For general inputs I use stb_image_resize.h to resize the input. Otherwise, the only dependency is the standard library.

There are three executable demos exposing this:

image2ascii

Convert an input image into ASCII art

For example, if you issue:

./image2ascii ../max-schmeling.jpg

You'll see:



                          ______
                     __qMMMMMMMMMMp___
                   _qMMMMMMMMMMMMMMMQQp_
                  _QMMMMMMMMMMQMMMMMMMQMQ_
                 _QMMMMMMMMMMMMMMMMMMMMMMQy
                qMMMMMME``` `""""#WMMMMMMQ#_
               [email protected]`            `@MMMMp
               [email protected]"`             [email protected]
             _qQMMMME"`__p_____      ___MW^
            _qMD?,3ME"`@@@[email protected]   qQMMMQ
            @MM   [email protected]`      7 ``  -"[email protected]@
            "QMp  [email protected]`            "    [email protected]
            _QMM_  [email protected]_            "`    @
            [email protected]@         -__;)  `_
            @[email protected]"         ` @__ _'
             @[email protected]_`   ,=--,,,[email protected]" j
              `7MMMMQMpjj`    [email protected]`[email protected]_
                "MMMMpMQpp__`````[email protected]@@`"-,_                         _qMMMMMQp_
                 @MMMQp"7MQp___;_jQF````     `"--,__             _pQqqMMMMMMMMMMp_
                  MMMMM_  `7WWWMW^              [email protected]@@=--u__      MMMMMMMMMMMMMMMMp
                  _QMMMMMMp__           _,.- -"@@@@"`     `"@@_    MMMMMMMMMMMMMQMMp
                _qMMMMMMMMMMQ_        ```     ``"``          `MQp_ dMMMQQMMMMMQQQMMMp
               _qMMMMMMMMMMMMMp    ,,`        ```             `[email protected]
            _qQMMMMMMMMMMMMMMMMp-"" `                           "[email protected]""@MMMMMMMMp
        [email protected]@qQMMMMMMMMMMMMMMMMMp                               [email protected]"
      [email protected]@@@@MMMMMMMMMQMMMMMMMMMp;.                             "MMMMMMQMMMQMQMMMMMM#
      #@@@@@qMMMMMMMMQQQQqQQMMM#                                 MMMMMMMMMQMQMQMMMMM`
    [email protected]@@_qMMMMMMMMMMMQMMQQQME `                       _`       `9MMMMMMMMMMMMQMMMM
    [email protected]@@qMMMMMMMMMMMMMMMMMW7`_p_`                     _p_         qMMQMMMMMQMMMMMMF
   q#[email protected]@qMMMQMMQQMQMMMMMW"   `=Q__                    _jQp         `MMMMQMQMMMQQME"
   [email protected]@@MMMMMQMQMMMQQMb       [email protected]@`                  `@MMQ_          7MMQMMMMMWQMM_
   Q#[email protected]@@@@[email protected]        [email protected]@-`                  `"WWMQ_         `MMQ``7T7QMEMp
   [email protected]";"@@@@@Mp
   [email protected]@@@Q#
    q#[email protected]""`_ ;@[email protected]``        "@@@@`                      `@QMMp_   [email protected]````""@[email protected]@Q#
    [email protected]_-`@"%_qMp___ __;    @"`"`                 ``` [email protected] [email protected]__ ```[email protected]#
    #[email protected]@[email protected]"`[email protected]@@QM#
   [email protected]@@j"`    `;"`                   ```"@[email protected]@@[email protected]@@Q#
   [email protected]@[email protected]%""- [email protected]@@@@@`    `_``                   ``"@Q"[email protected]@@@Q`
  [email protected]@@j_ "[email protected]@@@@@@__-  `--`                  ```"@Q_`@[email protected]@@
 [email protected]@__""%[email protected]@@@@@@_`  "```               ` ``""@Qp  "MMMMMMMMMMMME"`
 [email protected]@@[email protected]"[email protected]@@@@@@____";``                 ```"[email protected]_  `@MMMMMMMMMME`
 [email protected]
 [email protected]@@@[email protected]@@_   _______pQQMQMMMMMEMy        `"7T"`
 "[email protected]@@@@@@qQQK  qMMQQQQQQQQQQ____QQppQqMMQMMQMMMMMM#QQpQWQQM#_
   [email protected]@@@@@qQW"   "MMMMMMMMMQQMQQQQQMEEMMMMQQQqqQWQ#QMQMMMMQQQQQp
   `MMMQQQ___QF`    qMMMQMMMM#QMpQQQMQM##QMMQQQQMMMMM#QQQpQQMMMMMMQp_
    7MMMMQMMW"       qMQQMQQMMMMMMp#MMQMMMMMQMMQQQMQMMMMQMMMMMMMMMMMMp
      `7WWF"         qMMMQQQQQQQQQQQQQQQQQMMMMMMMMMMMMMMMMQQMMMMMMMMMMp_
                    qMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQMMQMMMMMMMMMMMM#_
                   _QMMMMMMMMMMMMMMQMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQMMMMMMp
                   qMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQQMMMMMMMMMMMMMMMMMMM_
                   QMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQMMMMMM#
                  _QMMMMMMMMMMMMMMMMQMMMMMMMMMMMMMMMMMMMMMMMMMMQMMMMMMMMMM

spy

Visualize a matrix similar to MATLAB's spy command, but as ASCII art. This command constructs the cotangent Laplacian of an input triangle mesh and visualizes this sparse matrix to the terminal:

For example, if you issue:

./spy ../suzanne.obj

You'll see:

',                           _, ,.i .  .                 ~`7^*==,i,_____  .  i .__    `*=<___  .__  j,i.
  ',                             u                              ^"`77"`**~==CkiQ______   "``*~=k,___
    ',                       `7W~~8W2,Q`j?j___" '     __"                                           [email protected]_""   _
      ',                     _         _     ``7"*>~=wci,                            j             _    _   7^%wmi
        ',                     `^*=a___,_u,   ,                                                      "w___, .
          ',                           `^v=L__` ` __   ,"                                               `^=_]"_
            ',                                 `^6AQ_g_                                                      ^k__
              ',                                       `7*=aQ_x                       m_+                        `
                ',           j& *-~                            `7*w,_,- *    ~    _      ^qp"  -    s"-
                  ',                                                  `7*=upp_^ `           ^wx=
                    ',                                   __                   `7^=uQ_^          7wQt
                      ',                                    ``7">~~=<i,,___            `7*=i__
                        ',   ,,___                                           ``7^*~=<i         `^*=i__
                          ',       ```7^~~=ii,____                                                     `^*=.__
 ,     (         ,       ,  '_         .           ``7"^~          _.                               _          `"~
 )  L   _                }    9__  J     -                      _ ?                                 3_<  "
 `  d   [       ^  _     j     nAg .                             ]           _                       5_
    L   (_                    _   3y     _?   _                                                       3_ _/
    -p   \                b   -     9_<`_                                                              \6_
    `K   5_               {  _      /<Rp                                                                \ ^
    ]]  _C[               d        ( `  5gr   " `       "                                                3e `"
    ^j   `?_                      *   ` " B_ y-        g                                                  3_-    -
     (p    ]               y               yM_"   _>                                                       A* _ "
    '!)  ""7p              }       "    -   \ 0_<_,     -                                                   \</  -
    ' [   :"j              3            :     C_BQ.  _                                                       K,
      O    q"p                              _x `  9_ V,                                                       \>y
      _     _j              b                    ___jQ<                                                        q\
     \"p   ) U_             ]              j~ -    ` ~5_y                                                       ^_
_   ;  %  -   V             d           ; ~   /        TR__ _,                        _,,                        7
b             J_     "                                   `Wg_ l                       \_"
j             ;1      b                                  s ?WQ _                       T,_
M             ?__     )                                   "   jp                        \.
 )[             \     j        "y,                           `  Mp      u    _           \  ^  ,     r
 }b              p    "      _*                                   Mp_y                    V/        f
 q)              #     p                                          _JR_          :_>        y     _ "
 ({               p    )                                          ` < 9p    ~ _ p`          p    ^
  d             " 3    [                                         "      8p___                b_C
  d                y   d                                                 -5Q`                "Q
 _Rp              =0             _                               r      .-"`Rg                 @      _
   p              ! p   )                                              ?      AQ                E
 j #              C q   [                                           `_Y`        Bp  y^           y_6
  `#             ?  :p  "                                           ?`          : 9p .            @/
   d   y            J3   p                                                      y*  ?_             y
V             ?y                                         7Pe__                        ',
M__           " _     \                                  "`  L7x__                      ',
 l)              k     _                                          _Mm_                    ',
 `4             ~ \    \                                        >~  ` "^e__                 ',
 _F               C\    _                                        ,    - .<=*q_                ',
 \.L             _- \   \                                            _,-      7^m_              ',
   I   _            j\   _                                                      jw^"<_            ',
 )  L   _       .        \   `?<_                               . ^`                                ',
    y   Gg                _   _  JD<_                            `           `                        ',
    Q) = fb               \  =.    .R[7w_                                                               ',
    'q   "/_                      *`  "  `b&_                                                             ',
    ['L  ")!p              (       `    ,   ^ Te_                                                           ',
      U    v"_              p                < `  P<__                                                        ',
     j"p   - T_             l              L~     `^`~>q_                                                       ',

ascii3d

Ray trace an input 3D triangle mesh or 3D scene as ASCII art.

For example if you issue,

./ascii3d ../suzanne.obj

You'll see:

                              _____mmmmmmmmmm_____                              
                          [email protected]@@@"""""""""""""""@@@m__                          
                        [email protected]@@"`___``   ``   ``___`"@@@p_                        
                      [email protected]@@@_j"`  `%_      _/`  `"@[email protected]@@@@_                      
                     /@@@@[email protected]`       @_    [email protected]       `%@[email protected]@@h                     
                    [email protected]@"` _;````";_ "_  [email protected] _;"````;_ `"@@@k                    
          -'___  _ [email protected]` [email protected]"`__, ,_ `- `""` ;" _ ,,__`"%__ `@_ _  ___'-          
        ,  _QQQQp_^#@@"`` [email protected]_-``-_%  `    `  ;_-``"[email protected]@ ```"@@"_qQQQQ__ \        
        @ j    `[email protected]@_   @@"    j_          _)    `@@   [email protected]@`    % _        
        ) |``   @@@[email protected]@_;_"@@[email protected]@          @@[email protected]/_;[email protected]@@   ``j j        
         @ ,``` @@@@[email protected][email protected]_"[email protected]@@`-           `@@@R"[email protected]"[email protected]@@@ ```, j`        
          "__~__"@@[email protected][email protected]@""`              `""@@[email protected]@@"__-"jF          
            `%m___"@WMMMMMQQQpp____          [email protected]"___p="            
                 `77777``7FWMMQQQQQp__ __ __jQQQQQMMWF7```7777`                 
                             7WMQMME__    _pQMMQMW^                             
                                [email protected]"@mjjpF"@MMK`                               
                                 @@"        "@@                                 
                                [email protected]@`        `"@_                                
                                (@"          `@]                                
                                #@`          `@@                                
```````````````````````````    [email protected]@`          `"@p    ```````````````````````````
``````````````[email protected]"`  _q__p_  `"@p_________________``````````````
             ````"""""""%%@@@@@[email protected]@___"_``[email protected][email protected]@@@@@@%""""""""```             
                         ```````Wp__pppppppp__q#"```````                        
                                ``````77777``````                               

This ray-tracer is interactive

Try hitting the hjklJK keys to interact with the 3D scene:

Compilation

mkdir build
cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release
make 

Demos depends on libigl, stb, Eigen, Embree.

Note

This implementation is hard-coded to work best with Courier New Bold.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].