The Littlest CPU Rasterizer
ginsweater.com
ginsweater.com
That article's a classic; definitely worth a read for anyone interested in graphics.
U32 ind = (xx-xStart + (yy-yStart) * 16+ ( zz-zStart ) * 16 * 16) * 2;
in your code, though ?
I looked at pyCairo but I couldn't figure out how to use it. http://cairographics.org/documentation/pycairo/3/
I asked on StackOverflow no answer http://stackoverflow.com/questions/21915335/getting-the-bitm...
i found the true-type format shape files and extracted polygons from those - which i also don't know how to rasterize.
i know this not really a response to the posted link - which is very low level and interesting - but maybe someone here knows an answer.
Sort all polygon edges from top to bottom and walk through that list line-by-line, keeping track of all active edges for each scanline. For those you can then find all intersections and fill the ranges in-between. By using an even-odd rule you can make sure that concave polygons and polygons with holes are filled properly.
I know that's how stb_truetype's renderer works, incidentally. Don't know if Freetype is the same, but I'd be mildly surprised to find it wasn't.
My take on the word cloud problem:
1. Sort words by frequency. Map the highest and lowest frequencies to some maximum and minimum font size.
2. Render each word into an individual image with FreeType.
3. Find some pleasing way to arrange the word images using only their bounding boxes.
4. Render the word images into a final image, picking a random pleasant color to tint each word as you go.
EDIT: Or did you mean, "how does font rendering work"? In that case, I think it mostly boils down to rasterizing line segments and Bezier curves, along with algorithms for kerning and for trying to fit the text to the pixel grid. FreeType's documentation goes into great detail about what exactly a modern text renderer has to deal with, yet I found it to be very accessible as someone with little prior knowledge of the field. I recommend giving it a look:In comparison, Freetype is absolutely monsterous; it is a few times faster according to some benchmarks I've found, but a few orders of magnitude bigger too. Sometimes you don't need the fastest, you just want something simple that works.