alecjacobson / Ascii3d
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.