This version of the Rayshade User's Guide also contains information about enhancements people made to rayshade. A link to this chapter is present to praise the one who made the enhancement and where you can get the source. However, most (if not all) of these enhancements are already in the source if you've got version 4.0.6.
The list of enhancements in no particular order:
According to Larry Coffin:
There are a few known bugs:
Other problems:
- Often there is a "shadow" ring around the diameter of the primitive where the functions are evaluated at t = 0.5. Presumably this is due to roundoff error possibly in the root finding algorithms, perhaps elsewhere.
- Some configurations using the bezier specification result in garbage. Usually this can be avoided by changing the defining point's values slightly without affecting the curve noticeably. Examples are bezier -10 0 0 -10 0 0 10 0 0 10 0 0 and bezier -10 0 0 10 0 10 -10 0 10 10 0 0.
Using third order equations to define the center path or the radius requires solving a tenth order equation when checking for intersection. All roots over the interval (0,1) must be found, not just the smallest. The root finder used was one that I wrote that uses a combination of Newton-Rasphson and bisection. It ends up being fairly slow and probably could use some speeding up. A few possibilities would be using Sturm sequences to find the number of roots over an interval (I tried this but my algorithm did not find all the roots and thus produced gaps in the surface. I plan on trying to fix it if I can.) and to reduce the polynomial by dividing through by known roots before solving for remaining roots.
Any comments, bug reports, or suggestions for changes or improvements will be greatly appreciated.
There is however one problem with a conflict in the syntax, but Thomas Mueller had a fix for that:
From: Thomas Mueller AKA Howie <mueller@karlsruhe.gmd.de> Date: Tue, 15 Jun 93 09:30:21 +0200 Subject: lex.l conflict with symtab.c 4.06.enh2 Hmmm, I'm not the ``real maintainer'' of rayshade, but since I'm in compiler business, I know a bit :-) about parsers. The simplest patch is to fix the rule for Symtabent in yacc.y to: Symtabent : tSTRING {$$ = SymtabBuiltinFind($1);} | tLINEAR {$$ = SymtabBuiltinFind(strsave("linear"));} ; Then coin.ray and gradient.ray both work fine. Have fun Howie