10. 17,000 Polygons Should Be Enough For Anyone
Steve White, Neo-Visuals’ founder, had also founded (or co-founded) Vertigo Graphics in Vancouver some years back. He had written all of their 3D software, and had brought it with him to Toronto to start his new company.
The system, initially named Vista and later renamed Vishad, had an architecture that was years ahead of its time. True, it was written in Fortran, which wasn’t the coolest or trendiest language. (Since Fortran had no dynamic memory allocation, the product shipped with static arrays for 17K polygons and 30K vertices.) But the stroke of genius was that it was built around a scripting language for 3D modeling. It had a REPL!
Prior to our adding a GUI (written in raw GL in those pre-OpenGL days), everything was done via the scripting language. The system would save your commands in a journal file, which you could later edit and clean up as desired. Even when we added a GUI (which involved writing an object-oriented framework in Fortran), all graphical commands were recorded as scripts in the journal file.
These were amazingly powerful features which did not become commonplace in 3D packages for another ten years.
An indelible image etched in my mind is that of Steve, usually wearing a white button down shirt, hunched over his keyboard pecking at the keys while holding a cigarette between his fingers. Both he and his father were chainsmokers, and in those days you could smoke indoors. I am amazed looking back that it didn’t bother me. Then again, back then I could also eat fast food every day and not feel the effects. No longer.
Design & Code
Fractal terrain was all the rage in the 80’s. So of course I had to make some terrain when testing my heightfields from the last post, as seen in the image above.
I used layered frequencies of Perlin noise, pulling out the code above and dusting it off. It was written in 1992 on a PowerBook 170 running Macintosh Common Lisp (Wouldn’t be wonderful if Apple would provide CL for the Mac today?).
To be honest I don’t remember how this code works. Or if it is efficient. But it is what it is, and it appears to give the expected visual results. It may even have been code I transcribed from previous C code of mine.
The function “turbulence” does the layering of different frequency noise values, by doubling the frequency and halving the amplitude of each layer.
Almost ten years later I would implement Perlin noise on the VU1 processor of the PS2. The lowest-level programming I ever did.