Hacker News new | past | comments | ask | show | jobs | submit login
Smallpt: Global Illumination in 99 lines of C++ (with no external deps) (kevinbeason.com)
94 points by benhoyt on Jan 13, 2010 | hide | past | favorite | 14 comments



I love that they modeled the walls of the room with giant spheres... a wonderful hack to avoid having to support plane primitives while still producing something that looks like a Cornell box.



It could be 1 line. sloc doesn't mean much for C++ unless the code is sanely formatted. E.g. an if/else should be at least 2 lines, usually 4.

Edit: That said, I'm still impressed.


The listing is contrained to 72 columns width, so it really couldn't be one line.


This is a sight more readable than some much more sanely formatted C++ programs I've read. What I've learned from this that it's often the simplicity of the program that's more important than the formatting. (Although formatting is of course still important and anyone who inflicts code like this on their coworkers doesn't reach my standard of "decent human being.")


Readable!


Nice. Though all of the 99 lines are >75 characters. With a more readable formatting it would be twice as long... ;-)


Actually, all of the lines are <75 characters. But yeah, it'd be at least twice that long with a normal coding standard.


Actually, I think that this style is readable. The problem, though, it that it is hard to modify. Which would be a real trouble for code that needs to be maintained.


Yes, this would be tons more philanthropic and if it were just readable. Just some simple line breaks and variable names that meant something. It's not impressive that you can just cram stuff into 99 lines.


Actually, the code seemed to be a mess but was quite readable. I read it through. You could almost see all the code in once glance which is when you pretty much don't need formatting anymore, just some time to initially absorb the code.


I wish the source code was cross-platform. It doesn't build in Visual Studio.

  'erand48': identifier not found
  'M_PI' : undeclared identifier
Obviously #define M_PI 3.1415926 should do the trick, but I need to track down an erand48 replacement.


erand48 returns random doubles from [0.0, 1.0). The argument to erand48() is just a state vector (instead of the usual unsafe convention of having the RNG store its state internally). You can replace it with a call to any other equivalent random number generator.

http://www.opengroup.org/onlinepubs/000095399/functions/eran...





Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: