Luke Palmer wrote:
On Fri, Mar 28, 2008 at 6:28 AM, Jim Snow <[EMAIL PROTECTED]> wrote:
I was trying to get Blinn highlights working with my raytracer, and kept
getting ugly artifacts. After trying a bunch of things, I finally
compiled without -O2, and the artifacts went away.
Here's what I mean:
http://syn.cs.pdx.edu/~jsnow/glome/Glome.hs-noartifact.png
http://syn.cs.pdx.edu/~jsnow/glome/Glome.hs-artifact.png
Here's the offending code, run "./make" and "./run" and you should see
the artifacts if your setup is the same as mine. (Requires OpenGL.)
http://syn.cs.pdx.edu/~jsnow/glome/glome.hs-0.2-bug.tar.gz
The artifacts also go away if I use -fvia-C. It doesn't seem to matter
whether I use Floats or Doubles in the rendering code. The artifacts
also show up with -O1. Have I stumbled across a known compiler bug? Or
perhaps an OpenGL bug? (The bug could, of course, be in my code, but
then one might expect to get the same erroneous output every time
regardless of compiler flags.)
To reiterate, I'm using ghc 8.6.2.
You probably mean 6.8.2.
Yes, my mistake. 6.8.2.
Works for me in all cases.
% uname -a
Linux madhatter 2.6.22-gentoo-r8 #6 PREEMPT Sat Oct 20 04:19:22 GMT
2007 i686 AMD Turion(tm) 64 Mobile Technology ML-40 AuthenticAMD
GNU/Linux
% ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.8.2
Looks to me like Glome is depending on some very fine details of
floating point arithmetic.
Luke
After looking into this for awhile, I found that the problem was that in
computing my Blinn factor:
blinn = fmax 0 $ (vdot halfangle n) ** shine
the (vdot halfangle n) was sometimes negative, resulting in blinn being
"NaN". OpenGL apparently interprets "NaN" as "1.0" for the purposes of
color*, so those patches were rendered bright white. It's still a bit
mysterious why the case where (vdot halfangle n) is negative only occurs
if I compile with "-fasm", but I can work around it for now.
-jim
* I'm using the binary-only nvidia drivers; different OpenGL
implementations may behave differently.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe