Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
The Littlest CPU Rasterizer (ginsweater.com)
177 points by zdw on March 10, 2014 | hide | past | favorite | 16 comments


Fun! When I saw spherical harmonics I was confused about why spherical harmonics would come into play in a voxel universe (isn't everything flat?). Digging into it a bit I found out more about spherical harmonic lighting: http://www.research.scea.com/gdc2003/spherical-harmonic-ligh...


The geometry may be flat, but relationships between objects are still arbitrary, so light can still hit things from any angle. Try as you might, you can't escape curves. ;)

That article's a classic; definitely worth a read for anyone interested in graphics.


cool ! shouldn't it be:

U32 ind = (xx-xStart + (yy-yStart) * 16+ ( zz-zStart ) * 16 * 16) * 2;

in your code, though ?


Whoops, yeah, you caught me. As I handwaved in the post, there's a little bit of implementation detail in the real code that I removed to clarify the algorithm. Fixed now, thanks.


Wonderful! Great writing too, very clear and intuitive.


i was trying to build a word cloud algorithm and then I had a question: how do you rasterize letter shapes?

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.


I like stb_truetype myself. It's C so you'll have to bind it if you're using any other language, but it's a lot simpler than Freetype. (Less features too, but it'll take a .ttf and return a bitmap, which sounds like what you want.)

http://nothings.org/stb/stb_truetype.h


It's always great to see things that people would consider nontrivial programming tasks being done with a much smaller amount of code than they would expect from looking at the more "mainstream" libraries that do it. Public domain is a big bonus too.

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.


If you have access to a GPU (or can evaluate quadratic functions of barycentric coordinates) Loop and Blinn's 2005 algorithm is brilliant http://research.microsoft.com/en-us/um/people/cloop/loopblin...


That technique is patented.


I think FreeType is the go-to solution for text rendering.

http://www.freetype.org/

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:

http://www.freetype.org/freetype2/documentation.html


For concave shapes like letters the best choice would probably be a scanline-based rasterization algorithm.

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 wrote one of those once! It was a nightmare morass of one-pixel errors. Maybe there was some clever simplification I missed that would have made it all easy, but these days I use the libraries. :P

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.


Reminds me of the sorts of techniques used in 4/64K demos.


Where can I find the complete source code?


Looks good! Are your models procedurally generated or did you create them in an external program?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: